V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jpush
V2EX  ›  推广

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

  •  
  •   jpush · 2017-03-13 11:02:51 +08:00 · 3201 次点击
    这是一个创建于 2812 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在很多 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-03-13 15:18:40 +08:00
    这图是用什么画的
    wadjj
        2
    wadjj  
       2017-03-13 15:19:36 +08:00 via iPhone
    @HLT PPT 就可以把
    Binks
        3
    Binks  
       2017-03-13 16:33:51 +08:00
    20 行够?服务器端不需要写代码???
    yunji3344
        4
    yunji3344  
       2017-03-13 17:44:08 +08:00
    功能容易推广难
    tboy
        5
    tboy  
       2017-03-13 17:53:02 +08:00
    这图是用什么画的
    fhefh
        6
    fhefh  
       2017-03-13 21:49:46 +08:00
    @jpush 楼主来个运行视频 或者 iPhone 运行的截图~~
    loveuqian
        7
    loveuqian  
       2017-03-13 22:10:35 +08:00 via iPhone
    20 行都写不完一个 tableview
    mokeyjay
        8
    mokeyjay  
       2017-03-13 22:17:24 +08:00   ❤️ 1
    请发送到推广节点 @Livid
    aristotll
        9
    aristotll  
       2017-03-13 23:16:14 +08:00
    几十行写成 XXX 的文章好像都不算库里面写了多少代码的
    jpush
        10
    jpush  
    OP
       2017-03-13 23:52:37 +08:00
    @mokeyjay 噢, sorry ,没注意到是用自己产品举的例子
    jpush
        11
    jpush  
    OP
       2017-03-13 23:53:30 +08:00
    @aristotll 其实我是个标题党,我觉得我应该去看看 UC 标题部 收不收我
    Aceyclee
        12
    Aceyclee  
       2017-03-16 10:30:44 +08:00
    @yunji3344 确实如此
    Quaintjade
        13
    Quaintjade  
       2017-03-19 14:45:54 +08:00
    想起了“一句话木马” 233
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2641 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:30 · PVG 13:30 · LAX 21:30 · JFK 00:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.