美文网首页iOS 网络编程极光iOS 开发
20 行代码极速为 App 加上聊天功能

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

作者: pikacode | 来源:发表于2016-12-09 14:13 被阅读3995次

    现在很多 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 的各种基本操作就完了,是不是

    很简单?

    相关文章

      网友评论

      • 空转风:楼主,这边发送消息有了,请问接受消息是什么方法?就是在我在跟a聊天的时候,我发一条过去,然后他发一条过来,他发的那条是要怎么接受?
        空转风:另外问下楼主,现在极光的是swift的,如何把他的代码迁移出来用在oc的项目里?他是桥接oc,现在要让oc桥接他,感觉好蛋疼,请问楼主有demo什么的吗
      • 明似水:正需要,谢谢了!
      • 橙一升:不止20行代码呀~
        pikacode:@橙一升 :stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye:
        橙一升: @pikacode 😝😝😝
        pikacode:@橙一升 多少行?

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

      本文链接:https://www.haomeiwen.com/subject/bxermttx.html