React Native封装微信\QQ分享组件

前言

移动端开发中,分享功能基本上是每一个app上必备的功能。对于原生app来说,我们接入分享功能也不算复杂,直接接入三方的友盟sdk,只需要几步就能搞定。但是对于RN开发就稍微麻烦些,因为很多三方的平台暂不提供ReactNative的sdk,这时我们就需要在原生的基础之上再进行封装,然后提供接口给RN调用。下面介绍的就是基于此方案在RN工程汇中集成分享。

效果图

img

项目Demo工程地址:https://github.com/guangqiang-liu/react-native-shareLogin.git

本套教程使用的SDK版本号:v6.4.5

Demo中使用到的v6.4.5SDK为精简版本

  • 什么是精简版
    • 大部分三方分享平台都需要借助官方SDK来进行实现,而官方SDK由于包含很多复杂功能,因此体积通常很庞大,比如微信SDK和新浪SDK,体积分别为14M和25M,从6.4.1版本开始,UShare对微信、新浪、QQ三方的官方SDK做了精简操作,只保留和分享、登录核心功能相关的代码,最大限度精简体积。
  • 精简版和完整版区别
    • 正常的分享、登录功能,精简版和完整版是没有任何区别的,分享及登录界面也没有任何区别,因此,我们推荐开发者们可以直接使用精简版来进行集成,可以大幅度缩减体积
  • 老版本如何升级使用精简版
    • 如果是从6.x版本升级上来的开发者,可以直接替换对应的库文件即可,在API上我们做了最大兼容,基本不影响旧版开发者升级使用,从5.x或者4.x版本升级上来的开发者,注意要将旧版本库文件、资源文件删掉后再进行集成,避免引起冲突等问题

分享平台

  • 微信
  • 朋友圈
  • QQ
  • QQ空间
  • 新浪微博

iOS端

1. SDK集成与配置

1.1 手动集成

考虑到很多同学是非iOS开发者,这里集成sdk我们就采取最原始的手动集成方式。避免使用pod

1.1.1 接入SDK

  • 将Demo工程中,iOS项目目录下的UMSocial文件夹导入到自己的项目中。
sdk
  • 添加项目配置

在Other Linker Flags加入-ObjC,注意不要写为-Objc

objc

-ObjC属于链接库必备参数,如果不加此项,会导致库文件无法被正确链接,SDK无法正常运行

  • 加入U-Share SDK依赖的系统库
libs

加入以下系统库:

libsqlite3.tbd
CoreGraphics.framework

1.1.2 添加第三方平台依赖库

  • 添加方式同上 :选中项目Target -> General -> Linked Frameworks and Libraries列表中进行添加
SystemConfiguration.framework
CoreTelephony.framework
ImageIO.framework
libc++.tbd
libz.tbd

1.2 第三方平台配置

1.2.1 配置SSO白名单

  • 在iOS9以上系统需要增加一个可跳转App的白名单,即LSApplicationQueriesSchemes,否则将在SDK判断是否跳转时用到的canOpenURL时返回NO,进而只进行webview授权或授权/分享失败
  • 在项目中的info.plist中加入应用白名单,右键info.plist选择source code打开(plist具体设置在Build Setting -> Packaging -> Info.plist )

直接拷贝下面代码块到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 
   
  fbapi 
  fb-messenger-api 
  fbauth2 
  fbshareextension 
 

1.2.2 URL Scheme

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

  • 添加URL Types


    types
  • 注意:URL Schemes的值,直接可以拷贝工程中的值即可

2. 初始化设置

2.1 初始化U-Share及第三方平台

  • 在AppDelegate.m中添加如下代码
#import 

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

    /* 设置友盟appkey */
    [[UMSocialManager defaultManager] setUmSocialAppkey:USHARE_DEMO_APPKEY];

    [self configUSharePlatforms];

    [self confitUShareSettings];

    return YES;
}

- (void)confitUShareSettings
{
    /*
     * 打开图片水印
     */
    //[UMSocialGlobal shareInstance].isUsingWaterMark = YES;

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

}

