跨应用通信
概述
说明:跨应用通信是指允许同一开发者账号下的不同应用能互相通信,以满足开发者对于不同 appKey 下应用通信的需求。
JMessage Android SDK 在 v1.2.0 版本中实现了单聊跨应用,v1.3.0 版本中实现了群聊以及其他一些功能的跨应用,
具体对应关系见下表:
Since | 实现功能 | 说明 |
---|---|---|
v1.2.0 | 1.跨应用获取用户信息 2.跨应用单聊 |
1.实现跨应用获取用户信息 2.实现跨应用给用户发送单聊消息 |
v1.3.0 | 1.跨应用群聊 2.跨应用黑名单设置 3.跨应用免打扰设置 |
1.群组中允许加入来自不同应用下的用户,使跨应用群聊成为可能* 2.允许跨应用加用户至黑名单,以屏蔽来自不同应用下用户的消息 3. 实现跨应用添加和移除免打扰 |
:实现跨应用群聊的关键在于群组中加入跨应用的群成员,而创建会话和发送消息的流程和普通的群聊实现方式一致。
跨应用相关接口摘要
跨应用接口与非跨应用接口区别主要在于:跨应用接口增加了appkey作为参数。只要接口中需要传appkey作为参数的,均可以支持跨应用通信,详细接口说明请前往极光 IM Android API Java docs。这里仅列举一些常用的跨应用接口和实现。
Conversation 跨应用接口摘要
创建单聊跨应用会话
createSingleConversation(String userName, String appKey)
JMessageClient 跨应用接口摘要
跨应用获取用户信息
getUserInfo(String username,String appKey,GetUserInfoCallback callback)
跨应用添加群成员
addGroupMembers(long groupID,String appKey,List<String> userNameList,BasicCallback callback)
跨应用踢出群成员
removeGroupMembers(long groupID,String appKey,List<String> userNameList,BasicCallback callback)
跨应用添加 user 进黑名单
addUsersToBlacklist(List<String> usernames,String appKey,BasicCallback callback)
跨应用将 user 移出黑名单
delUsersFromBlacklist(List<String> usernames,String appKey,BasicCallback callback)
GroupInfo 跨应用接口摘要
获取群成员信息
getGroupMemberInfo(String username, String appKey)
跨应用相关具体实现
跨应用获取用户信息
通过指定 appKey 可以实现获取跨应用用户信息。
JMessageClient.getUserInfo(java.lang.String username,java.lang.String appKey,GetUserInfoCallback callback)
参数定义:
- username - 开发者注册的用户名
- appKey - 指定的 appKey,如果为空则在本应用 appKey 下查找用户
- callback - 获取用户信息的回调接口
代码示例:
JMessageClient.getUserInfo("username", "appKey", new GetUserInfoCallback() {
@Override
public void gotResult(int responseCode, String responseMessage, UserInfo info) {
// 获取到跨应用的用户信息
...
}
});
跨应用单聊实现
创建单聊会话时指定对方用户所属 appKey,即可建立起一个和跨应用用户的单聊会话。
Conversation.createSingleConversation(String targetUsername, String appKey)
参数定义:
- targetUsername - 用户的 username
- appKey - 指定的 appKey,如果为空则默认填本应用 appKey
创建跨应用会话后,创建消息发送即可。下面以创建一条单聊文本消息为例
代码示例:
//创建跨应用会话
Conversation con = Conversation.createSingleConversation("username", "appKey");
MessageContent content = new TextContent("hello");
//创建一条消息
Message message = con.createSendMessage(content);
//发送消息
JMessageClient.sendMessage(message);
跨应用群聊实现
实现跨应用群聊的关键在于群组中加入跨应用的群成员,而创建会话和发送消息的流程和普通的群聊实现方式一致。
下面列出了和跨应用操作群成员相关的接口
1.跨应用添加群成员
JMessageClient.addGroupMembers(long groupID,String appKey,List<String> userNameList,BasicCallback callback);
参数:
- groupID - 群组的 groupID
- appKey - usernameList 中 user 所属的 appKey,如果为空则在本应用 appKey 下查找用户
- userNameList - 添加进群组的成员 username 集合
- callback - 回调接口 2.跨应用踢出群成员
JMessageClient.removeGroupMembers(long groupID,String appKey,List<String> userNameList,BasicCallback callback);
参数:
groupID - 群组的 groupID
appKey - usernameList 中 user 所属的 appKey,如果 appKey 为空则在本应用 appKey 下查找用户
userNameList - 踢出群组成员的 username 集合
callback - 回调接口
3.获取群成员信息
//此接口是实例对象上的接口
groupInfo.getGroupMemberInfo(String username, String appKey)
参数:
- username - 指定群成员的 username
- appKey - 群成员所属的 appKey
下面以向已有群组中添加跨应用群成员,然后创建会话发送消息为例:
代码示例:
//添加跨应用用户到群组
JMessageClient.addGroupMembers(testGid, "appKey", userNameList, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
//添加跨应用群成员成功之后,创建会话,发送消息。
if(0 == responseCode){
Conversation conversation = Conversation.createGroupConversation(testGid);
Message msg = conversation.createSendTextMessage("hello");
JMessageClient.sendMessage(msg);
}
}
});
跨应用添加黑名单实现
通过以下接口在操作黑名单列表时指定 appKey,即可实现将跨应用的用户加入黑名单。
1.添加 user 进黑名单
JMessageClient.addUsersToBlacklist(List<String> usernames,String appKey,BasicCallback callback);
参数:
usernames -添加进黑名单的 username 集合
appKey - usernameList 中 user 所属的 appKey,如果 appKey 为空则在本应用 appKey 下查找用户
callback - 回调接口
2.将 user 移出黑名单
JMessageClient.delUsersFromBlacklist(List<String> usernames,String appKey,BasicCallback callback)
参数:
- usernames - 移出黑名单的 username 集合
- appKey - usernameList 中 user 所属的 appKey,如果 appKey 为空则在本应用 appKey 下查找用户
- callback - 回调接口
代码示例:
//跨应用添加用户至黑名单
JMessageClient.addUsersToBlacklist(usernames, "appKey",new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (0 == responseCode){
//成功跨应用添加用户至黑名单
...
}
}
});
跨应用免打扰实现
原有接口无需变动。免打扰相关接口是在 userinfo 对象上的实例接口,也就是说只要获取到的 user 是跨应用的用户,直接调用该 userinfo 对象的免打扰接口就可实现跨应用
userinfo.setNoDisturb(int noDisturb,BasicCallback callback)
参数:
- noDisturb - 1 -- 免打扰,其他 -- 非免打扰(设置免打扰时将参数设置为 1,取消免打扰时将参数设置为 0)
- callback - 回调接口
代码示例:
//跨应用获取用户信息
JMessageClient.getUserInfo("username", "appKey", new GetUserInfoCallback() {
@Override
public void gotResult(int responseCode, String responseMessage, UserInfo info) {
//跨应用获取用户信息成功,设置用户的免打扰属性
if(0 == responseCode){
info.setNoDisturb(1,null);
}
}
});