常见问题

业务开通

1. 注册后无法开通MQTT业务

问题描述:
在注册账户后,登录console控制台,选择【应用列表】中的某一个App,无法开通MQTT业务。
问题原因:
(1)使用系统提供的默认demo开通,目前该demo暂不支持开通MQTT业务;
(2)在console控制台【添加应用】时,数据中心默认为“国内2区”,需要更改为“国内1区”;
解决方案:
新建应用时,数据中心选择“国内一区”。

客户端集成

1.哪些开发语言支持集成MQTT客户端

问题描述:
都有哪些开发语言支持集成MQTT客户端?
解决方案:
MQTT协议属于标准协议,目前已支持多种开发语言集成,包括:Java、iOS、Android、JavaScript、C、Node.js等等。同时集成MQTT客户端可支持两种方式:
(1)选择开源的MQTT SDK:社区提供多种开源的MQTT 客户端SDK,环信已将下载链接整理如下,可根据需要下载。客户端SDK下载
(2)基于标准协议进行开发:基于标准的协议开发MQTT客户端,也可无差异对接MQTT服务器。

2.小程序是否支持集成MQTT客户端

问题描述:
小程序(微信小程序、支付宝小程序)是否支持集成MQTT客户端?
解决方案:
支持的,目前微信及支付宝小程序都支持集成MQTT客户端,可选择使用mqtt.min.js SDK。
集成步骤如下:
步骤1:选择mqtt.min.js开源的SDK,目前测试只有4.2.1之前的版本小程序端可以使用。
步骤2:配置域名地址,在【微信/支付宝开发者平台】→【开发】→【开发管理】→【开发设置】→【服务域名配置】部分配置获取token的域名地址和服务器连接的域名地址。
(1)服务器连接的域名地址:在console后台【MQTT】→【服务概览】→【服务配置】下的【连接地址】获取;
(2)获取token域名地址:在console后台【即时通讯】→【服务概览】→【服务版本】下的【REST API访问地址】获取;
步骤3:获取orgname和appname:appkey由orgname#appname组成,例如“1145210806152081#demo”,orgname为“1145210806152081”,appname为“demo”;
步骤4:设置用户登录账户,在console后台【应用概览】→【用户认证】下创建账户信息。
步骤5:获取上述参数,配置到环信小程序demo中的相应字段上,即可成功连接服务器实现消息通信。 下载支付宝小程序demo下载微信小程序demo

3.安卓端如何集成MQTT客户端

问题描述:
安卓端如何集成MQTT客户端?
解决方案:
环信已提供安卓端使用的MQTT demo,下载链接: 安卓端demo

4.iOS端如何集成MQTT客户端

问题描述:
iOS端如何集成MQTT客户端?
解决方案:
环信已提供iOS端使用的MQTT demo,下载链接: iOS端demo

5.Java端如何集成MQTT客户端

问题描述:
Java端如何集成MQTT客户端?
解决方案:
环信已提供Java端使用的MQTT demo,下载链接: Java端demo

6.Web端如何集成MQTT客户端

问题描述:
Web端如何集成MQTT客户端?
解决方案:
环信已提供Web端使用的MQTT demo,下载链接: Web端demo

服务器端集成

1.服务器端如何集成MQTT服务

问题描述:
服务器端如何集成MQTT服务?
解决方案:
为实现客户服务器、环信MQTT消息云及客户终端之间进行消息交互,不仅提供了客户终端使用的SDK,同时提供了服务器端集成方法,包括REST API方式服务器端SDK
(1)REST API方法
(2)服务器端SDK下载

客户端连接

1.开通后无法连接MQTT消息云

问题描述:
在创建APP后,通过console后台获取的参数,无法连接MQTT消息云。
问题原因:
(1)认证鉴权信息填写错误:
a)如果使用MQTT桌面客户端连接,登录密码直接使用token内容。token在【应用概览】→【用户认证】页面,选择相应账户后的【查看token】按钮获取;
b)如果使用代码连接,需要通过【应用概览】→【用户认证】→【用户ID】列表中的username/password先获取token,在通过token进行认证连接;
(2)clientID填写错误:
a)clientID由两部分组成,形式为“deviceID@AppID”,其中deviceID由用户自定义,AppID通过【服务概览】→【服务配置】中获取。 例:“0023B8@ipd7a0”;
b)部分MQTT客户端会在clientID后自动添加时间戳,需要在连接时,将Append timestamp to MQTT client id置false;
解决方案:
MQTT消息云连接需要5个基本参数,包括连接地址(Host)、端口(Port)、clientID(MQTT client ID)、用户ID(Username)、token(Password)。 以下图为例,连接5个参数为:
连接地址:aitbj0.cn1.mqtt.chat
端口:1883(mqtt)
clientID:0023B8@aitbj0(自定义@AppID)
Username:test
token:相应用户ID后的【查看token】内容

