现在很多 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) {
}];

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];

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) {
}];

line 19:创建群组及相关操作


[JMSGGroup createGroupWithName:name desc:desc memberArray:members completionHandler:^(id resultObject, NSError *error) {
}];

line 20:退出登录


[JMSGUser logout:^(id resultObject, NSError *error) {
}];
至此一个 IM 的各种基本操作就完了,是不是

很简单?


作者: pikacode - 极光( jpush 为极光团队账号)

原文:20 行代码极速为 App 加上聊天功能

知乎专栏:极光日报

20 行代码极速为 App 加上聊天功能的更多相关文章

  1. Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (3)

    接上篇 Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (2) 7. 使用配置文件指定监听地址 打开 appsettings.json 文件,加入一行 "UseUrls&q ...

  2. HTML5游戏实战(4): 20行代码实现FlappyBird

    这个系列很久没有更新了.几个月前有位读者调侃说,能不能一行代码做一个游戏呢.呵呵,接下来一段时间,我天天都在想这个问题,怎么能让GameBuilder+CanTK进一步简化游戏的开发呢.经过几个月的努 ...

  3. HTML5游戏实战之20行代码实现打地鼠

    之前写过一篇打地鼠的博客70行的代码实现打地鼠游戏,细致思考过后,发现70行代码都有点多余了,应用tangide的控件特性,能够将代码量缩减到20行左右. 先show一下终于成果,点击试玩:打地鼠.或 ...

  4. JS模版引擎[20行代码实现模版引擎读后感]

    曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...

  5. 20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测

    作者 | 江昱 前言 图像分类是人工智能领域的一个热门话题.通俗解释就是,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法. 它利用计算机对图像进行定量分析,把图像或图像中 ...

  6. Android几行代码实现监听微信聊天

    原创作品,转载请注明出处,尊重别人的劳动果实. 2017.2.7更新: *现在适配微信版本更加容易了,只需要替换一个Recourse-ID即可 *可以知道对方发的是小视频还是语音,并获取秒数. *可以 ...

  7. javascript写贪吃蛇游戏(20行代码!)

    <!doctype html> <html> <body> <canvas id="can" width="400" ...

  8. 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  9. py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图

    0.准备 所用到的模块: urllib.request,获取源码 beautifulsoup4(bs4),网页抓取数据   安装bs4,python3 -m pip install beautiful ...

随机推荐

  1. SQLSERVER 建立全文检索

    --  创建测试表 --  DROP TABLE FullTextIndexing CREATE TABLE FullTextIndexing ( ID INT IDENTITY(1,1) NOT N ...

  2. H5 css学习

    p{text-indent:2em;}段前空两格   段落排版--行间距(行高) p{line-height:1.5em;} 段落排版--中文字间距.字母间距  h1{    letter-spaci ...

  3. VIO系统的IMU与相机时间偏差标定

      视觉里程计(VIO)作为一种空间定位方法,广泛应用于VR/AR.无人驾驶和移动机器人,比如近年火热的苹果 AR-Kit和谷歌AR-Core都使用了VIO技术进行空间定位.通常,VIO系统忽略IMU ...

  4. "分辨率"到底是个什么概念?它和DPI之间是什么关系?

    "分辨率"到底是个什么概念?它和DPI之间是什么关系? 分辨率:显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少.由于屏幕上的点.线和面都是由像素组成的, ...

  5. 面向对象的JavaScript-006-Function.prototype.apply()的3种作用

    1. // Function.prototype.apply()的作用 // 1.Using apply to chain constructors Function.prototype.constr ...

  6. EZOJ #257

    传送门 分析 先进行缩点 之后从终点倒着跑 对于一组边如果有一个点不能到达则这组边直接废掉 最后看只用没废掉的边能不能从起点走到终点 代码 #include<iostream> #incl ...

  7. python str, list,tuple, dir

    Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hello ...

  8. Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testAction': ...

  9. javascript的那些事儿你都懂了吗

    javascript从开始的验证表单的脚本语言发展到现在能运行在服务器上,其影响力不断的提升.自己作为一个做前端的,编写js是必不可少,从自己学习js的历程来看其实也是比较吃力.要 学好它,还是的花费 ...

  10. .NET基础 (06)面向对象的实现

    面向对象的实现1 C#中类可以有多个父类.可以实现多个接口吗2 简述C#中重写.重载和隐藏的概念3 为什么在构造方法中调用虚方法会导致问题4 在C#中如何声明一个类不能被继承 面向对象的实现 1 C# ...