本文介绍如何基于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. IM通讯 即时通讯 交友源码 聊天源码

    IM通讯 即时通讯 交友源码 聊天源码 web端+wap端+H5端+安卓端+IOS端+全开源 编号:16150665877560702可可网络

  2. paddle 标注_一看就会,手把手教你编程,批量文章标注拼音(附源码)

    文/IT可达鸭 图/IT可达鸭.网络 前言 是不是学了Python之后,苦于没有项目练手?是不是看了很多关于编程视频,等到自己动手时,却怎么也做不出一个项目? 工作在一线的老程序员告诉你,别慌,让我手 ...

  3. 手把手教 | 使用Bert预训练模型文本分类(内附源码)

    作者:GjZero 标签:Bert, 中文分类, 句子向量 本文约1500字,建议阅读8分钟. 本文从实践入手,带领大家进行Bert的中文文本分类和作为句子向量进行使用的教程. Bert介绍 Bert ...

  4. 手把手教你调试构建一个Vue/小程序商城项目源码

    下面将详细的介绍weiphp5.0商城项目的调试打包上线的流程: 安装NodeJs/NPM 安装CNPM(可忽略) 运行项目 打包上线项目 1. 安装NodeJs 推荐到NodeJS的官网下载安装包 ...

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

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

  6. im即时通讯聊天软件,完整的一套即时通讯IM源码

    非常完整的一套即时通讯IM源码,包含数据库+服务端源码+服务端部署软件+PC.Web.安卓.IOS完整原生源码. 还附带完整的开发文档和视频搭建教程.一套完整得不能在完整的即时通讯源码了,不管拿来二开 ...

  7. H5即时通讯聊天系统源码lM聊天

    简介: 安装宝塔 宝塔环境:Nginx 1.18 + PHP 7.3 + MySQL 5.6 + MongoDB 4.0 安装php扩展,fileinfo,Swoole4,mongodb三个扩展 删除 ...

  8. 真正手把手教你用unity接入苹果内购(IAP)

    原帖:真正手把手教你用unity接入苹果内购(IAP) http://www.manew.com/thread-100403-1-1.html (出处: -[游戏蛮牛]-ar增强现实,虚拟现实,uni ...

  9. React native 接入百度AI活体检测、人脸识别 iOS版本

    前期准备工作参考:React native 接入百度AI活体检测.人脸识别 Android版本 iOS配置 1.将FaceSDK里面的文件导入到iOS项目 添加完之后是这样的 2.选择链接C++标准库 ...

  10. 手把手教你写一个中文聊天机器人

    本文来自作者 赵英俊(Enjoy) 在 GitChat 上分享 「手把手教你写一个中文聊天机器人」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 一.前言 发布这篇 Chat 的初衷是想和 ...

最新文章

  1. 商品秒杀,防并发解决思路
  2. 不使用递归求全排列和组合数
  3. 【深度学习】深入浅出对抗机器学习(AI攻防)
  4. 【Win 10 应用开发】UI Composition 札记(二):基本构件
  5. RecyclerView控件的基本使用(增强版的ListView)
  6. Winform中实现ZedGraph的多条Y轴(附源码下载)
  7. 新手入门 如何快速找到Python进阶路线?
  8. 【学习笔记】mybatis自定义插件案例代码
  9. HDOJ 1247 HDU 1247 Hat’s Words ACM 1247 IN HDU
  10. 模式识别之分类---数学贝叶斯方法
  11. 深入浅出话VC++(2)——MFC的本质
  12. 哪些深度相机有python接口_用树莓派和YOLO打造一个深度学习照相机
  13. 强连通分量(tarjan求强连通分量)
  14. 一个单文件服务器(摘自《java网络编程》)
  15. 自动驾驶汽车传感器技术解析—毫米波雷达
  16. MyEclipse 中文转英文
  17. 18-Ansible常用模块-group模块
  18. java 一年中的第几天_Java计算某个日期是一年中的第几天
  19. C语言《位段结构体、联合体》
  20. 易 键盘读取,识别键盘代码,程序中响应键盘,键盘输入等,详细例子,手把手教会你!

热门文章

  1. RocketMQ源码分析(十五)之文件恢复
  2. 使用科大讯飞SDK实现语音功能
  3. 学生来看我,我自我满足...........
  4. C++源代码审计问题整改记录
  5. swiper 移动端选项卡_基于swiper的Tab选项卡
  6. 运输层:TCP四次挥手
  7. scrapy实战--爬取腾讯的招聘信息
  8. 基于LORA SX1278的温度监控控制系统开发设计-软件方案基于时分复用TDMA
  9. 关键词、词库、关键词词库
  10. 探究:软件工程中的test oracle到底是什么意思?