上云无忧 > 文档中心 > 环信IM即时通讯使用教程(iOS) - 在多个设备上登录
IM即时通讯
环信IM即时通讯使用教程(iOS) - 在多个设备上登录

文档简介:
环信即时通讯 IM 支持同一个用户 ID 在多个平台或者多个设备上登录; 客户端支持查询当前账号的已登录设备列表,可强制该账号从其他已登录设备下线; 环信即时通讯 IM iOS SDK 支持在同一账号的所有已登录设备上同步在线消息和离线消息以及对应的回执和已读状态; 同一账号的所有已登录的离线设备都可以接收推送;
*此产品及展示信息均由环信官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

环信即时通讯 IM 支持同一个用户 ID 在多个平台或者多个设备上登录;

客户端支持查询当前账号的已登录设备列表,可强制该账号从其他已登录设备下线;

环信即时通讯 IM iOS SDK 支持在同一账号的所有已登录设备上同步在线消息和离线消息以及对应的回执和已读状态;

同一账号的所有已登录的离线设备都可以接收推送;

在同一账号的所有已登录设备上同步好友相关操作;

在同一账号的所有已登录设备上同步群组和聊天室相关操作;

默认最多支持 4 个设备同时在线,具体见 环信即时通讯 IM 价格 (opens new window)。如需增加支持的设备数量,可以联系环信商务。

技术原理

用户在 iOS 端上初始化 SDK 时会生成一个识别设备的 ID,主要用于多设备登录和推送。服务器会自动分发新消息到各登录设备。环信即时通讯 IM iOS SDK 提供如下方法来实现多个设备上的互动功能。

  • getSelfIdsOnOtherPlatform 获取在其他设备上登录的 ID。
  • EMMultiDevicesDelegate 获取其他设备上进行的好友或者群组操作。

前提条件

开始前,请确保满足以下条件:

完成 SDK 初始化,并连接到服务器,详见 快速开始。

实现方法

获取其他设备上登录的 ID 和给其他设备发送消息

你可以调用 getSelfIdsOnOtherPlatform 方法来获取在其他设备上登录的 ID,将此 ID 作为消息接收方来发出消息,则其他设备上登录的账号可以收到消息,实现不同设备上相互发送文件等功能。

NSArray *ids = [EMClient.sharedClient.contactManager getSelfIdsOnOtherPlatformWithError:nil];
 //选择一个 ID 作为发送目标。 NSString *toChatUsername = ids[0]; //创建一条文本消息,content 
为消息文字内容,toChatUsername 为接收方 ID。 EMTextMessageBody *textBody = [[EMTextMessageBody alloc]
 initWithText:content]; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:
toChatUsername from:EMClient.sharedClient.currentUsername to:toChatUsername body:textBody ext:nil];
 //发送消息。 [EMClient.sharedClient.chatManager sendMessage:message progress:nil completion:nil]; 
 

强制该账号从一个设备下线

[EMClient.sharedClient kickDeviceWithUsername:@"ID" password:@"password" resource:@"deviceResource" completion:nil]; 
 

获取其他设备上进行的好友或者群组操作

账号 A 同时在设备 A 和设备 B 上登录,账号 A 在设备 A 上进行一些操作,设备 B 上会收到这些操作对应的通知。

你需要先实现 EMMultiDevicesDelegate 监听其他设备上的操作,再设置多设备监听。

//实现 `EMMultiDevicesDelegate` 监听其他设备上的操作。 @interface ViewController () <EMMultiDevicesDelegate>
 @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [EMClient.sharedClient 
addMultiDevicesDelegate:self delegateQueue:nil]; } - (void)dealloc { [EMClient.sharedClient removeMultiDe
vicesDelegate:self]; } #pragma mark - EMMultiDevicesDelegate - (void)multiDevicesContactEventDidReceive:
(EMMultiDevicesEvent)aEvent
                                  username:(NSString *)aUsername
                                       ext:(NSString *)aExt { switch (aEvent) { //在其他设备上发起好友请求
 case EMMultiDevicesEventContactAdd: break; //好友已经在其他设备上被移除。 case EMMultiDevicesEvent
ContactRemove: break; //好友请求已经在其他设备上被同意。 case EMMultiDevicesEventContactAccept: break;
 //好友请求已经在其他设备上被拒绝。 case EMMultiDevicesEventContactDecline: break; 
//当前用户在其他设备加某人进入黑名单。 case EMMultiDevicesEventContactBan: break; //好友在其他设备被移出黑名单。
 case EMMultiDevicesEventContactAllow: break; default: break; } } - (void)multiDevicesGroupEventDidReceive:
