20 行代码极速为 App 加上聊天功能
现在很多 App 都需要集成 IM 功能,今天就为大家分享一下集成 IM 基本功能的步骤。本文内容以 JMessage 为例。
极光 IM ( JMessage ) = 极光推送 ( JPush ) + IM,本篇只论述其中的 IM 部分,为大家快速集成 IM 功能提供一个简明的范例。
我们先来看一下 IM 的基本功能与本文内容的对应关系:

line 0:准备工作
line 1:引入头文件
#import <JMessage/JMessage.h>
JMessage 核心头文件。这是唯一需要导入到你的项目里的头文件,它引用了内部需要用到的头文件。
line 2:开启事件监听
[JMessage addDelegate:self withConversation:nil];
- 用于监听各种全局事件
- 建议写在 line 3 之前
- Parameters:
- delegate:填入对象需要实现 <JMessageDelegate>
- conversation:nil 监听所有通知,非 nil 监听指定会话
line 3:启动 SDK
[JMessage setupJMessage:launchOptions
appKey:@"your appkey"
channel:@"channel name"
apsForProduction:NO
category:nil];
- 建议写在
application:didFinishLaunchingWithOptions:
- Parameters:
- launchOptions:启动函数的参数 launchingOption
- appKey:获取方式 line 0 - 集成 SDK
- channel:应用的渠道名
- isProduction:是否为生产模式
- category:iOS8 新增通知快捷按钮参数
line 4:注册新用户
[JMSGUser registerWithUsername:@"username"
password:@"password"
completionHandler:^(id resultObject, NSError *error) {
}];
Parameters:
- username:用户名
- password:密码
- handler:error 为 nil 时调用成功(下均同)
line 5:登录
[JMSGUser loginWithUsername:@"username"
password:@"password"
completionHandler:^(id resultObject, NSError *error) {
}];
line 6:创建单聊会话
[JMSGConversation createSingleConversationWithUsername:@"username"
completionHandler:^(id resultObject, NSError *error) {
}];
- 会话是整个 IM 的核心,所有的消息行为都基于「会话」
- 该会话不存在会返回新会话,存在会返回已有会话
- Parameters:
- handler:正常返回时 resultObject 为 JMSGConversation 会话对象
- ((JMSGConversation*)resultObject).target:会话的对方目标:
- Related APIs:
line 7:发送文本消息
[(JMSGConversation*)resultObject sendTextMessage:@"text"];
line 8~12:接收文本消息
- (void)onReceiveMessage:(JMSGMessage *)message error:(NSError *)error{
if (message.content == kJMSGContentTypeText) {
NSString *text = ((JMSGTextContent *)message.content).text;
}
}
- 在 line 2 中添加了 <JMessageDelegate> 的类,可以监听该方法
- 当 App 收到(文本、图片等各类)消息时该方法被调用
- 根据
message.contentType
判断消息类型 - 转型
message.content
为文本内容并获取文本text
以展示 UI - Related APIs:
line 13:获取历史消息
NSArray *messages = [(JMSGConversation*)resultObject messageArrayFromNewestWithOffset:nil limit:nil];
- 利用 line 6 中的
resultObject
转型后获取 - 单聊群聊均可
- Parameters:
- 返回 NSArray<JMSGMessage* >
- offset:起点。nil 从最新一条开始,n 从最新第 n 条往历史追查
- limit:数量。nil 表全部
line 14~15:清零单聊未读消息数
JMSGConversation *conversation = [JMSGConversation singleConversationWithUsername:username];
[conversation clearUnreadCount];
- Related APIs:
line 16:获取会话列表
[JMSGConversation allConversations:^(id resultObject, NSError *error) {
}];
- 批量获取所有会话列表
- 根据会话类型判断是单聊还是群聊
- Parameters:
- resultObject:NSArray<JMSGConversation*>
line 17:删除单聊会话
BOOL success = [JMSGConversation deleteSingleConversationWithUsername:username];
line 18:批量获取用户详情
[JMSGUser userInfoArrayWithUsernameArray:nameArr completionHandler:^(id resultObject, NSError *error) {
}];
- Parameters:
- nameArray:NSArray<NSString*>
- resultObject:NSArray<JMSGUser*>
- Related APIs:
line 19:创建群组及相关操作
[JMSGGroup createGroupWithName:name desc:desc memberArray:members completionHandler:^(id resultObject, NSError *error) {
}];
- Parameters:
- name:群名
- desc:群组描述
- memberArray:成员列表,NSArray<NSString*>
- resultObject:群组对象 JMSGGroup
- Related APIs:
line 20:退出登录
[JMSGUser logout:^(id resultObject, NSError *error) {
}];
至此一个 IM 的各种基本操作就完了,是不是
很简单?
作者: pikacode - 极光( jpush 为极光团队账号)
知乎专栏:极光日报
20 行代码极速为 App 加上聊天功能的更多相关文章
- Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (3)
接上篇 Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (2) 7. 使用配置文件指定监听地址 打开 appsettings.json 文件,加入一行 "UseUrls&q ...
- HTML5游戏实战(4): 20行代码实现FlappyBird
这个系列很久没有更新了.几个月前有位读者调侃说,能不能一行代码做一个游戏呢.呵呵,接下来一段时间,我天天都在想这个问题,怎么能让GameBuilder+CanTK进一步简化游戏的开发呢.经过几个月的努 ...
- HTML5游戏实战之20行代码实现打地鼠
之前写过一篇打地鼠的博客70行的代码实现打地鼠游戏,细致思考过后,发现70行代码都有点多余了,应用tangide的控件特性,能够将代码量缩减到20行左右. 先show一下终于成果,点击试玩:打地鼠.或 ...
- JS模版引擎[20行代码实现模版引擎读后感]
曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...
- 20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测
作者 | 江昱 前言 图像分类是人工智能领域的一个热门话题.通俗解释就是,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法. 它利用计算机对图像进行定量分析,把图像或图像中 ...
- Android几行代码实现监听微信聊天
原创作品,转载请注明出处,尊重别人的劳动果实. 2017.2.7更新: *现在适配微信版本更加容易了,只需要替换一个Recourse-ID即可 *可以知道对方发的是小视频还是语音,并获取秒数. *可以 ...
- javascript写贪吃蛇游戏(20行代码!)
<!doctype html> <html> <body> <canvas id="can" width="400" ...
- 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!
Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...
- py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图
0.准备 所用到的模块: urllib.request,获取源码 beautifulsoup4(bs4),网页抓取数据 安装bs4,python3 -m pip install beautiful ...
随机推荐
- windows下使用GNU make命令报错的解决方法
windows下使用GNU make命令报错的解决方法=> 错误信息:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x ...
- 一些好用的 Oracle 批处理和语句
# 备份脚本 backup.bat @ECHO OFF COLOR 0A SET DaysAgo=1 SET Today=%date:~0,4%%date:~5,2%%date:~8,2% EXP u ...
- fseek效率
http://www.zhihu.com/question/36675524?sort=created C++怎样读取文件才有最快的速度 获取文件大小,然后分配相应大小的内存,一次性读取文件到此内存 ...
- Linux buffer and cache
A buffer is something that has yet to be "written" to disk. A cache is something that has ...
- uc_authcode()
//解用户标识码public static function setAuthCode($auth){ //对 base64 编码的 data 进行解码. $auth = base64_decode($ ...
- [Training Video - 6] [File Reading] Using log object in the Groovy class
Car c= new Car(log); c.print() class Car{ def log public Car(log){ this.log=log } public void print( ...
- 搭建自己的MQTT服务器
搭建自己的MQTT服务器 物联网电子世界 百家号08-2903:04 MQTT协议是广泛应用的物联网协议,使用测试MQTT协议需要MQTT的代理.有两种方法使用MQTT服务,一是租用现成的MQTT服务 ...
- 给初学者的总结:jquery选择器
刚学jquery的时候是又渣又蠢的小白,而且把js和jquery混淆在一起. 把jquery的全部选择器总结在一起,才发现和css选择器好一部分都很像,并且有些选择器还很少用过. 我学习前端的路程是先 ...
- 1056 IMMEDIATE DECODABILITY
题目链接: http://poj.org/problem?id=1056 题意: 给定编码集, 判断它是否为可解码(没有任何一个编码是其他编码的前缀). 分析: 简单题目, 遍历一遍即可, 只需判断两 ...
- 编写高质量代码改善C#程序的157个建议——建议96:成员应优先考虑公开基类型或接口
建议96:成员应优先考虑公开基类型或接口 类型成员如果优先考虑公开及类型或接口,那么会让类型支持更多的应用场合. FCL中最典型的例子是集合的功能操作.集合根据功能划分有多种类型,比如List< ...