013.消息_环信

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

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);
}
 
 
时间: 2024-10-11 12:06:14

013.消息_环信的相关文章

iOS 环信消息撤回

这两天在做环信的消息回撤,在网上找了许久没有这种案例,之后官方的一些方法,但是自己做,还是需要花点时间去整理,所以我决定等我把这个做好之后,分享给大家,如果做的不好多多指教,谢谢- 首先要实现消息撤回就是两个步骤,一个是发送要回撤的透传消息 .一个是接收透传信息,删除要回撤的消息. 第一步 : ChatViewController.m 自己定义一个 1 UIMenuItem *_messageRetracementMenuItem; 第二步 这个方法里面添加一下撤回字段,我把整段都复制过来了,你

环信_入门

环信服务器端REST平台概述 关于REST REST(Representational State Transfer)是一种轻量级的Web Service架构风格,可以翻译成“表述性状态转移”,实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能.效率和易用性上都优于SOAP协议. REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建).Read(读取).Update(更新)和Delete(

使用环信账号发送系统通知及消息提醒

package com.shangyu.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j

环信透传消息,无法回调

震 [[EMClient sharedClient].chatManager sendMessageReadAck:msg completion:^(EMMessage *aMessage, EMError *aError) { BSLog(@"----%@---%@---", aMessage, aError); }]; [[EMClient sharedClient].chatManager sendMessage:msg progress:^(int progress) { }

李洪强iOS开发之-环信04_消息

李洪强iOS开发之-环信04_消息 消息:IM 交互实体,在 SDK 中对应的类型是 EMMessage.EMMessage 由 EMMessageBody 组成. 构造消息 构造文字消息 EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要发送的消息"]; NSString *from = [[EMClient sharedClient] currentUsername];   //生成Messag

环信即时通讯 —— 消息、会话

1.消息EMMessage 环信支持文字.图片.位置.语音.视频.文件.透传.自定义八种消息构造.消息,即IM交互实体,在SDK中对应的类型是 **EMMessage**,EMMessage可以由多个符合<IEMMessageBody>协议的body组成,但是 推荐使用一个body. 2.消息构造 1> 设置消息的内容 文字消息: EMChatText *msgChat = [[EMChatText alloc] initWithText:@"要发送的消息"]; 图片

[Java]直播方案----[接入环信聊天室]+[腾讯云直播]

辛辛苦苦写的,转载请注明一下,这点信任我想还是有的吧,谢谢了. http://www.cnblogs.com/applerosa/p/7162268.html 之前做了直播,一直没时间写,好不容易闲下来,所以总结记录一下. 需要注意的是,在获取环信聊天室ID和腾讯云三个推/拉流地址的时候,需要先去注册,获取所用开发者账号. 所以这个教程所必须的东西: 1.环信开发者账号; 2.腾讯云开发者账号; 一.做直播,肯定要有一个直播模型,这里我们用直播间来做示例: 这里只是做个基础的演示,所以都是必须的

Vue 集成环信 全局封装环信WebSDK 可直接使用

Step1.安装 easemob-websdk npm install --save easemob-websdk Step2.安装 strophe.js    underscore    crypto-js npm install --save strophe.js underscore crypto-js Step3.使用 新建一个webim.js import store from '@/store' window.Strophe = require('strophe.js').Strop

Vue 集成环信 全局封装环信WebSDK

1 安装 npm install easemob-websdk --save 官方安装 ,这种安装要在依赖包配置初始化链接,提交代码时并没把配置提交 使用 hx-websdk 安装 npm install --save hx-websdk  2 .使用 新建一个webim.js  放在聊天窗口组件同一层级,为了Emoji图片路径同步 import store from '@/store/store' // window.Strophe = require('strophe.js').Stroph