本文介绍如何基于React Native使用 IM即时通讯SDK- ZIM SDK 快速实现同腾讯微信消息收发聊天交友功能。实现React Native混合移动框架开发多端应用,节省开发成本。

1 IM即时通讯SDK接入方案介绍

ZIM SDK IM即时通讯SDK提供了如下接入方案:

在此方案中,您需要通过您自己的IM即时通讯业务系统实现以下业务逻辑:

  • 搭建客户端的用户管理逻辑,并下发用户 ID 用于客户端登录。
  • 鉴权 Token,建议由您的业务后台自行实现,保证鉴权数据安全。

2 接入IM即时通讯SDK的前提条件

在使用 IM即时通讯SDK ZIM SDK 前,请确保:

  • 开发环境:

    • React Native 0.60.0 或以上版本。
    • iOS 9.0 或以上版本的 iOS 设备或模拟器(推荐使用真机)。
    • Android 4.0.3 或以上版本的 Android 设备或模拟器(推荐使用真机),如果为真机,请开启“允许调试”选项。
    • iOS / Android 设备已经连接到 Internet。
    • 配置 VS Code 开发环境,可在应用商店中搜索 “React Native Tools” 扩展并下载。
  • 已在 ZEGO 控制台 创建项目,获取到了接入 ZIM SDK 服务所需的 AppID 和 ServerSecret。ZIM 即时通讯SDK 服务权限不是默认开启的,使用前,请先在 ZEGO 控制台 自助开通 ZIM 服务(详情请参考 项目管理 - 即时通讯),若无法开通 ZIM 即时通讯SDK 服务,请联系 ZEGO 技术支持开通。
  • 已获取登录 IM即时通讯SDK 所需的 Token,详情请参考 使用 Token 鉴权

3 集成 IM即时通讯SDK

3.1 (可选)新建项目

此步骤以如何创建新项目为例,如果是集成到已有项目,可忽略此步。

  1. 使用 React Native 内置的命令行工具,创建一个名为 “zego-zim-example” 的新项目。

    此命令行工具不需要安装,可以直接用 node 自带的 npx 命令来使用:

    npx react-native init zego-zim-example
  2. 编译运行 iOS 平台:

    yarn react-native run-ios
  3. 编译运行 Android 平台:

    yarn react-native run-android

3.2 导入 IM即时通讯SDK

开发者可以使用 npm 获取 IM即时通讯SDK。

  1. 执行 npm i zego-zim-react-nativeyarn add zego-zim-react-native 命令安装依赖。

    npm 下载包支持 typescript 语言(推荐)。

  2. 导入IM即时通讯SDK。

    import { ZIM } from 'zego-zim-react-native';

    const ZIM = require('zego-zim-react-native').ZIM;

4 IM即时通讯SDK实现聊天消息收发消息

以下流程中,我们以客户端 A 和 B 的消息交互为例,实现 1v1 即时通信功能:

4.1 IM即时通讯源码实现流程

请参考 跑通示例源码 获取IM即时通讯源码。

1. 导入 IM即时通讯SDK 文件

请参考 3.2 导入IM即时通讯 SDK,使用 npm 获取 SDK,导入 SDK 文件。

2. 创建 ZIM 即时通讯 实例

首先我们需要在项目中创建 ZIM 即时通讯 实例,一个IM实例对应的是一个用户,表示一个用户以客户端的身份登录系统。

例如,客户端 A、B 分别调用 create 接口,传入在 2 前提条件 中获取到的 AppID,创建了 A、B 的实例:

var appID = xxxx;
// 静态同步方法,创建 zim 实例,传入 AppID
var zim = ZIM.create(appID);

3. IM即时通讯 监听回调事件

在客户端登录前,开发者可以通过调用 on 接口,自定义 ZIM 即时通讯 中的事件回调,接收到IM即时通讯 SDK 异常、消息通知回调等的通知。

// 注册监听“运行时错误信息”的回调
zim.on('error', function (zim, errorInfo) {
console.log('error', errorInfo.code, errorInfo.message);
}); // 注册监听“网络连接状态变更”的回调
zim.on('connectionStateChanged', function (zim, { state, event, extendedData }) {
console.log('connectionStateChanged', state, event, extendedData);
}); // 注册监听“收到单聊消息”的回调
zim.on('receivePeerMessage', function (zim, { messageList, fromConversationID }) {
console.log('receivePeerMessage', messageList, fromConversationID);
}); // 注册监听“令牌即将过期”的回调
zim.on('tokenWillExpire', function (zim, { second }) {
console.log('tokenWillExpire', second);
// 可以在这里调用 renewToken 接口来更新 token
// 新 token 生成可以参考上文
zim.renewToken(token)
.then(function({ token }){
// 更新成功
})
.catch(function(err){
// 更新失败
})
});

4. 登录 ZIM 即时通讯SDK

