此项目志在提供对第三方社交SDK的功能封装,方便开发者在React Native应用中使用诸如授权、分享等功能。
目前仅支持授权功能,仅覆盖微信、新浪微博、QQ。
项目仍在开发中,功能不稳定,请耐心等待。
npm install --save react-native-social-kit@latest
需要使用Cocoapods来管理依赖。(诸如微信、QQ等第三方的官方SDK包含了大量依赖文件和Xcode配置,使用Cocoapods可以极大简化这些流程)
在Podfile里添加
target 'Demo' do
pod "react-native-social-kit", :path => '../node_modules/react-native-social-kit'
end
然后执行命令pod install
。(是不是很简单!)
修改AppDelegate.m文件如下:
#import "WeixinModule.h"
#import "WeiboModule.h"
#import "QQModule.h"
#import "AliModule.h"
...
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [WeixinModule handleOpenURL:url] || [WeiboModule handleOpenURL:url] || [QQModule handleOpenURL:url] || [AliModule handleUrl:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [WeixinModule handleOpenURL:url] || [WeiboModule handleOpenURL:url] || [QQModule handleOpenURL:url] || [AliModule handleUrl:url];
}
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>alipay.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>alipayobjects.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
在Xcode中选中TARGETS,在info标签栏的URL Types项目下添加子项,子项的URL Schemes为你所注册的应用程序的AppId。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
</array>
在Xcode中选中TARGETS,在info标签栏的URL Types项目下添加子项,子项的URL Schemes为“wb” + 你所注册的应用程序的App Key,如“wb204543436852”。
在你的app的plist中添加如下键值对:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>sinaweibohd</string>
<string>sinaweibo</string>
<string>weibosdk</string>
<string>weibosdk2.5</string>
</array>
在Xcode中选中TARGETS,在info标签栏的URL Types项目下添加子项,子项的URL Schemes为“tencent” + 你所注册的应用程序的App Key,如“tencent222222”。
在你的app的plist中添加如下键值对:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mqzone</string>
<string>wtloginmqq2</string>
<string>mqqopensdkapiV3</string>
<string>mqqwpa</string>
<string>mqqopensdkapiV2</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqq</string>
</array>
在Xcode中选中TARGETS,在info标签栏的URL Types项目下添加子项,子项的URL Schemes为你实际app的scheme名称。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>alipay</string>
<string>alipayshare</string>
</array>
请依次修改以下文件:
// file: settings.gradle
...
include ':react-native-social-kit'
project(':react-native-social-kit').projectDir = new File(settingsDir, '../node_modules/react-native-social-kit/android')
// file: app/build.gradle
...
dependencies {
...
compile project(':react-native-social-kit')
}
// file: MainActivity.java
...
import com.yoai.reactnative.socialsdk.SocialPackage;
...
public class MainActivity extends ReactActivity {
...
/**
* A list of packages used by the app. If the app uses additional views
* or modules besides the default ones, add more packages here.
*/
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new SocialPackage() // Add our package
);
}
}
如果需要代码混淆,为了保证第三方SDK的正常使用,需要在proguard配置中加上:
-keep class com.tencent.mm.sdk.** {
*;
}
在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自com.yoai.reactnative.social.weixin.WXEntryActivity。
在AndroidManifest.xml里添加:
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
/>
不需要额外配置
在AndroidManifest.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="tencent222222"/>
</intent-filter>
</activity>
注意其中的“tencent222222”格式为“tencent”+你所注册的应用程序的App Key,记得替换。
In your JavaScript code:
import SocialKit from 'react-native-social-kit';
const {Weibo, Weixin, QQ, Ali} = SocialKit;
or simply
import {Weibo, Weixin, QQ, Ali} from 'react-native-social-kit';
Then, use it like:
Weibo.authorize({
scope: "all",
redirectUrl: 'https://api.weibo.com/oauth2/default.html'
}, (data) => {
if (data.error) {
//发生了错误
} else if (data.cancel) {
//用户取消了授权
} else {
console.log(JSON.stringify(data));
}
});
SDKNAME表示Weixin、Weibo、QQ ,Ali 下同
使用授权登陆等功能之前首先需要注册App,在js端写入如下代码 以QQ为例
componentWillMount() {
// 注册App
QQ.registerApp(
"222222"
, (data) => {
});
}
SDKNAME | appKey/appId |
---|---|
Weixin | appId |
appKey | |
appId |
appKey/appId 可在各个开放平台注册获得
"OK"表示有此参数,"NA"表示没有此参数,"Not Yet"表示有此参数但是待实现。
key | value | Weixin | ||
---|---|---|---|---|
redirectUrl | 微博授权回调页,可不填,默认为"https://api.weibo.com/oauth2/default.html", | NA | OK | NA |
scope① | 授权的权限范围,可不填,默认最低权限 | NA | OK | NA |
①:scope 传入字符串,为微博权限范围 默认为""
通用授权结果
key | value | Weixin | ||
---|---|---|---|---|
success | 如果存在此字段,表示授权成功 | OK | OK | OK |
error | 如果存在此字段,表示发生了错误 | OK | OK | OK |
cancel | 如果为true,表示用户取消了授权 | OK | OK | OK |
微信授权结果
key | value |
---|---|
code | 用户换取access_token的code |
country | 微信用户当前国家信息 |
lang | 微信客户端当前语言 |
微博授权结果
key | value |
---|---|
requestUserInfo | 对应的 request 中的自定义信息字典 |
uid | 用户ID |
accessToken | 认证口令 |
refreshToken | 当认证口令过期时用于换取认证口令的更新口令 |
expiresInSeconds | 认证过期时间 |
QQ授权结果
key | value |
---|---|
openId | 用户授权登录后对该用户的唯一标识 |
accessToken | Access Token凭证,用于后续访问各开放接口 |
expiresInSeconds | Access Token的失效时间 |
以微信为例,授权代码如下
auth() {
Weixin.authorize(null, this.apiCallback.bind(this));
}
config内配置内容参数见下表
分享内容 | scene① | title | description | thumb② | data③ | text④ | image④ | webpage | music | video |
---|---|---|---|---|---|---|---|---|---|---|
text | 选填 | - | - | - | - | 必填 | - | - | - | - |
image | 选填 | - | - | - | - | - | 必填 | - | - | - |
webpage | 选填 | 选填 | 选填 | 选填 | 选填 | - | - | 必填 | - | - |
music | 选填 | 选填 | 选填 | 选填 | 选填 | - | - | - | 必填 | - |
video | 选填 | 选填 | 选填 | 选填 | 选填 | - | - | - | - | 必填 |
①: 微信Scene默认为'session'(对话),可选'timeline'(朋友圈),'favorite'(收藏).微博没有scene参数,QQ此参数默认为'qq'(对话),可选'qzone'(QQ空间).
②: thumb为缩略图链接地址,微信,微博对缩略图的大小限制在32k,如传入的图片大小超过32k,则会被压缩到32K以内.
③: data参数为实际数据链接,如分享music时data表示后缀为.mp3的url.
④: 在微博中 text,image 于其他多媒体链接分别独立,可以同时分享(iOS端图片和多媒体暂时无法同时分享).QQ分享中,text与image配置title,description,thumb,属性生效.
通用分享结果
key | value | Weixin | ||
---|---|---|---|---|
success | 如果存在此字段,表示分享成功 | OK | OK | OK |
error | 如果存在此字段,表示发生了错误 | OK | OK | OK |
cancel | 如果为true,表示用户取消了分享 | OK | OK | OK |
以微信图片分享为例,代码如下
shareImage(scene) {
Weixin.share({
image:'http://static.yoaicdn.com/shoppc/images/cover_img_e1e9e6b.jpg',
scene: scene,
}, this.shareCallback.bind(this));
}
具体参数配置见Demo
SDKNAME | config |
---|---|
Weixin | {timestamp:'',partnerid:'',prepayid:'',noncestr:'',timeStamp:'',package:'',sign:''} android需要添加appId |
Ali | {orderString: '',appScheme:''} |
成员
组织