react-native集成友盟分享功能(手动ios Android)

分享之前做过,但是使用的是第三方的封装,很简单.
但是很多第三方都不维护,造成包无法升级.
看了友盟的官网,是支持RN的 所以自己手动集成
下面说下步骤:
友盟分享的官网
https://www.umeng.com/social
大家自己注册账号 然后拿到KEY 这些都不用说太多了吧
开发者文档再这,可一直姐看看
https://developer.umeng.com/docs/66632/detail/67587#h3-u521Du59CBu5316
下载包的地址在这
https://developer.umeng.com/sdk/reactnative

image.png

这里的包可以挑选下载不一定要全部都下载.

下面开始集成

一 ios集成

ios相对简单一些
下载下来的包里是这样的


image.png

直接把这些文件导入进你的项目就可以了,
下面是我的目录结构


image.png

首先创建UMComponent 和 UMshake文件夹
按照目录顺序 到你下载的SDK 去找对应的文件导入到文件夹内

image.png

你看可以这样导入
image.png

image.png

上图这几个文件是RN 和ios的桥接文件必须要有

在Other Linker Flags加入-ObjC ,注意不要写为-Objc,注:-ObjC属于链接库必备参数,如果不加此项,会导致库文件无法被正确链接,SDK无法正常运行
大小写一定要注意


image.png

下一步添加包

libsqlite3.tbd
CoreGraphics.framework
SystemConfiguration.framework
CoreTelephony.framework
libc++.tbd
libz.tbd
image.png

下一步配置白名单
配置SSO白名单,右键info.plist选择source code打开(plist具体设置在Build Setting -> Packaging -> Info.plist File可获取plist路径)请根据选择的平台对以下配置进行裁剪:

LSApplicationQueriesSchemes

    
    wechat
    weixin

    
    sinaweibohd
    sinaweibo
    sinaweibosso
    weibosdk
    weibosdk2.5

    
    mqqapi
    mqq
    mqqOpensdkSSoLogin
    mqqconnect
    mqqopensdkdataline
    mqqopensdkgrouptribeshare
    mqqopensdkfriend
    mqqopensdkapi
    mqqopensdkapiV2
    mqqopensdkapiV3
    mqqopensdkapiV4
    mqzoneopensdk
    wtloginmqq
    wtloginmqq2
    mqqwpa
    mqzone
    mqzonev2
    mqzoneshare
    wtloginqzone
    mqzonewx
    mqzoneopensdkapiV2
    mqzoneopensdkapi19
    mqzoneopensdkapi
    mqqbrowser
    mttbrowser
    tim
    timapi
    timopensdkfriend
    timwpa
    timgamebindinggroup
    timapiwallet
    timOpensdkSSoLogin
    wtlogintim
    timopensdkgrouptribeshare
    timopensdkapiV4
    timgamebindinggroup
    timopensdkdataline
    wtlogintimV1
    timapiV1

    
    alipay
    alipayshare

    
      dingtalk
      dingtalk-open

    
    linkedin
    linkedin-sdk2
    linkedin-sdk

    
    laiwangsso

    
    yixin
    yixinopenapi

    
    instagram

    
    whatsapp

    
    line

    
    fbapi
    fb-messenger-api
    fbauth2
    fbshareextension

      
     
        
    kakaofa63a0b2356e923f3edd6512d531f546
    kakaokompassauth
    storykompassauth
    kakaolink
    kakaotalk-4.5.0
    kakaostory-2.9.0

     
    pinterestsdk.v1

     
    tumblr

   
    evernote
    en
    enx
    evernotecid
    evernotemsg

   
    youdaonote
    ynotedictfav
    com.youdao.note.todayViewNote
    ynotesharesdk

   
    gplus

   
    pocket
    readitlater
    pocket-oauth-v1
    fb131450656879143
    en-readitlater-5776
    com.ideashower.ReadItLaterPro3
    com.ideashower.ReadItLaterPro
    com.ideashower.ReadItLaterProAlpha
    com.ideashower.ReadItLaterProEnterprise

   
    vk
    vk-share
    vkauthorize

   
    twitter
    twitterauth

下一步配置URL Scheme
URL Scheme是通过系统找到并跳转对应app的一类设置,通过向项目中的info.plist文件中加入URL types可使用第三方平台所注册的appkey信息向系统注册你的app,当跳转到第三方应用授权或分享后,可直接跳转回你的app。
添加URL Types可工程设置面板设置

image.png

初始化,AppDelegate.m设置友盟appkey以及各个平台的appkey和secret