创建实例后,客户端 A 和 B 需要登录 ZIM 即时通讯,只有登录成功后才可以开始发送、接收消息、更新 Token 等。

客户端需要使用各自的用户信息和 Token 进行登录。调用 login 接口进行登录,传入用户信息 ZIMUserInfo 对象,以及在 2 前提条件 中获取到的 Token 进行鉴权,鉴权通过后才能登录成功。

  • “userID”、“userName” 支持开发者自定义规则生成。建议开发者将 “userID” 设置为一个有意义的值,可将其与自己的业务账号系统进行关联。
  • 如果 Token 过期,需要在 tokenWillExpire 即将过期回调接口中,调用 renewToken 接口,更新 Token 后才能正常使用 SDK。
// 登录时,需要开发者 按照 "使用 Token 鉴权" 文档生成 token 即可
// userID 和 userName,最大 32 字节的字符串。仅支持数字,英文字符 和 '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '`', ';', '’', ',', '.', '<', '>', '/', '\'。
var userInfo = { userID: 'xxxx', userName: 'xxxx' };
var token = ''; zim.login(userInfo, token)
.then(function () {
// 登录成功
})
.catch(function (err) {
// 登录失败
});

5. IM即时通讯发送消息

IM即时通讯 客户端 A 登录成功后,可以向客户端 B 发送消息。

目前 ZIM即时通讯支持的消息类型如下:

消息类型 说明 特性及适用场景
ZIMTextMessage(1) 文本消息。消息大小不超过 32 KB,单个客户端发送频率限制为 10 次/秒。 消息可靠有序,可存储为历史消息;一般适用于“单聊”、“群聊”等即时聊天的场景。
ZIMCommandMessage(2) 开发者可自定义数据类型的信令消息。消息大小不超过 5 KB,单个客户端发送频率限制为 10 次/秒。 支持更高的并发;一般适用于“语聊房”、“在线课堂”等房间内的即时聊天;房间解散后,消息不保存。
ZIMBarrageMessage(20) 房间内弹幕文本消息。消息大小不超过 5 KB,单个客户端发送频率无限制。

专门用于房间内的高频、不可靠、允许丢掉的消息,一般适用于发送“弹幕消息”的场景中。

支持高并发,但不可靠,不保证消息送达。

以下为发送单聊文本消息为例:客户端 A 可以调用 sendPeerMessage 接口,传入客户端 B 的 userID、消息内容等信息,即可发送一条文本消息到 B 的客户端。

var toUserID = 'xxxx1';
var config = {
priority: 1 // 消息优先级,取值为 低:1 默认,中:2,高:3
}; // 发送单聊 `Text` 信息
var messageTextObj = { type: 1, message: '文本消息内容' };
zim.sendPeerMessage(messageTextObj, toUserID, config)
.then(function ({ message }) {
// 发送成功
})
.catch(function (err) {
// 发送失败
});

6. IM即时通讯 接收消息

客户端 B 登录 ZIM 后,将会收到在 on 回调中设置的 receivePeerMessage 监听接口,收到客户端 A 发送过来的消息。

// 注册监听“收到单聊消息”的回调
zim.on('receivePeerMessage', function (zim, { messageList, fromConversationID }) {
console.log('receivePeerMessage', messageList, fromConversationID);
});

7. IM即时通讯Demo 退出登录

如果客户端需要退出登录,直接调用 logout 接口即可。

zim.logout();

8. 销毁 ZIM 即时通讯 实例

如果不需要 ZIM 实例,可直接调用 destroy 接口,销毁实例。

zim.destroy();

4.2 IM即时通讯 API 时序图

通过以上的实现流程描述,API 接口调用时序图如下:

5 React Native混合移动框架接入IM 即时通讯 SDK更多帮助

获取本文React Native混合移动框架接入IM 即时通讯聊天的开发文档、技术支持,访问即构文档中心IM即时通讯开发文档页,可多平台实现聊天社交IM即时通讯功能;

近期有开发规划的开发者可上即构官网查看,恰逢即构七周年全线音视频产品1折的优惠,联系商务获取"IM即时通讯一个月免费试用 "产品优惠;