- (void)configUSharePlatforms
{
    /* 
     设置微信的appKey和appSecret
     [微信平台从U-Share 4/5升级说明]http://dev.umeng.com/social/ios/%E8%BF%9B%E9%98%B6%E6%96%87%E6%A1%A3#1_1
     */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:nil];
    /*
     * 移除相应平台的分享,如微信收藏
     */
    //[[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite)]];

    /* 设置分享到QQ互联的appID
     * U-Share SDK为了兼容大部分平台命名,统一用appKey和appSecret进行参数设置,而QQ平台仅需将appID作为U-Share的appKey参数传进即可。
     100424468.no permission of union id
     [QQ/QZone平台集成说明]http://dev.umeng.com/social/ios/%E8%BF%9B%E9%98%B6%E6%96%87%E6%A1%A3#1_3
    */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"1105821097"/*设置QQ平台的appID*/  appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];

    /* 
     设置新浪的appKey和appSecret
     [新浪微博集成说明]http://dev.umeng.com/social/ios/%E8%BF%9B%E9%98%B6%E6%96%87%E6%A1%A3#1_2
     */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954"  appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"https://sns.whalecloud.com/sina2/callback"];
    

2.2 设置系统回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
  //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响 
  BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation]; 
  if (!result) { 
     // 其他如支付等SDK的回调 
  } 
  return result; 
} 

3. 将Demo工程中ReactNativeModule文件拖到自己的工程

module

Android

1. SDK集成与配置

1.1 手动集成

考虑到很多同学是非android开发者,这里集成sdk我们就采取最原始的手动集成方式。

1.1.1 接入SDK

  • 将Demo工程中Android工程中的app目录下的libs整个文件添加到自己的工程
libs
  • 将 android/app/src/main中的jniLibs文件夹添加到自己的工程
  • 将报名目录下的apshare moduel wxapi WBShareActivity 文件添加到自己的工程

注意:检查文件中的包名是否为自己的包名

1.2 设置权限

  • 在工程中的AndroidMainfest.xml文件下添加如下代码,直接拷贝代码
 
 
 
 
 
 
 
 

1.2.1 添加分享平台

  • 在工程中的AndroidMainfest.xml文件中, 下面添加如下代码,直接拷贝代码

        
            
                
                
            
        
        
        
        

        
        

        
        

        
        
            
                
                
                
                
            
        
        

        
        

1.3 配置签名

  • 生成签名文件
  • 在gradle.properties文件下,添加签名信息,直接拷贝代码
MYAPP_RELEASE_STORE_FILE=xxx.jks(签名文件路径)
MYAPP_RELEASE_KEY_ALIAS=alias(自己设置的签名alias)
MYAPP_RELEASE_STORE_PASSWORD=111111(自己设置的STORE_PASSWORD) 
MYAPP_RELEASE_KEY_PASSWORD=111111 (填写自己设置的KEY_PASSWORD)
  • app/build.gradle 文件下的添加签名配置,直接拷贝代码
signingConfigs {
        release {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        }
 }
    
buildTypes {   
  release {   
   ...   
    signingConfig signingConfigs.release <= 添加此行
    ... 
  }   
}  

1.4 初始化设置

1.4.1 初始化分享

  • 在MainApplication中初始化分享,直接拷贝代码
@Override
protected List getPackages() { 
 return Arrays.asList( 
   new MainReactPackage(), 
     new SharePackage() <= 添加引用
 ); 
}

@Override
public void onCreate() { 
 super.onCreate(); 
 SoLoader.init(this,false); 
 Config.shareType = "react native"; 
 UMShareAPI.get(this); 
} 
  
// 配置平台 
{ 
 PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0"); 
 PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); 
 PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "www.baidu.com"); 
}

1.4.2 初始化分享回调

  • 在MainActivity中初始化分享回调,直接拷贝代码
@Override
 protected void onCreate(Bundle savedInstanceState) { 
   super.onCreate(savedInstanceState); 
   ShareModule.initActivity(this); 
 }

注意事项

  • 添加 apshare moduel wxapi WBShareActivity 这几个文件时,注意导入的包名是否和工程包名一致
  • 签名文件最好放在app目录下

福利时间

  • 作者React Native开源项目OneM地址(按照企业开发标准搭建框架设计开发):https://github.com/guangqiang-liu/OneM (欢迎小伙伴们 star)
  • 作者主页:包含50多篇RN开发相关的技术文章http://www.jianshu.com/u/023338566ca5 (欢迎小伙伴们:多多关注多多点赞)
  • 作者React Native QQ技术交流群:620792950 欢迎小伙伴进群交流学习
  • 友情提示:在开发中有遇到RN相关的技术问题,欢迎小伙伴加入交流群(620792950),在群里提问、互相交流学习。交流群也定期更新最新的RN学习资料给大家,谢谢支持!

你可能感兴趣的:(React Native封装微信\QQ分享组件)