#import "RNUMConfigure.h"
#import 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  /**********************************************************************************************************************/
  /* 打开调试日志 */
  [UMConfigure setLogEnabled:YES];

  /* 设置友盟appkey */
  [RNUMConfigure initWithAppkey:@"5asd23323222se0001cc" channel:@"App Store"];

  /*
   * 关闭强制验证https,可允许http图片分享,但需要在info.plist设置安全域名
   */
  [UMSocialGlobal shareInstance].isUsingHttpsWhenShareContent = NO;

  /*
   设置微信的appKey和appSecret
   */
  [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wx179afsafasw23b54ae" appSecret:@"5a4142fsdsfswe9a40e93fc" redirectURL:nil];

  /*
   设置分享到QQ互联的appID
   */

  [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"110233248545"/*设置QQ平台的appID*/  appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];

  /*
   设置新浪的appKey和appSecret
   */
  [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"27239964"  appSecret:@"fac50980a44sdsdsssdsc968ea572887" redirectURL:@"http://sns.whalecloud.com"];
  /**********************************************************************************************************************/
  
  
  return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  {
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
    if (!result) {
      // 其他如支付等SDK的回调
    }
    return result;
  }

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
  {
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
    if (!result) {
      // 其他如支付等SDK的回调
    }
    return result;
  }

进入下载目录的ReactNative找到common下的js中的ShareUtil.js,拷贝到我们RN目录下,即可导入使用


image.png

使用方式,注:android与ios平台回调中的code值不一致,ios成功时code:200,android成功时code:0

import ShareUtile from '../../../components/UMShake/ShareUtil';
//分享面板
//这里注意list 是个数组  例如:[2,3] 2,3 就是对应的微信和朋友圈
//list对应的就是分享面板里的图标安卓你要自己手动添加
 ShareUtile.shareboard(text,img,url,title,list,(code,message) =>{
            this.setState({result:message});
        });
text 为分享内容
img 为图片地址,可以为链接,本地地址以及res图片(如果使用res,请使用如下写法:res/icon.png)
url 为分享链接,可以为空
title 为分享链接的标题
list 为分享平台数组,如:var list = [0,1,2]
callback中code为错误码,当为0时,标记成功。message为错误信息

官网有明确说明对应的ID 自行查找


image.png

ios到此就结束了,如果 有什么问题 可以留言

二 安卓集成

android/app目录下新建libs目录,将下载目录的Android中的所有jar包拷贝至libs
依次添加 就可以了,这里我只截图大家看着名字添加
我只添加了这几个有需要的可以添加多个
没有libs 文件夹就创建文件件


image.png

app下的build.gradle添加

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

将下载文件的ReactNative目录中所有跟android相关的java文件拷贝至目标项目包下,修改对应包名
没有文件夹就创建文件夹


image.png

WXEntryActivity文件 是我自己创建的

//这里你只需要集成就好了,可以不写回调方法,但是写了也无所谓,你可以直接C大法
import android.content.Intent;

import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.weixin.view.WXCallbackActivity;


public class WXEntryActivity extends WXCallbackActivity{


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }


}

初始化配置
需要在MainApplication.java下添加


public class MainApplication extends Application implements ReactApplication {

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override
        public boolean getUseDeveloperSupport() {
            return BuildConfig.DEBUG;
        }

        @Override
        protected List getPackages() {
            return Arrays.asList(
                    new MainReactPackage(),
                    new SharePackage()
            );
        }

    @Override
    public void onCreate() {
        super.onCreate();
        SoLoader.init(this, false);
        RNUMConfigure.init(this, "5aea333aefsd", "Umeng", UMConfigure.DEVICE_TYPE_PHONE,
                "");
    }

    // 配置平台key、secret信息
//这里的appkey 都是错的 不能用,请自己申请
    {
        PlatformConfig.setWeixin("wx.....", "5a65gtyj.......");
        PlatformConfig.setQQZone("1......", "66ryj6.....");
        PlatformConfig.setSinaWeibo("5tgh777", "asdfa4rase222222", "www.baidu.com");
    }
}

添加权限




   

添加图片


image.png

安卓的文件夹下都有这些图标,没有的就自己创建吧
最好全部放到自己工程,如果你不是安卓小白那就挑着选


image.png

其他的2个文件也要添加,下载的包里也都有,只看名字就可以自己找到了


image.png

到这里就结束了 你自己可以试试了.

你可能感兴趣的:(react-native集成友盟分享功能(手动ios Android))