原先 RN 的内容

更新时间: 2023/07/21 06:56:54

React Native

React Native概述

v5.3.0开始,云信 Web-SDK 对 React Native 做了适配,推荐 RN版本 >=0.51。云信WebSDK React Native(以下简称RN-SDK)的大部分API使用方法与SDK在Web浏览器环境使用相同,以减少开发者使用SDK所带来的障碍。

本地数据库

RN-SDK支持含数据库和不含数据库的使用方式,根据开发者的业务场景,可自行处理。

  • 不使用数据库,即在IM初始化时对db设为false即可,如:
javascript  const nim = NIM.getInstance({
    debug: true,
    appKey: appKey,
    account: account,
    token: token,
    db: false,  // 不使用数据库
    onconnect: onConnect,
    onwillreconnect: onWillReconnect,
    ondisconnect: onDisconnect,
    onerror: onError
  });
  • 使用数据库,需要开发者安装使用realm,RN-SDK目前自身不支持但不限制使用sqlite3作为本地数据库。可以通过usePlugin方法将数据库挂在到SDK实例上,用法如下:
javascript  const SDK = require('NIM_Web_SDK_vx.x.x.js');
  const Realm = require('realm');
  // 此处将外置的realm数据库挂载到sdk上,供sdk使用
  SDK.usePlugin({
    db: Realm,
  });
  const nim = SDK.NIM.getInstance({
    debug: true,
    appKey: appKey,
    account: account,
    token: token,
    db: true,   // 使用数据库
    onconnect: onConnect,
    onwillreconnect: onWillReconnect,
    ondisconnect: onDisconnect,
    onerror: onError
  });

本地日志

RN-SDK支持本地日志存储及远程拉取,开发者可以根据需求选择是否使用本地日志功能。

使用本地日志功能后,SDK会将日志以文件的形式写到用户的终端(手机)上,用户在线时,可以调用服务端接口拉取用户终端上的日志,便于排查问题。

本地存储依赖react-native-fs库,具体使用方法如下:

  1. 安装react-native-fs
npm install react-native-fs --save
  1. 通过usePlugin方法将数据库挂在到sdk上,如下
javascriptconst RNFS = require('react-native-fs');

const params = {
  rnfs: RNFS
};
params.rnfs.size = 1024 * 1024;  // 日志文件体积上限,单位:bytes; 选填,默认为1M
SDK.usePlugin(params);

const nim = SDK.NIM.getInstance({
  // .....
  // 初始化IM
});

消息推送

v5.3.0版本开始支持推送能力,开发者在配置工程时,需要引入相应的安卓和APNs推送依赖。

  • APNs推送

    • APNs推送配置首先需要开发者去苹果官网申请具有推送能力的证书;
    • 配置完证书后,按照 RN 推送配置添加相关能力。
  • 安卓推送

    • 参考 RN-Demo 的 ./android/nimpush./nim/NIM_Android_Push.js
    • 配置参见安卓推送配置

若不需要推送,则初始化时相关的iosPushConfigandroidPushConfig参数不填即可。

示例代码:

javascript  // iOS/安卓端外推送代码
  const iosPushConfig = {
    tokenName: 'push_online',
  };
  const androidPushConfig = {
    xmAppId: '2882303106219',
    xmAppKey: '59717219',
    xmCertificateName: 'RN_MI_PUSH',
    hwCertificateName: 'RN_HW_PUSH',
    mzAppId: '11398',
    mzAppKey: 'b74148973e60a2af4c2f6779',
    mzCertificateName: 'RN_MZ_PUSH',
    fcmCertificateName: 'RN_FCM_PUSH',
    vivoCertificateName: "vivopush",
    oppoAppId: "xxx", // oppoAppId,oppoAppKey,oppoAppSercet 在oppo推送平台注册得到
    oppoAppKey: "xxx",
    oppoAppSercet: "xxx",
    oppoCertificateName: "oppopush"
  };
  var nim = SDK.NIM.getInstance({
    // ...
    iosPushConfig,
    androidPushConfig,
    // ...
  })

  // 安卓端内推送示例代码,非远程推送
  import { showNotification } from '../nim/NIM_Android_Push';
  showNotification({
    icon: '', title: msg.from, content: showText, time: `${msg.time}`,
  });

文件发送

由于RN-SDK发送文件消息需要额外获取文件消息的属性一起发送,所以不建议直接使用sendFile接口发送文件,而是先通过previewFile获取文件的句柄,通过其他api方法将文件属性添加回文件对象,最后再使用sendFile接口发送文件。以下为发送图片文件的示例:

javascript  nim.previewFile({
    type: 'image',
    filePath: options.filePath,
    maxSize: maxSize,
    commonUpload: true,
    uploadprogress(obj) {
      // ...
    },
    done: (error, file) => {
      // 通过其他API接口获取到长、宽、大小等图片属性
      file.w = options.width;
      file.h = options.height;
      file.md5 = options.md5;
      file.size = options.size;
      const { scene, to } = options;
      if (!error) {
        constObj.nim.sendFile({
          type: 'image',
          scene,
          to,
          file,
          done: (err, msg) => {
            if (err) {
              return;
            }
            this.appendMsg(msg);
          },
        });
      }
    },
  });
  • 消息需要额外附加属性列表:
    • 图片对象
      • size: 大小,单位byte
      • md5: 图片文件的md5转换后的值
      • w: 宽,单位px
      • h: 高,单位px
    • 音频对象
      • size: 大小,单位byte
      • md5: 音频文件的md5转换后的值
      • dur: 长度,单位ms
    • 视频对象
      • size: 大小,单位byte
      • md5: 视频文件的md5转换后的值
      • w: 宽,单位px
      • h: 高,单位px
      • dur: 长度,单位ms
    • 文件对象
      • size: 大小,单位byte
      • md5: 文件的md5转换后的值 -->
此文档是否对你有帮助?
有帮助
去反馈