2.MQTT客户端连接消息云时,登录密码是选择用户密码还是token?

问题描述:
MQTT客户端连接消息云时,登录密码是选择用户密码还是token值。
问题原因:
取决于使用者是否可以对MQTT客户端连接过程进行修改。
(1)如果可以修改,则需要先编写获取token流程,然后使用获取的token进行连接登录。当获取token时,会使用用户名、用户密码、org_name、app_name以及token域名等信息;
(2)如果不可以修改,则直接使用token进行连接登录;
解决方案:
确定使用的MQTT客户端:
(1)如果使用MQTT桌面客户端,比如MQTT Broker、MQTT BOX等,登录密码直接使用token内容。token在【应用概览】→【用户认证】页面,选择相应账户后的【查看token】按钮获取;
(2)如果使用代码连接,需要通过【应用概览】→【用户认证】→【用户ID】列表中的用户名和用户密码请求token,在通过获取到的token进行认证连接;

3.MQTT客户端反复出现断开重连现象

问题描述:
MQTT客户端反复出现断开重连现象。
问题原因:
(1)在配置参数时,设置了断开重连模式;
(2)存在两个或两个以上的客户端使用相同的clientid登录,他们会互相踢对方,如果设置成自动重连机制,将会无限循环断开重连;
解决方案:
确保当前APP下每个clientID的唯一性。

4.用户名存在100个限制怎么办?

问题描述:
在【应用概览】→【用户认证】下创建用户会有100个 数量的限制,如果登录clientID超过100个怎么办?
问题原因:
(1)MQTT消息云以clientID作为唯一标识,不同的clientID可以使用相同的用户信息进行登录,因此100个用户信息可以复用;
(2)如果客户需要集成IM、Push等其他的业务,可以联系商务进行版本升级,提高创建用户数量;
解决方案:
复用用户账户,不同的clientID可以使用相同的用户信息进行登录。

5.登录报错信息Server has closed connection without connack.

问题描述:
在MQTT客户端连接时,服务器返回‘Server has closed connection without connack.’
问题原因:
(1)MQTT客户端没有启用遗嘱消息(will:false),但是遗嘱消息的Qos等级设置为“1”,标准规定will为false时,willqos必须是0;
解决方案:
将遗嘱消息的QoS等级设置为'0'。

异常排查

1.如何查看消息是否发送成功

问题描述:
发布客户端发送消息后,订阅客户端一直收不到消息,如何确认消息是否发送成功?
问题原因:
消息接收不到,有以下可能原因:
(1)发布客户端没有将消息发布出去;
(2)订阅客户端没有接收到消息;
解决方案:
(1)通过调用REST API中查询客户端消息发送&投递记录接口查询;
(2)通过调用服务器端SDK中QueryMqttRecordMessageOfClient函数查询;
(3)使用环信console后台中的【记录查询】→【消息记录查询】功能,输入发布/订阅客户端的clientID及相应时间段,即可查看上下行消息记录,定位问题出在发布客户端还是订阅客户端。

2.如何查看客户端的订阅关系

问题描述:
如何查看客户端的订阅关系?
解决方案:
(1)通过调用REST API中查询客户端session信息接口查询;
(2)通过调用服务器端SDK中QuerySessionByClientId函数查询;
(3)使用环信console后台中的【记录查询】→【设备状态查询】功能,输入待查询客户端的clientID,即可查看在线状态、登录用户ID以及订阅关系。

3.如何查看客户端的连接记录

问题描述:
如何查看客户端的连接记录?
解决方案:
(1)通过调用REST API中查询客户端连接记录接口查询;
(2)通过调用服务器端SDK中QueryMqttRecordDevice函数查询;
(3)使用环信console后台中的【记录查询】→【设备记录查询】功能,输入待查询客户端的clientID及相应时间段,即可查看客户端连接、订阅以及断开连接等记录。

4.如何查看客户端是否在线

问题描述:
如何查看客户端是否在线?
解决方案:
(1)通过调用REST API中查询客户端session信息接口查询;
(2)通过调用服务器端SDK中QuerySessionByClientId函数查询;
(3)使用环信console后台中的【记录查询】→【设备状态查询】功能,输入待查询客户端的clientID,即可查看在线状态、登录用户ID以及订阅关系。

如果您的问题仍未解决,请联系我们