原生端配置
- 安装Android工程
在
android/app/build.gradle
里,defaultConfig
栏目下添加如下代码:
manifestPlaceholders = [
QQ_APPID: "<平台申请的APPID>"
]
以后如果需要修改 APPID
,只需要修改此一处。
- 在
MainActivity.java
新增下面的代码
@Override
public void onActivityResult (int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mReactInstanceManager.onActivityResult(requestCode, resultCode, data);
}
注意: 步骤二实际测试不需要,项目环境为:
"react": "^16.8.6",
"react-native": "^0.59.9",
"react-native-qq": "^2.0.5"
校验QQ是否安装
在 react-native-qq/index.js
中新增下面的方法
export function isQQInstalledAction () {
return QQAPI.isQQInstalled().then((res) => {
() => waitForResponse("QQAuthorizeResponse");
});
}
在业务代码中可通过下面的方法调用校验
QQAPI.isQQInstalledAction().then((res) => {
// 已安装
}).catch(error => {
// 未安装
});
登录
- params: 登录所申请的权限,可不传,默认为
get_simple_userinfo
。多个权限时,以逗号分隔。
iOS端若手机中没有安装QQ,将使用网页登录。 Android端必须手机安装QQ客户端,不然没有反应。
示例:
import * as QQAPI from 'react-native-qq';
QQAPI
.login(params)
.then((result) => {
// 登录成功回调
// {
// "access_token": "CAF0085A2AB8FDE7903C97F4792ECBC3",
// "openid": "0E00BA738F6BB55731A5BBC59746E88D"
// "expires_in": "1458208143094.6"
// "oauth_consumer_key": "12345"
// }
}).catch((error)=>{
// 登录失败回调
})
分享
// 分享到QQ好友
QQAPI.shareToQQ({
type: 'image',
title: '钱丰搬运',
imageUrl: imageUrl
}).then(() => {
// 分享成功
}).catch((error) => {
// 分享失败
});
// 分享到QQ空间
QQAPI.shareToQzone({
type: 'news',
title: '钱丰搬运',
description: '钱丰搬运分享测试',
webpageUrl: 'https://api.xulizhong.top',
imageUrl: imageUrl
}).then(() => {
// 分享成功
}).catch((error) => {
// 分享失败
});
注意:
- Android端中
imageUrl
必须是本地文件地址。
- 若是网络资源需要下载到本地。
- 若是本地图片,则路径中若带前缀
file://
,需要把file://
去掉。 - 本地图片不能在
cache
临时目录中。
- iOS的
uri
可以使用网络静态资源 - 部分安卓机器存储图片的时候需要校验有无
保存图片到相册
的权限,不然下载会失败,代码中没有反应。
下载图片
import RNFS from 'react-native-fs';
/**
* 下载二维码图片
* @desc android 设备中纯图片分享QQ需要将二维码图片下载到本地
* @param {Function} cb 回调函数 成功:cb(string) 失败:cb(Error)
*/
downloadFile (cb) {
// 保存版本的路径
const dirs = Platform.OS === 'ios' ? RNFS.LibraryDirectoryPath : RNFS.ExternalDirectoryPath;
const saveDest = `${dirs}/qianfeng_invite_${this.props.uid}.png`;
const downloadUrl = this.state.ewm;
// 下载
RNFS.downloadFile({
fromUrl: downloadUrl,
toFile: saveDest,
background: true // 应用程序终止后在后台下载,仅iOS
}).promise.then(() => {
// 保存图片
CameraRoll.saveToCameraRoll(saveDest)
.then(() => {
if (cb) cb(saveDest);
}).catch((error) => {
console.log('>>> 二维码图片保存失败ERROR >>>', error.stack);
if (cb) cb(new Error('二维码图片保存失败'));
});
}).catch(err => {
console.log('>>> 二维码图片下载失败ERROR >>>', error.stack);
if (cb) cb(new Error('二维码图片下载失败,无法分享'));
});
}