react-native-qq

react-native-qq
 最后更新于 2024年10月02日 09:12:12

原生端配置

  1. 安装Android工程 在 android/app/build.gradle 里,defaultConfig 栏目下添加如下代码:
manifestPlaceholders = [
    QQ_APPID: "<平台申请的APPID>"
]

以后如果需要修改 APPID,只需要修改此一处。

  1. 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) => {
  // 分享失败
});

注意:

  1. Android端中 imageUrl 必须是本地文件地址。
  • 若是网络资源需要下载到本地。
  • 若是本地图片,则路径中若带前缀 file:// ,需要把 file:// 去掉。
  • 本地图片不能在 cache 临时目录中。
  1. iOS的 uri 可以使用网络静态资源
  2. 部分安卓机器存储图片的时候需要校验有无 保存图片到相册 的权限,不然下载会失败,代码中没有反应。

下载图片

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('二维码图片下载失败,无法分享'));
  });
}