UNPKG

react-native-umshare

Version:
391 lines (326 loc) 10 kB
# 集成友盟分享与第三方登录 分享功能:微信(支持小程序)、QQ、新浪微博 登录功能:微信、QQ ### 作者 QQ: 289459798 QQ群: 161263093 欢迎更多的喜欢开源的小伙伴加入 ### 友盟SDK版本 Android:v6.9.1(精简版) IOS: v6.9.1 ### 准备工作 1. 到友盟平台申请账号 [http://www.umeng.com/](http://www.umeng.com/) 2. 微信开发平台申请 [http://open.weixin.qq.com/](http://open.weixin.qq.com/) 3. QQ开放平台申请 [http://open.qq.com/](http://open.qq.com/) 4. 新浪开放平台申请[http://open.weibo.com/](http://open.weibo.com/) ### 安装 ``` npm install react-native-umshare@2.0.0 --save react-native link ``` ### Android 添加Activity 1. QQ ```xml <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tencent+您QQ appid" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize"/> ``` 2. 微信 ```xml <activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> ``` 需要手动在包名下添加`wxapi.WXEntryActivity`文件,继承`WXCallbackActivity` 3. 新浪 ```xml <activity android:name="com.umeng.socialize.media.WBShareCallBackActivity" android:configChanges="keyboardHidden|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="false" android:screenOrientation="portrait" > </activity> <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity" android:configChanges="keyboardHidden|orientation" android:exported="false" android:windowSoftInputMode="adjustResize" > </activity> <activity android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:launchMode="singleTask" android:name="com.sina.weibo.sdk.share.WbShareTransActivity"> <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> ``` 4. facebook ```xml <activity android:name="com.umeng.facebook.FacebookActivity"/> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> //appid一定要存在string文件中,并以facebook_app_id名字进行保存。 ``` android 需要编译出来的apk文件的签名和申请微信和QQ时填写的一致,开发过程中可以在build.gradle 文件加入以下代码 ``` signingConfigs { debug { storeFile file('keystore 文件路径') storePassword "keydtore 密码" keyAlias "keydtore 别名" keyPassword "keydtore 别名密码" } } ``` ### IOS 1. 在项目的的`Build Settings` 中搜索 `header` 找到 `Framework Search Paths` 添加 `$(SRCROOT)/../node_modules/react-native-umshare/ios/RCTUMShareModule/RCTUMShareModule/UMSocial/SocialFrameworks` 2. 将 `Libraries` -> `RCTUMShareModule.xcodeproj` -> `RCTUMShareModule` -> `UMSocial` -> `SocialFrameworks` 和 `UMSocialUI` 文件夹拖到您的主工程下,不需要勾选 `Copy items if needed` 3. 添加依赖库 - ibsqlite3.tbd - CoreGraphics.framework - SystemConfiguration.framework - libc++.tbd - libz.tbd - ImageIO.framework 4. 配置SSO白名单 ``` <key>LSApplicationQueriesSchemes</key> <array> <!-- 微信 URL Scheme 白名单--> <string>wechat</string> <string>weixin</string> <!-- 新浪微博 URL Scheme 白名单--> <string>sinaweibohd</string> <string>sinaweibo</string> <string>sinaweibosso</string> <string>weibosdk</string> <string>weibosdk2.5</string> <!-- QQ、Qzone URL Scheme 白名单--> <string>mqqapi</string> <string>mqq</string> <string>mqqOpensdkSSoLogin</string> <string>mqqconnect</string> <string>mqqopensdkdataline</string> <string>mqqopensdkgrouptribeshare</string> <string>mqqopensdkfriend</string> <string>mqqopensdkapi</string> <string>mqqopensdkapiV2</string> <string>mqqopensdkapiV3</string> <string>mqqopensdkapiV4</string> <string>mqzoneopensdk</string> <string>wtloginmqq</string> <string>wtloginmqq2</string> <string>mqqwpa</string> <string>mqzone</string> <string>mqzonev2</string> <string>mqzoneshare</string> <string>wtloginqzone</string> <string>mqzonewx</string> <string>mqzoneopensdkapiV2</string> <string>mqzoneopensdkapi19</string> <string>mqzoneopensdkapi</string> <string>mqqbrowser</string> <string>mttbrowser</string> </array> ``` 5. URL Scheme - 微信 微信appKey -> wxdc1e388c3822c80b - QQ 需要添加两项URL Scheme: 1"tencent"+腾讯QQ互联应用appID 2、“QQ”+腾讯QQ互联应用appID转换成十六进制(不足8位前面补0) 如appID:100424468 1、tencent100424468 2、QQ05fc5b14| QQ05fc5b14为100424468转十六进制而来,因不足8位向前补0,然后加"QQ"前缀 - 新浪微博 “wb”+新浪appKey -> wb3921700954 6. 修改 `AppDelegate.m` ```oc #import <UMShare/UMShare.h> ... //#define __IPHONE_10_0 100000 #if __IPHONE_OS_VERSION_MAX_ALLOWED > 100000 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options { //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响。 BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options]; if (!result) { // 其他如支付等SDK的回调 // result = other; } return result; } #endif - (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的回调 // result = other; } return result; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url]; if (!result) { // 其他如支付等SDK的回调 // result = other; } return result; } ``` ### 使用方式 先初始化参数 ```js import UMShare from 'react-native-umshare'; ... // 第二个参数决定在分享界面的排序1_、2_、3_为前缀 UMShare.initShare("友盟appkey", { "1_weixin": { appKey: "", appSecret: "", // 分享微信小程序必填 redirectURL: "", }, "2_qq": { appKey: "", appSecret: "", redirectURL: "", }, "3_sina": { appKey: "", appSecret: "", redirectURL: "", }, }, false); ``` 调用分享 ```js import UMShare from 'react-native-umshare'; ... UMShare.share("标题", "简介", "缩略图地址", "链接地址") .then(() => { // 成功 }, (error) => { // 失败 }) ``` 调用登录 ```js UMShare.loginQQ() .then((data) => { console.log(data); }, (error) => { console.log(error) }) UMShare.loginWX() .then((data) => { console.log(data); }, (error) => { console.log(error) }) ``` ### API ```js /** * 初始化分享参数 * @param appkey * @param sharePlatforms * @param debug */ initShare(appkey: string, sharePlatforms: Object, debug: boolean); /** * 友盟默认UI分享 * @param title * @param desc * @param thumb * @param link */ share(title, desc, thumb, link); /** * 友盟默认UI分享小程序 * @param name 微信小程序的id,gc_xxxxx * @param title * @param desc * @param path 小程序页面路径 /page/xxx * @param thumb * @param link 当微信不支持小程序时跳转的h5页面地址 * @oaram mode 小程序的模式(开发、体验、正式)仅对ios游泳 */ share(name, title, desc, path, thumb, link, mode); /** * 自定义UI, 微信分享 * @param title * @param desc * @param thumb * @param link */ shareWX(title, desc, thumb, link); /** * 自定义UI, 微信朋友圈分享 * @param title * @param desc * @param thumb * @param link */ shareWXTimeLine(title, desc, thumb, link); /** * 自定义UI, QQ分享 * @param title * @param desc * @param thumb * @param link */ shareQQ(title, desc, thumb, link); /** * 自定义UI, QQ空间分享 * @param title * @param desc * @param thumb * @param link */ shareQzone(title, desc, thumb, link); /** * 自定义UI, 新浪分享 * @param title * @param desc * @param thumb * @param link */ shareSina(title, desc, thumb, link); /** * 微信登录 * @returns {Promise} */ loginWX(); /** * QQ登录 * @returns {Promise} */ loginQQ(); ```