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);
}

 

 
 

posted on 2015-08-25 14:24  juicecoffeetea  阅读(188)  评论(0编辑  收藏  举报