手把手教你React Native接入聊天IM即时通讯功能-源码分享的更多相关文章

  1. 手把手教你React Native 实战之开山篇《一》

    先说一下我为什么学习RN 18年3月29号,随着自己内心的欲望和冲动,任务交接了一下,正式离开一家医疗公司.第二天就入职了这之前已经找好的公司,由于自己对代码浓厚的热情,自己终于也不再带团队.正好有充 ...

  2. 新一代开源即时通讯应用源码定制 运营级IM聊天源码

    公司介绍:我们是专业的IM服务提供商!哇呼Chat是一款包含android客户端/ios客户端/pc客户端/WEB客户端的即时通讯系统.本系统完全自主研发,服务器端源码直接部署在客户主机.非任何第三方 ...

  3. 手把手教你玩转nginx负载均衡(四)--源码安装nginx

    引言: 在上一篇,我们已经装好了虚拟机,并且已经配置好了网络,那么今天我们就要开始安装nginx服务器了. 安装工具以及过程 安装gcc编译套件以及nginx依赖模块 yum -y install g ...

  4. 手把手教你使用LabVIEW OpenCV dnn实现图像分类(含源码)

    @ 目录 前言 一.什么是图像分类? 1.图像分类的概念 2.MobileNet简介 二.使用python实现图像分类(py_to_py_ssd_mobilenet.py) 1.获取预训练模型 2.使 ...

  5. TCP/IP以及Socket聊天室带类库源码分享

    TCP/IP以及Socket聊天室带类库源码分享 最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查 ...

  6. React Native 接入微博、微信、QQ 登录功能

    在 App 开发中我们经常需要在用户登录模块接入 SNS 登录组件,这样会大大提高用户的注册体验.特别当一个不是刚性需求 App 推广的时候,这样会很大的降低用户体验的成本,没有人愿意忍受输入邮箱.手 ...

  7. React key究竟有什么作用?深入源码不背概念,五个问题刷新你对于key的认知

    壹 ❀ 引 我在[react]什么是fiber?fiber解决了什么问题?从源码角度深入了解fiber运行机制与diff执行一文中介绍了react对于fiber处理的协调与提交两个阶段,而在介绍协调时 ...

  8. 手把手教你搭建LyncServer2013之部署及配置监控功能(十八)

    自弃用监控服务器角色以来,已对 Microsoft Lync Server 2013 监控基础结构进行了重大更改.不再采用不同的监控服务器角色(通常需要组织设置专用计算机来充当监控服务器),现在监控服 ...

  9. 手把手教你实现Android RecyclerView上拉加载功能

    摘要 一直在用到RecyclerView时都会微微一颤,因为一直都没去了解怎么实现上拉加载,受够了每次去Github找开源引入,因为感觉就为了一个上拉加载功能而去引入一大堆你不知道有多少BUG的代码, ...

  10. arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)

    你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...

随机推荐

  1. 使用Spring AOP 和自定义注解统一API返回值格式

    摘要:统一接口返回值格式后,可以提高项目组前后端的产出比,降低沟通成本.因此,在借鉴前人处理方法的基础上,通过分析资料,探索建立了一套使用Spring AOP和自定义注解无侵入式地统一返回数据格式的方 ...

  2. 2024牛客多校2B MST

    同步发布于我的网站. Problem Sajin最近深入研究了最小生成树,现在他已经掌握了MST的算法.他渴望通过一系列查询来评估您对最小生成树概念的掌握程度. 您将面临一个加权无向图,该图包含没有任 ...

  3. CSharp中的文件操作

    在C#中,可以使用System.IO命名空间中的类来进行Windows文件操作.这些类提供了丰富的方法来处理文件和目录,包括创建.复制.删除.移动文件和目录,以及读取和写入文件等功能. 常用文件操作方 ...

  4. ShadowSql.net之正确使用方式

    ShadowSql是面向接口模块化可插拔可扩展的工具 ShadowSql不是全家桶 不把所有功能都做一个项目里面就是为了大家不一次引用所有的nuget包 大家可以先判断需要哪些功能,再引用对应的nug ...

  5. KOL合作流程混乱?这11款工具让管理效率翻倍(附选型指南)

    在内容营销成为品牌增长关键战场的今天,KOL(Key Opinion Leader,关键意见领袖)已不再只是"投广告"的对象,而是内容共创.品牌心智渗透.用户转化的核心资源.然而, ...

  6. openxml文书工具 Aspose 工具 word to pdf

    aspose模板生成(文书工具) 动态数据 ${info} ${list.id} ${list.name} ${list.address} ${list.date} ${list.danwei} ${ ...

  7. git clone速度慢?教你用最简单的方法解决最恶心的问题!

    以前解决Github文件下载速度慢的方法只有挂代理或者导入Gitee,最近又发现一种新的解决方案. 只要把github.com换成hub.fastgit.org就可以解决问题了!具体的在下面的图片 介 ...

  8. 东航MU5735空难事件总结与分析

    东航MU5735空难事件总结与分析 事件概述 日期:2022年3月21日 航班:东方航空MU5735(昆明长水机场→广州白云机场) 机型:波音737-800(注册号B-1791,机龄6.8年) 伤亡: ...

  9. 杭州联合银行 x 袋鼠云:打造智能标签体系,助力银行大零售业务转型

    "智能标签平台上线后,支行及业务部门已创建多个客群用于营销,为我行客户精细化管理打下了良好基础." 杭州联合银行始终以服务市民.小微企业.经济组织和地方经济发展为己任,本着&quo ...

  10. Linux开放防火墙指定端口

    方法一 开启8011端口 /sbin/iptables -I INPUT -p tcp --dport 8011 -j ACCEPT 保存配置 /etc/rc.d/init.d/iptables sa ...