• Stars
    star
    108
  • Rank 321,259 (Top 7 %)
  • Language
    JavaScript
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

0.57.x 的 RN demo 将不在维护,新的 demo 工程参见 NIM_ReactNative_Demo_0.61.5

0.57.x RN demo will not be maintained. About the new demo project, see NIM_ReactNative_Demo_0.61.5

云信 WebSDK ReactNative Demo 导读

初始化

  • 本demo建议使用react-native >=0.51 的版本

项目初始化及调试

  1. 配置iOS/Android相关运行环境,可以参考:ReactNative搭建开发环境
  2. 下载demo工程至本地
  3. 通过yarnnpm安装js包依赖,即工程目录下,命令行执行:yarnnpm install
  4. Demo工程已对依赖做过了相应的配置,无需再执行 react-native link 命令,否则会报重复依赖的错误!!!
  5. 打开模拟器或者连接真机调试:
  • iOS环境:
    • iOS需要实现保证已安装XCode
    • 控制台执行 react-native run-ios
  • 安卓环境:
    • 打开android-studio => 打开已有工程 => 选择<工程文件夹>/android目录
    • 点击android-studio右上方 同步(sync)按钮
    • (首次运行需要)根据提示,需要额外安装sdk-24, sdk-25, sdk-26的版本库(如果之前没有装过)
    • 打开安卓模拟器(android-studio右上角绿色三角形符号)
    • 控制台执行 react-native run-android
  1. 控制台日志输出:
  • iOS环境: react-native log-ios
  • 安卓环境: react-native log-android
  1. 更多调试方法参看:调试RN

iOS工程初始化的一些问题

Print: Entry, ":CFBundleIdentifier", Does Not Exist

一般通过react-native run-ios,会去下载boostdouble-conversionfollyglog等4个包,由于国内镜像源资源有所损坏,所以可能编译报错,开发者可以替换node_modules/react-native/third-party中的报内容。

相应的包,demo工程已经放到nim目录下供开发者参考

线上Release包发布

线上发布环境,云信sdk初始化配置debug选项务必设置为false,否则console.error可能会导致应用崩溃

iOS发布

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 配置基本类似,这里不赘述。

android发布

  1. 打开控制台,进入app/android文件夹
  2. 执行命令:./gradlew assembleRelease
  3. 安卓签名请参考打包APK

Demo工程项目

项目结构

  • 项目入口:
    • index.js
      • 全局使用 global.IOS / global.__ANDROID 判断是哪个平台
    • App.js
      • 被index.js挂载,用于初始化页面状态管理器mobx
    • android 安卓编译及运行工程
    • ios iOS编译及运行工程
    • src - 项目代码编写的地方
      • index.js
        • 页面入口,用于路由管理
      • components/navBottom.js
        • 导航栏组件,在功能页中引入
      • page
        • 页面编写,所有需要被使用的页面 均需被注册在 src/pages/index.js 中,方便 src/index.js及src/tabNavigator.js所引用
        • 引入方式如 import Pages from './pages' => Pages.Login Pages.Session ...
      • components
        • UI组件
      • store
        • mobx 状态中心管理地址
        • actions
          • mobx全局提交事件,其中link.js为云信sdk全局连接状态管理
        • stores
          • 云信sdk的连接、收发消息、存储管理等一切事件所存储的数据
      • themes
        • css 样式文件,所有需要被使用的样式 均需被注册在 src/themes/index.js,方便页面及组件所引用
        • 引入方式如 import { globalStyle } from '../themes'
      • res
        • 图片等资源文件
      • configs
        • 配置信息
      • common
        • 设备信息等公共信息
      • util
        • 一些功能方法,诸如贴图表情、md5、数组操作、时间处理等等

RN TextInput输入中文Bug解决

  • React-Native 升级到0.55.4以后,TextInput不支持输入中文,需要额外对ios做特殊处理,具体参考源码 src/component/chatBox.js

云信SDK的使用

简述

本地数据库

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

  • 不使用数据库,即在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
  });
  • 使用数据库,需要开发者安装使用realmrealm,RN-SDK目前不支持但不限制使用sqlite3作为本地数据库,开发者可以根据自己的需要,额外做存储处理。
  • RN-SDK可以通过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推送
    • iOS 端推送配置首先需要开发者去苹果官网申请具有推送能力的证书,可参考 iOS 推送配置
    • 配置完证书后,按照 RN 推送配置添加相关能力
  • 安卓推送
    • 参考demo的安卓推送(java)文件目录在 ./android/nimpush,
    • 参考demo的安卓推送(js)文件目录在 ./nim/NIM_Android_Push.js
    • 配置参见安卓推送配置
  // 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);
          },
        });
      }
    },
  });
  • 消息需要额外附加属性列表:
    • 图片对象
      • 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

参见消息对象

全局属性注入

由于浏览器环境的全局变量为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 配置

//... other keys CFBundleDisplayName 更换你想替换的名称 //... ```
  • Android更改地址 <项目路径>/android/app/src/main/res/values/strings.xml
  <resources>
    <string name="app_name">{所需更改的APP名}</string>
  </resources>

NPM镜像库配置(国内淘宝镜像)

