原先 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库,具体使用方法如下:
- 安装react-native-fs
npm install react-native-fs --save
- 通过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
; - 配置参见安卓推送配置。
- 参考 RN-Demo 的
若不需要推送,则初始化时相关的iosPushConfig
与androidPushConfig
参数不填即可。
示例代码:
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转换后的值 -->
- 图片对象
此文档是否对你有帮助?