【新手必看】服务端集成网易云信IM 即时通讯

简介: 【新手必看】服务端集成网易云信IM 即时通讯

了解网易云信 IM

网易云信 IM 即时通讯服务基于网易二十余年的 IM 技术积累,致力于打造最稳定的即时通讯云平台。

IM 即时通讯服务提供了一整套即时通讯基础能力。通过该平台服务就可以将即时通讯、实时网络能力快速集成至企业自身应用中。针对不同场景,网易提供了一系列产品、技术解决方案,包括:客户端 IM 组件、客户端 IM 基础库、全平台 SDK 以及服务端 API 等。利用这些解决方案,企业可以直接在自身的应用中搭建出即时通讯产品,也可以无限创意出自己的即时通讯场景。


通过网易云信 IM SDK,不仅可以快速实现私信、即时聊天、消息通知、游戏对战通讯等常见功能,还能完整打造类似 Discord、微信、子弹短信、易信等的大用户量级社交产品。

集成概述

服务端集成与客户端集成相辅相成,前者实现您的应用服务端与云信 IM 服务端的数据交互,后者实现您的应用客户端与云信 IM 服务端的数据交互。

更新圈组后的IM架构图.png

应用服务端和云信 IM 服务端的数据交互按数据流通方向可分为下表所示的两种类型。

服务端集成类型 相关文档
应用服务端请求云信 IM 服务端 API调用方式
云信 IM 服务端请求应用服务端 第三方回调消息抄送安全通


大部分服务端 API 能够实现和 SDK 接口相同的效果,但部分能力仅可通过服务端 API 实现,如注册云信 IM 账号和创建聊天室。


服务端 API 使用流程

应用服务端请求云信 IM 服务端的操作流程如下。IM 服务端请求应用服务端的相关说明,请参见 第三方回调、 消息抄送和 安全通。

本文以注册云信 IM 账号(user/create.action)这个 API 为例,详细介绍服务端 API 的使用流程。

前提条件

已在云信控制台创建应用,获取 App Key。

已准备好调用和调试服务端 API 的开发环境,如 cURL 和 Postman。

步骤1:确认请求地址(URL)

云信 IM 服务端根据不同的请求地址(URL),区分不同的请求。 因此,您需先到服务端 《API 参考》的相应 API 文档的请求说明中,获取请求地址。


以下为注册云信 IM 账号(user/create.action)的请求地址:

https://api.netease.im/nimserver/user/create.action

该请求地址可分为如下几个部分:

https:指定请求的通信协议。

api.netease.im/nimserver:指定云信 IM 服务端的接入地址。

user/create.action:指定调用的 API。


上述请求地址的域名(api.netease.im)属于国内数据中心域名。如果您的应用主要服务于海外用户,需要将域名设置为海外数据中心域名(api-sg.netease.im),相应的海外接入地址为

https://api-sg.netease.im/nimserver。更多海外数据中心接入相关说明,请参见接入海外数据中心。

步骤2:生成 CheckSum

为保证 API 的安全调用,云信 IM 服务端会对每个 API 的访问请求进行身份验证。您在调用 API 时,都需要在请求中包含 CheckSum 信息。

CheckSum 可通过将本文前提条件获取的 App Secret 结合 Nonce 和 CurTime 这两个参数拼接成字符串后再进行 SHA1 哈希计算来生成,详情请参见 CheckSum计算示例。

步骤3:配置公共请求参数

调用云信 IM 服务端 API 前,需先配置 API 的公共请求参数,即每个 API 都需要使用的请求参数,包括 App Key、Nonce、CurTime 和 CheckSum。公共请求参数需放在请求头(Request Header)中。


参数 说明
App Key 通过云信控制台获取,详见获取 App key
Nonce 随机数(最大长度128个字符)
CurTime 当前 UTC 时间戳,从 1970 年 1 月 1 日 0 时 0 分 0 秒开始到 现在(指发起请求瞬间的前后 5 分钟内)的秒数(类型为 String)
CheckSum 即步骤2:生成 CheckSum中的 CheckSum

步骤4:配置业务参数

配置完公共请求参数后,您需再配置 API 相关的业务参数,明确目标操作。

业务参数的具体介绍,请参见请求参数。

请求参数无论为何类型,调用 API 实际传入时,都需要转为 String 格式,否则将报错。

步骤5:应用服务端发起请求

发起请求

完成以上配置后,您的应用服务端可以通过请求地址,向云信 IM 服务端发起请求。

cURL 请求示例
  curl -X POST -H "AppKey: go9dnk49bkd9jd9vmel1kglw080*****" -H "Nonce: 4tgggergigwow323t23t" -H "CurTime: 1443592222" -H "CheckSum: 9e9db3b6c9abb2e1962cf3e6f7316fcc55583f86" -H "Content-Type: application/x-www-form-urlencoded" -d 'accid=zhangsan&name=zhangsan' 'https://api.netease.im/nimserver/user/create.action'