第三方依赖

其他参考阅读

Demo展示

推荐客户得京东卡,首次推荐成单得3000元京东卡,连续推荐4500元/单,上不封顶。点击参与https://yunxin.163.com/promotion/recommend

main

More Repositories

1

NIM_Duilib_Framework

网易云信Windows应用开发框架。
C++
2,058
star
2

camellia

Camellia provide easy-to-use server toolkits, such as: redis proxy、delay queue、id gen、hot key and more
Java
602
star
3

NIM_Web_Demo_H5

网易云信Web Demo Html5 移动端适配。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend
Vue
356
star
4

NIM_Web_Weapp_Demo

网易云信,IM DEMO小程序版本。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend
JavaScript
225
star
5

NIM_iOS_SDK

网易云信 iOS SDK 发布仓库。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend
Ruby
124
star
6

phoenix

网易云信跨平台C++开发框架
C++
56
star
7

Basic-Video-Call

网易云信音视频示例项目,帮助你快速集成音视频SDK,实现一对一视频通话,包含加入/离开频道、开启/关闭视频、开启/关闭声音、切换前置/后置摄像头等功能。【推荐好友使用云信,即可获得1500元京东卡奖励】点击参与https://yunxin.163.com/promotion/recommend
C++
56
star
8

NIM_Android_SDK

云信Android SDK发布仓库
43
star
9

dev-blog

Share what we've optimized based on the NetEase YunXin services (IM, RTC, Live Streaming, etc.) 分享我们基于网易云信服务,做了哪些新的技术实践和优化。
39
star
10

weapp-netcall

网易云信视频DEMO小程序
JavaScript
27
star
11

Advanced-Video

演示了如何快速使用网易云信新一代(G2)实时音视频SDK实现屏幕共享、旁路推流、音视频质量管理、伴音、自定义视频采集等功能。
C++
26
star
12

NIM_Weapp_Chatroom_Demo

This is chatroom demo implement by chatroom sdk powered by netease im
JavaScript
24
star
13

nim-harmony-demo

云信IMSDK,鸿蒙使用Demo
HTML
23
star
14

NIM-Electron-Demo

云信Electron桌面版Demo with Web SDK-工程师版
JavaScript
17
star
15

NIM-CSharp-SDK

网易云信C# SDK
C#
16
star
16

CrossPlatform-SDK

云信跨平台 SDK 发布仓库(pc:win32)
C++
15
star
17

AudioChatRoom

Java
12
star
18

webrtcDemo

云信实时音webrtc sdk在移动端使用的相关实例demo
JavaScript
12
star
19

Quiz

网易云信直播竞答解决方案。【推荐客户得京东卡,首次推荐成单得1500元京东卡,连续推荐2000元/单,上不封顶。】点击参与https://yunxin.163.com/promotion/recommend
Objective-C
12
star
20

NIM_Android_AVChatKit

网易云信Android音视频组件源码仓库
Java
11
star
21

NIM_macOS_AVChat_Demo

Objective-C
11
star
22

NIMPushTool

Objective-C
10
star
23

node-nertc-sdk

C++
9
star
24

electron-fulltext-search-demo

electron 全文搜索方案的一个 demo
JavaScript
8
star
25

Signaling_Sample_Code

网易云信 信令SDK 示例代码仓库
C++
7
star
26

NIM_PC_SDK-CSharp

已废弃,请前往新仓库: https://github.com/netease-im/NIM-CSharp-SDK
C#
7
star
27

NIM_PC_SDK

云信Windows(PC) SDK发布仓库。
C
7
star
28

NIM_PC_DEMO-CSharp

已废弃,请前往新仓库: https://github.com/netease-im/NIM-CSharp-SDK
C#
6
star
29

NMCLiveStreaming

网易云信直播推流SDK(rtmp、tcp推流)
Objective-C
6
star
30

node-nim

NetEase IM nodejs wrapper based on NIM C++ SDK
TypeScript
5
star
31

NIM_Web_Education_Demo

JavaScript
5
star
32

whiteboard

云信互动版本sdk测试sample code
C++
4
star
33

NIM_Web_Weapp_NRTC

本示例为展示网易云信小程序音视频NRTC SDK能力
JavaScript
4
star
34

NIM_Android_RtsKit

网易云信Android RTS组件源码仓库
Java
4
star
35

react-native-nertc

云信在React Native 框架上的视频 SDK 实现,包含Android和IOS。
Java
4
star
36

Electron-SDK

网易云信ElectronSDK
3
star
37

NIM_ReactNative_Demo_0.61.5

JavaScript
3
star
38

VCloud_upload_JS_SDK

云信点播上传js SDK
JavaScript
2
star
39

innovation-2021

2
star
40

ne-s3

Rust
1
star
41

Embedded-SDK

网易云信嵌入式SDK
1
star
42

NIM_Resources

1
star
43

NeRTC-CSharp-SDK

适用于Windows x86平台的实时音视频SDK
C#
1
star
44

node-pre-build

A node tool to install pre-built sdk and addon.
JavaScript
1
star
45

im-code-example-web

云信 IM Web 端的示例代码
JavaScript
1
star