20 行代码极速为 App 加上聊天功能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jpush
V2EX    推广

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

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

    现在多 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  
    &nbp;  2017-03-19 14:45:54 +08:00
    想起了“一句话木马” 233
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3094 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 00:41 PVG 08:41 LAX 16:41 JFK 19:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86