(EMMultiDevicesEvent)aEvent
                                 groupId:(NSString *)aGroupId
                                     ext:(id)aExt { switch (aEvent) { //当前⽤户在其他设备创建了群组。
 case EMMultiDevicesEventGroupCreate: break; //当前⽤户在其他设备销毁了群组。 case EMMultiDevicesEventG
roupDestroy: break; //当前⽤户在其他设备已经加⼊群组。 case EMMultiDevicesEventGroupJoin: break; 
//当前⽤户在其他设备已经离开群组。 case EMMultiDevicesEventGroupLeave: break; //当前⽤户在其他设备发起了群组申请。
 case EMMultiDevicesEventGroupApply: break; //当前⽤户在其他设备同意了群组申请。 case EMMultiDevicesEv
entGroupApplyAccept: break; //当前⽤户在其他设备拒绝了群组申请。 case EMMultiDevicesEventGroupApplyDecline:
 break; //当前⽤户在其他设备邀请了群成员。 case EMMultiDevicesEventGroupInvite: break;
//当前⽤户在其他设备同意了群组邀请。 case EMMultiDevicesEventGroupInviteAccept: break; 
//当前⽤户在其他设备拒绝了群组邀请。 case EMMultiDevicesEventGroupInviteDecline: break;
 //当前⽤户在其他设备将某⼈踢出群。 case EMMultiDevicesEventGroupKick: break; //当前⽤户在其他
设备将成员加⼊群组⿊名单。 case EMMultiDevicesEventGroupBan: break; //当前⽤户在其他设备将成员移
除群组⿊名单。 case EMMultiDevicesEventGroupAllow: break; //当前⽤户在其他设备屏蔽群组。 case 
EMMultiDevicesEventGroupBlock: break; //当前⽤户在其他设备取消群组屏蔽。 case EMMultiDevicesEvent
GroupUnBlock: break; //当前⽤户在其他设备转移群主。 case EMMultiDevicesEventGroupAssignOwner: break; 
//当前⽤户在其他设备添加管理员。 case EMMultiDevicesEventGroupAddAdmin: break; 
//当前⽤户在其他设备移除管理员。 case EMMultiDevicesEventGroupRemoveAdmin: break; 
//当前⽤户在其他设备禁⾔⽤户。 case EMMultiDevicesEventGroupAddMute: break; //当前⽤户在其他设备移除禁⾔。
 case EMMultiDevicesEventGroupRemoveMute: break; //当前⽤户在其他设备设置了群成员自定义属性。
 case EMMultiDevicesEventGroupMemberAttributesChanged: break; default: break; } } 
// 当前⽤户在其他设备单向删除服务端的历史消息。 - (void)multiDevicesMessageBeRemoved:(NSString *
_Nonnull)conversationId deviceId:(NSString *_Nonnull)deviceId; 
 

典型示例

当 PC 端和手机端登录同一个账号时,在手机端可以通过特定方法获取到 PC 端的设备 ID,该设备 ID 相当于特殊的好友 Username,可以直接使用于聊天,使用方法与好友类似。

NSArray *otherPlatformIds = [[EMClient sharedClient].contactManager getSelfIdsOnOtherPlatformWithError:nil]
; if ([otherPlatformIds count] > 0) { NSString *chatter = otherPlatformIds[0]; //获取会话 EMConversation
 *conversation = [[EMClient sharedClient].chatManager getConversation:chatter type:EMConversationTypeChat 
createIfNotExist:YES]; //发送消息 NSString *sendText = @"test"; EMTextMessageBody *body = [[EMTextMessageBody 
alloc] initWithText:sendText]; NSString *from = [[EMClient sharedClient] currentUsername]; EMChatMessage 
*message = [[EMChatMessage alloc] initWithConversationID:conversation.conversationId from:from to:chatter
 body:body ext:nil]; message.chatType = EMChatTypeChat; [[EMClient sharedClient].chatManager sendMessage
:message progress:nil completion:nil]; }

相似文档
  • 用户在线状态(即 Presence)包含用户的在线、离线以及自定义状态。 本文介绍如何在即时通讯应用中发布、订阅和查询用户的在线状态。 技术原理: 环信 IM SDK 提供 IEMPresenceManager、EMPresence 和 EMPresenceManagerDelegate类,用于管理在线状态订阅,包含如下核心方法:
  • 环信即时通讯 IM 提供消息表情回复(下文统称 “Reaction”)功能。用户可以在单聊和群聊中对消息添加、删除表情。表情可以直观地表达情绪,利用 Reaction 可以提升用户的使用体验。同时在群组中,利用 Reaction 可以发起投票,根据不同表情的追加数量来确认投票。
  • 子区是群组成员的子集,是支持多人沟通的即时通讯系统,本文介绍如何使用环信即时通讯 IM iOS SDK 在实时互动 app 中创建和管理子区,并实现子区相关功能。 注意: 私有化版本不支持子区功能。
  • 子区消息消息类型属于群聊消息类型,与普通群组消息的区别是需要添加 isChatThread 标记。本文介绍环信即时通讯 IM iOS SDK 如何发送、接收以及撤回子区消息。
  • 新增消息举报接口,SDK 可以调用该接口举报对应消息。当服务器端审核服务收到举报消息后,会将举报消息存储到数据库,并提供接口供 Console 后台搜索展示。审核员可以对举报记录进行相应处理。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部