jpush
V2EX  ›  推广

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

By jpush at 2017 年 3 月 13 日 · 4192 次点击

现在很多 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 加上聊天功能

知乎专栏:极光日报

13 条回复  •  2017-03-19 14:45:54 +08:00
HLT
   1
HLT  
   2017 年 3 月 13 日
这图是用什么画的
wadjj
   2
wadjj  
   2017 年 3 月 13 日 via iPhone
@HLT PPT 就可以把
Binks
   3
Binks  
   2017 年 3 月 13 日
20 行够?服务器端不需要写代码???
yunji3344
   4
yunji3344  
   2017 年 3 月 13 日
功能容易推广难
tboy
   5
tboy  
   2017 年 3 月 13 日
这图是用什么画的
fhefh
   6
fhefh  
   2017 年 3 月 13 日
@jpush 楼主来个运行视频 或者 iPhone 运行的截图~~
loveuqian
   7
loveuqian  
   2017 年 3 月 13 日 via iPhone
20 行都写不完一个 tableview
mokeyjay
   8
mokeyjay  
   2017 年 3 月 13 日   ❤️ 1
请发送到推广节点 @Livid
aristotll
   9
aristotll  
   2017 年 3 月 13 日
几十行写成 XXX 的文章好像都不算库里面写了多少代码的
jpush
   10
jpush  
OP
   2017 年 3 月 13 日
@mokeyjay 噢, sorry ,没注意到是用自己产品举的例子
jpush
   11
jpush  
OP
   2017 年 3 月 13 日
@aristotll 其实我是个标题党,我觉得我应该去看看 UC 标题部 收不收我
Aceyclee
   12
Aceyclee  
   2017 年 3 月 16 日
@yunji3344 确实如此
Quaintjade
   13
Quaintjade  
   2017 年 3 月 19 日
想起了“一句话木马” 233
如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
© 2026 V2EX · 53ms · 3.9.8.5