HttpClient 请求示例(Java)
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Test {
    public static void main(String[] args) throws Exception{
        DefaultHttpClient httpClient = new DefaultHttpClient();
        String url = "https://api.netease.im/nimserver/user/create.action";
        HttpPost httpPost = new HttpPost(url);

        String appKey = "94kid09c9ig9k1loimjg01******";
        String appSecret = "1234567*****";
        String nonce =  "12345";
        String curTime = String.valueOf((new Date()).getTime() / 1000L);
        String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);//参考 计算CheckSum的java代码

        // 设置请求的header
        httpPost.addHeader("AppKey", appKey);
        httpPost.addHeader("Nonce", nonce);
        httpPost.addHeader("CurTime", curTime);
        httpPost.addHeader("CheckSum", checkSum);
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

        // 设置请求的参数
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("accid", "helloworld"));
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));

        // 执行请求
        HttpResponse response = httpClient.execute(httpPost);

        // 打印执行结果
        System.out.println(EntityUtils.toString(response.getEntity(), "utf-8"));
    }
}

响应请求

云信 IM 服务端接收到您的请求信息后,返回响应信息。

返回示例如下:

"Content-Type": "application/json; charset=utf-8"
{
  "code":200,
  "info":{"token":"*****","accid":"*****","name":"*****"} 
}

状态码

调用 API 发起请求后,云信 IM 服务端会通过状态码告知您 API 调用结果,如上文返回示例中表示调用成功的"code":200。

如调用不成功,您可根据状态码进行问题排查。具体请参见状态码。

状态码的含义均为开放式,不同接口返回的相同状态码,含义可能略有不同。因此不建议您针对状态码开发业务逻辑。如果对状态码存在依赖,可能存在风险。

常见问题

为什么按照 Boolean 格式传入参数,最终调用 API 失败?

云信 IM 服务端 API 在调用时,请求参数无论为何类型,实际传入时都需转为 String 格式,否则将报错。


以账号全局禁言接口(nimserver/user/mute.action)为例,虽然请求参数 mute 为 Boolean 类型,但在调用接口时,请不要传入"mute":true,而应该传入"mute":“true”,否则将返回错误提示:“mute not boolean”。

目录
相关文章
|
8月前
|
前端开发 JavaScript 网络安全
Web网页端即时通讯源码/IM聊天源码RainbowChat-Web
RainbowChat-Web是一套基于MobileIMSDK-Web的网页端IM系统。不同于市面上某些开源练手或淘宝售卖的demo级代码,RainbowChat-Web的产品级代码演化自真正运营过的商业产品,其所依赖的通信层核心SDK已在数年内经过大量客户及其辐射的最终用户的使用和验证。RainbowChat-Web同时也是移动端IM应用RainbowChat的姊妹产品。
268 0
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.0版已发布
RainbowChat是一套基于开源IM即时通讯聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题。RainbowChat可能是市面上提供im即时通讯聊天源码的,唯一一款同时支持TCP、UDP两种通信协议的IM产品。与姊妹产品RainbowTalk和RainbowChat-Web 技术同源,历经考验。
377 0
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.0版已发布
|
6月前
|
数据安全/隐私保护 容器 Go
开源IM即时通讯系统调研
Lumen IM 是一款企业级开源即时通讯工具,前端采用 Vue3 + Naive UI,后端基于 Go 语言,使用 WebSocket 协议。支持 Docker + Nginx 快速部署,适合私有化环境。功能包括文本、图片、文件消息,内置笔记、群聊及消息历史记录。界面美观、功能完善,适用于企业沟通、团队协作及开发者学习。提供前后端源码,便于快速搭建 IM 系统。
开源IM即时通讯系统调研
|
6月前
|
移动开发 网络协议 小程序
鸿蒙NEXT即时通讯/IM系统RinbowTalk v2.4版发布,基于MobileIMSDK框架、ArkTS编写
RainbowTalk是一套基于开源即时通讯讯IM框架 MobileIMSDK 的产品级鸿蒙NEXT端IM系统。纯ArkTS编写、全新开发,没有套壳、也没走捷径,每一行代码都够“纯血”。与姊妹产品RainbowChat和RainbowChat-Web 技术同源,历经考验。
292 1
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
786 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
7月前
|
缓存 移动开发 网络协议
纯血鸿蒙NEXT即时通讯/IM系统:RinbowTalk正式发布,全源码、纯ArkTS编写
RainbowTalk是一套基于MobileIMSDK的产品级鸿蒙NEXT端IM系统,目前已正式发布。纯ArkTS、从零编写,无套壳、没走捷径,每一行代码都够“纯”(详见:《RainbowTalk详细介绍》)。 MobileIMSDK是一整套开源IM即时通讯框架,历经10年,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp、鸿蒙NEXT,服务端基于Netty编写。
533 1
|
7月前
|
测试技术 开发工具 git
基于WebSocket即时通讯im源码| uniapp即时通讯源码| 私有化部署SDK视频安装教程
本项目是基于 ThinkPHP7 和 Swoole 构建的即时通讯 IM 源码,打造了一个简洁美观、移动优先的渐进式 Web 应用。支持从源码构建,并提供详细的安装、配置与使用说明。仓库地址:im.jstxym.top。
|
9月前
|
网络协议 Java 网络安全
全平台开源即时通讯IM聊天框架MobileIMSDK的服务端开发指南,支持鸿蒙NEXT
全平台开源即时通讯IM聊天框架MobileIMSDK的服务端开发指南,支持鸿蒙NEXT
651 4
|
10月前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
621 1