目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能。
首先,一个最基础的 IM 应用会需要有哪些功能?
那么我们又该如何用 JMessage 来实现这些功能呢?
当然啦,你需要先为自己的应用集成 JMessage SDK ,具体的集成方法可以参考集成文档,这里就不再重复啦。: )
下面我们就来看看这些功能模块具体应该怎样开发?
在功能模块开发之前,需要先调用 JMessageClient.init(applicationContext) 方法来初始化 SDK ,推荐在 Application 类中调用。
JMessage 对于用户的注册,默认必需的只有用户名和密码,对于用户名和密码的要求如下:
|参数|字符说明|长度限制 | |:--------|:--------|:------| | username|以字母或者数字开头。支持字母、数字、下划线、英文点、减号、 @|Byte(4~128)| | password|不限 |Byte(4~128)|
用户注册方法:
JMessageClient.register(username, password, new BasicCallback() {
@Override
public void gotResult(int code, String desc) {
if (code == 0) {
// 注册成功
} else {
// 注册失败。 status :错误码; desc :错误描述
}
}
})
在你 App 的注册界面调用该方法后,便将用户注册到了极光服务器,就不需要自己来维护,除此之外 JMessage 还提供了设置用户昵称( nickname )、生日( birthday )、个性签名( signature )、性别( gender )、地区( region )和头像( avatar )的方法。
详情可以参考相关 API 文档。
在注册成功后,注册的用户就可以通过登录 API 来进行登录,之后便能够收发消息了。
登录 API 的用法和注册类似,大家可以直接参考 API 文档。
在 IM 应用中,聊天会话就是一个用户同另一个用户 / 群组的聊天关系。在 JMessage 中定义聊天会话的为 Conversation 类。
像发送消息、获取历史消息、获取会话中对方用户的信息等和具体聊天会话相关的方法都存在于 Conversation 中。
首先,在 JMessage 中 Conversation 分为单聊会话和群聊会话。具体用法基本相同,只是有些地方需要大家注意下:
目前最新版本的 JMessage 支持文字、图片、语音、位置、文件和自定义几种类型的消息,基本的用法大家可以直接参考 API 文档,这里就不再赘述了。
这里需要注意的是 JMessage 提供了两种创建消息的方式:
两种方式的结果其实是一样的,都是返回一条创建好的 Message 对象。区别就在于如果你不光要发送消息,还需要 Conversation 对象的其他方法,比如获取对方的信息、头像什么的,那么推荐使用第二种方法。如果仅仅是单独的发消息,就可以直接用第一种方法来创建。
创建完消息之后,就需要设置发送结果监听了,代码如下:
message.setOnSendCompleteCallback(new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseDesc) {
if (responseCode == 0) {
// 消息发送成功
} else {
// 消息发送失败
}
}
});
JMessageClient.sendMessage(message); // 之后再调用发送消息 API
下面讲一下 JMessage 中几种不同的消息类型,有什么需要注意的小细节:
在了解发送消息后,下一步要做的当然就是接收消息啦。对于接受消息的代码写法,大家可以参考开发指南文档,这里就不再一一列举了。
总体来说,接收消息的处理还是很简单的,参考开发文档后基本写法就能了解了。这里讲几个需要注意的地方:
switch (msg.getContentType()) {
case image:
ImageContent imageContent = (ImageContent) msg.getContent();
if (msg.getStatus() == MessageStatus.receive_fail) {
imageContent.downloadThumbnailImage(msg, new DownloadCompletionCallback() {
@Override
public void onComplete(int code, String desc, File file) {
if (code == 0) {
// 下载成功
} else {
// 下载失败
}
}
});
}
}
语音消息也是同样,仅当自动下载失败,消息状态为 receive_fail 时才需要手动调用 downloadVoiceFile 方法来下载。
以上,就是使用 JMessage 开发一个基础 IM 应用的步骤和一些值得注意的地方,快来试试吧。: )
如果您想要一个完整的项目参考,可以戳这里。
作者: Hevin - 极光( JPush 为极光团队账号,欢迎关注)
知乎专栏:极光日报