yarn
或npm
安装js包依赖,即工程目录下,命令行执行:yarn
或npm install
react-native run-ios
<工程文件夹>/android
目录react-native run-android
react-native log-ios
react-native log-android
一般通过react-native run-ios
,会去下载boost
、double-conversion
、folly
、glog
等4个包,由于国内镜像源资源有所损坏,所以可能编译报错,开发者可以替换node_modules/react-native/third-party
中的报内容。
相应的包,demo工程已经放到nim目录下供开发者参考
线上发布环境,云信sdk初始化配置debug
选项务必设置为false
,否则console.error
可能会导致应用崩溃
1.双击 <工程目录>/ios 目录下的 NIM_ReactNative_Demo.xcodeproj
工程
2.选择 build device -> Generic iOS Device, 然后 clean 一下工程,选择 Product -> Archive
3.等待一段时间,出现如下界面
4.选择 Export 后出现选择发布的方式,这里我们的证书对应 enterprise,因此这样选择,具体选择请参考自己申请的证书类型
5.接下来这个页面可以保持默认
6.选择对应的 distribution 证书
这样就导出了 ipa 包用于发布于一些第三方管理平台例如蒲公英,如果需要发布 App Store 配置基本类似,这里不赘述。
./gradlew assembleRelease
link.js
为云信sdk全局连接状态管理RN-SDK同时支持含数据库和不含数据库的使用方式,根据开发者的业务场景,可自行处理。
db
设为false
即可,如: const nim = NIM.getInstance({
// debug: true,
appKey: 'appKey',
account: 'account',
token: 'token',
db: false,
onconnect: onConnect,
onwillreconnect: onWillReconnect,
ondisconnect: onDisconnect,
onerror: onError
});
realm
,realm,RN-SDK目前不支持但不限制使用sqlite3
作为本地数据库,开发者可以根据自己的需要,额外做存储处理。usePlugin
方法将数据库挂在到sdk实例上,用法如下: const SDK = require('NIM_Web_SDK_v5.*.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
});
// iOS/安卓端外推送代码
const iosPushConfig = {
tokenName: 'push_online',
};
const androidPushConfig = {
xmAppId: '2882303761517806219',
xmAppKey: '5971780672219',
xmCertificateName: 'RN_MI_PUSH',
hwCertificateName: 'RN_HW_PUSH',
mzAppId: '113798',
mzAppKey: 'b74148973e6040c6abbda2af4c2f6779',
mzCertificateName: 'RN_MZ_PUSH',
fcmCertificateName: 'RN_FCM_PUSH',
};
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
接口发送文件。以下为发送图片文件的示例:
nim.previewFile({
type: 'image',
filePath: options.filePath,
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);
},
});
}
},
});
参见消息对象
由于浏览器环境的全局变量为window,而react-native的全局变量为global,其属性不尽相同,为了做到兼容及适配,RN-SDK会mock一些属性,诸如global.navigator, global.location, global.io等,一般不影响用户正常使用
iOS更改目录 <项目路径>/ios/NIM_ReactNative_Demo/Images.xcassets/AppIcon.appiconset
Android更改目录 <项目路径>/android/app/src/main/res
iOS更改地址 更改图中 Display Name 或者修改 info.plist 配置
<resources>
<string name="app_name">{所需更改的APP名}</string>
</resources>
mobx
React状态管理
react-navigation
ReactNative路由管理
react-native-elements
UI组件及图标
react-native-easy-toast
UI组件,提示框
react-native-image-picker
图片选择及摄像头拍照
react-native-audio
语音录制
react-native-sound
语音播放
react-native-fs
获取本地文件信息
react-native-video
视频播放器,demo未实现
realm
本地数据库,用于云信SDK存储本地数据及消息
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。