zoukankan      html  css  js  c++  java
  • 013.消息_环信01

    最近任务是环信的群组功能,记录所思以备后用。

    0.消息

    消息是IM中交互的实体,在SDK中对应的类型是EMMessage,EMMessage可以由多个符合<IEMMessageBody>协议的body组成,文档中还提到强力建议使用一个body,多个body存在bug

    /*!

     @method

     @brief 创建消息实例(用于:创建一个新的消息)

     @discussion 消息实例会在发送过程中内部状态发生更改,比如deliveryState

     @param receiver 消息接收方

     @param bodies 消息体列表

     @result 消息实例

     */

    - (id)initWithReceiver:(NSString *)receiver

                   bodies:(NSArray *)bodies;

    环信代码中有这样一行:

        EMMessage *message = [[EMMessage alloc] initWithReceiver:_callSession.sessionChatter bodies:@[textBody]];

    /*!

     @class

     @brief 通话对方的username

     */

    @property (strong, nonatomic) NSString *sessionChatter;

    <1.sessionChaatter是username,初始化时用的是username !

    1.透传消息

    环信SDK提供的一种特殊类型的消息,即CMD,既不会走APNS也不会存db,类似一种指令型的消息,比如服务器要通知客户端做某些操作,则服务器和客户端提前约定好某个字段,当客户端收到约定好的字段时,执行某种特定操作。

    <1.什么是指令型的消息呢?

    <2.如果不走APNS,并且网络请求是HTTP时,服务器怎样推送消息给客户端呢?

    环信文档中透传消息的初始化是这样的:

    EMChatCommand *cmdChat = [[EMChatCommand alloc] init];
    cmdChat.cmd = @"reason";
    EMCommandMessageBody *body = [[EMCommandMessageBody alloc] initWithChatObject:cmdChat];
    // 生成message
    EMMessage *message = [[EMMessage alloc] initWithReceiver:@"6001" bodies:@[body]];
    message.messageType = eMessageTypeChat; // 设置为单聊消息

    环信代码中是这样的:

    /*!

     @class

     @brief 聊天的命令对象类型

     */

    @interface EMChatCommand : NSObject<IEMChatObject>

    文档中说透传消息类似指令型的消息,EMChatCommand即聊天的命令对象类型。

    /*!

     @property

     @brief 命令

     */

    @property (nonatomic, strong) NSString *cmd;

    cmd是EMChatCommand的属性,是服务器和客户端约定好的字段

    2.解析消息

    解析普通消息:

    // 收到消息的回调,带有附件类型的消息可以用SDK提供的下载附件方法下载(后面会讲到)
    -(void)didReceiveMessage:(EMMessage *)message
    {
        id<IEMMessageBody> msgBody = message.messageBodies.firstObject;
        switch (msgBody.messageBodyType) {
            case eMessageBodyType_Text:
            {
                // 收到的文字消息
                NSString *txt = ((EMTextMessageBody *)msgBody).text;
                NSLog(@"收到的文字是 txt -- %@",txt);
            }
            break;
        default:
            break;
        }

    }

    解析透传消息:
    -(void)didReceiveCmdMessage:(EMMessage *)cmdMessage{
        EMCommandMessageBody *body = (EMCommandMessageBody *)cmdMessage.messageBodies.lastObject;
        NSLog(@"收到的action是 -- %@",body.action);
    }

     

    解析消息扩展属性:
    -(void)didReceiveCmdMessage:(EMMessage *)cmdMessage{
        // cmd消息中的扩展属性
        NSDictionary *ext = cmdMessage.ext;
        NSLog(@"cmd消息中的扩展属性是 -- %@",ext);
    }
    // 收到消息回调
    -(void)didReceiveMessage:(EMMessage *)message{
        // 消息中的扩展属性
        NSDictionary *ext = message.ext;
        NSLog(@"消息中的扩展属性是 -- %@",ext);
    }

     

     
     
  • 相关阅读:
    Epplus导出excel
    访问GitHub需要修改hosts
    如何将你的.Net Core程序部署成为服务
    生成雪花Id类
    文件操作帮助类
    工作流-WikeFlow
    《C语言进阶剖析》课程目录
    《C++深度解析》课程目录
    USB URB的status及其代表的意义
    数据结构优秀博文整理
  • 原文地址:https://www.cnblogs.com/juicecoffeetea/p/4757327.html
Copyright © 2011-2022 走看看