android 群组消息,极光IM- 群组管理 - 极光文档
群組管理
概述
把多個 username 加入到同一個群組內,在群組內發送群組消息。
創建私有群組、創建公開群組(2.4.0版本新增公開群組)
加入,退出群組;
加群組成員、移除群組成員;
群組管理員
申請加入和審批
禁言、消息屏蔽
群@功能
創建群組
群組分為私有群組、公開群組。
私有群組無法申請加入,群內成員邀請即可加入。
公開群組可通過獲取公開群組列表獲取。
公開群組可通過發起加入申請,群主或管理員審核通過的方式加入。
公開群組群主或管理員直接邀請即可加入,群成員邀請入群需群主或管理員審批。
創建私有群組
JMessageClient.createGroup(String groupName, String groupDesc, CreateGroupCallback callback);
@since 2.3.0
JMessageClient.createGroup(String groupName, String groupDesc, File groupAvatarFile, String format, CreateGroupCallback callback);
參數說明
String groupName 群名稱
String groupDesc 群描述
File groupAvatarFile 群頭像文件
String format 頭像文件擴展名,注意名稱中不要包括"."
CreateGroupCallback callback 結果回調
回調
public abstract void gotResult(int responseCode, String responseMsg, long groupId);
long groupId 新創建成功的群組ID(resopnseCode = 0 時)。
創建公開群組
Since 2.4.0
2.4.0版本新增公開群組類型。公開群組可通過入群申請,經群主或管理員審核通過的方式加入。公開群組群主或管理員直接邀請即可加入。群成員邀請入群需群主或管理員審批
。
/**
* 創建公開群組, 群組創建成功后,創建者會默認包含在群成員中。
* 公開群組與私有群組的區別是公開群組只有群主和管理員邀請入群才能直接入群,群內其他人員邀請他人入群需要經過群主或管理員審批,
* 管理員相關見{@link GroupInfo#addGroupKeeper(List, BasicCallback)}, 同時公開群組支持申請入群操作{@link JMessageClient#applyJoinGroup(long, String, BasicCallback)},
* 申請入群時也需要群主或管理員審批, 需要審批入群時群主和管理員會收到{@link cn.jpush.im.android.api.event.GroupApprovalEvent}事件
* 通過{@link GroupInfo#getGroupType()}得到群組類型
*
* @param groupName 群組名稱
* @param groupDesc 群組描述
* @param callback 回調接口
* @since 2.4.0
*/
JMessageClient.createPublicGroup(String groupName, String groupDesc,
CreateGroupCallback callback);
/**
* 創建公開群組,群組創建成功后,創建者會默認包含在群成員中。
* 公開群組定義參考{@link JMessageClient#createPublicGroup(String, String, CreateGroupCallback)}
* 使用此接口創建群組時可以指定群頭像,并且可以指定頭像文件在后臺存儲時的擴展名,如果填空或者不填,則后臺存儲文件時將沒有擴展名。
*
* @param groupName 群組名稱
* @param groupDesc 群組描述
* @param groupAvatarFile 群組頭像文件
* @param format 頭像文件擴展名,注意名稱中不要包括"."
* @param callback 回調接口
* @since 2.4.0
*/
JMessageClient.createPublicGroup(final String groupName, final String groupDesc, final File groupAvatarFile, String format,
final CreateGroupCallback callback);
解散群組
Since 2.5.0
/**
* 解散指定的群組,只有群的群主有權限解散。
* 群組解散后會以message的形式通知到群內所有成員,類型為{@link cn.jpush.im.android.api.content.EventNotificationContent.EventNotificationType#group_dissolved}
*
* @param groupID 群組id
* @param callback 回調
* @since 2.5.0
*/
JMessageClient.adminDissolveGroup(long groupID, BasicCallback callback);
群組信息
獲取群組列表
JMessageClient.getGroupIDList(GetGroupIDListCallback callback)
回調
public abstract void gotResult(int responseCode, String responseMessage,
List groupIDList)
List groupIDList 當前用戶所加入的群組的groupID的list
獲取公開群組列表
Since 2.4.1
可獲取指定appkey所屬下公開群組基本信息
/**
* 獲取指定應用appKey所屬下公開群組基本信息, 如果appKey為空則默認使用本應用appKey.
* 公開群組定義見{@link JMessageClient#createPublicGroup(String, String, CreateGroupCallback)},
* 群基本信息定義見{@link GroupBasicInfo}
*
* @param appKey 指定應用的appKey
* @param start 起始位置
* @param count 獲取個數
* @param callback 接口回調
* @since 2.4.1
*/
JMessageClient.getPublicGroupListByApp(String appKey, int start, int count, RequestCallback> callback);
代碼示例
//獲取指定應用下所有公開群組
JMessageClient.getPublicGroupListByApp(appkey, start, count, new RequestCallback>() {
@Override
public void gotResult(int responseCode, String responseMessage, List groupBasicInfos) {
if (responseCode == 0) {
String result = "";
for (GroupBasicInfo groupBasicInfo : groupBasicInfos) {
result += "GroupID: " + groupBasicInfo.getGroupID() + ", GroupType: " + groupBasicInfo.getGroupType() +
", GroupName: " + groupBasicInfo.getGroupName() + ", GroupDescription: " + groupBasicInfo.getGroupDescription() +
", GroupAvatarMediaID: " + groupBasicInfo.getAvatar() + ", GroupMaxMemberCount: " + groupBasicInfo.getMaxMemberCount()+ "\n\n";
}
tvDisplay.setText(result);
tvDisplay.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
} else {
tvDisplay.setText("獲取失敗!\nresponseCode:" + responseCode + "\nresponseMsg" + responseMessage);
}
}
});
獲取群組信息
JMessageClient.getGroupInfo(long groupId, GetGroupInfoCallback callback)
參數說明
long groupId 群ID
GetGroupInfoCallback callback 結果回調
回調
public void gotResult(int responseCode, String responseMessage, GroupInfo groupInfo)
GroupInfo groupInfo 返回的群組信息對象
更新群組名稱
groupInfo.updateName(String groupName, BasicCallback callback);
參數說明
String groupName 新的名稱
BasicCallback callback 結果回調
更新群組描述
groupInfo.updateDescription(String groupDesc, BasicCallback callback);
參數說明
String groupName 新的群組詳情描述
BasicCallback callback 結果回調
更新群組頭像
Since 2.3.0
groupInfo.updateAvatar(File avatar, String format, BasicCallback callback);
參數說明
File avatar 群頭像文件
String format 文件擴展名,注意名稱中不要包含“.”
BasicCallback callback 結果回調
修改群組類型
Since 2.6.1
groupInfo.changeGroupType(Type type, BasicCallback callback);
參數說明
Type type 群組類型
BasicCallback callback 結果回調
群成員信息
獲取群組成員列表
JMessageClient.getGroupMembers(long groupID,
RequestCallback> callback)
參數說明
long groupId 群組ID
RequestCallback callback
回調
public void gotResult(int responseCode, String responseMessage, List members);
List GroupMemberInfos 成員列表(GroupMemberInfo)。
群成員信息
群成員信息實體類 GroupMemberInfo
Since 2.7.0
方法
類型
說明
getType()
Type
獲取群成員類別:群主,群管理員,普通群成員
isKeepSilence()
boolean
群成員在群內是否被禁言 true被禁言,false沒有被禁言
getUserInfo()
UserInfo
獲取群成員對應的用戶信息
getNickName()
String
獲取群成員昵稱
getDisplayName()
String
獲取群成員在群內的展示名,展示名返回優先級為:群昵稱>備注名>用戶昵稱>用戶名
getJoinGroupTime()
long
獲取入群時間,單位豪秒
設置群成員昵稱
Since 2.7.0
/**
* 修改群成員昵稱,群成員僅能修改自己在此群的昵稱,管理員或群主修改任何普通群成員在此群的昵稱,群成員類型見{@link GroupMemberInfo#type}
*
* @param username 群成員用戶名
* @param appKey 群成員appKey,傳入空則默認使用本應用appKey
* @param nickName 昵稱
* @param callback 結果回調
* @since 2.7.0
*/
groupInfo.setMemNickname(String username, String appKey, String nickName, BasicCallback callback);
群成員管理
添加群組成員
JMessageClient.addGroupMembers(long groupID, String appKey, List userNameList, BasicCallback callback)
參數說明
long groupId 待加群的群組ID。創建群組時返回的。
String appkey 被添加的群成員所屬的appkey,不填則默認為本應用appkey
List usernameList 群組成員列表,使用成員 username。
BasicCallback callback 結果回調
添加群組成員,附帶reason參數,注意只對公開群組有效
Since 2.6.1
JMessageClient.addGroupMembers(final long groupID, final String appKey, final List userNameList, final String reason, final BasicCallback callback);
參數說明
long groupId 待加群的群組ID。創建群組時返回的。
String appkey 被添加的群成員所屬的appkey,不填則默認為本應用appkey
List usernameList 群組成員列表,使用成員 username。
String reason 公開群組邀請人入群的理由
BasicCallback callback 結果回調
移除群組成員
JMessageClient.removeGroupMembers(long groupId, String appKey, List usernameList, BasicCallback callback);
參數說明
long groupId 待刪除成員的群ID。
String appkey 被移除的群成員所屬的appkey,不填則默認為本應用appkey
List usernameList 待刪除的成員列表。
BasicCallback callback 結果回調。
移交群主
Since 2.5.0
/**
* 移交群主,將群主移交給指定群內成員,移交群主后原群主成為普通群成員.
* 移交群主成功后群內所有成員會收到群主變更事件,SDK收到事件會以類型為{@link cn.jpush.im.android.api.content.EventNotificationContent.EventNotificationType#group_owner_changed}
* 的消息事件方式上報
*
* @param username 待移交者用戶名
* @param appKey 待移交者appKey, 若傳入空則默認使用本應用appKey
* @since 2.5.0
*/
groupInfo.changeGroupAdmin(String username, String appKey, BasicCallback callback);
退出群組
JMessageClient.exitGroup(long groupId, BasicCallback callback);
參數說明
long groupId 待退出的群ID。
BasicCallback callback 結果回調。
群組管理員
Since 2.5.0
2.5.0版本新增群組管理員。管理員可以移除、禁言普通群成員,并且在公開群組里可以直接添加群成員和審核入群審批。群主可以添加、取消管理員并且移除或禁言管理員。
添加群管理員
Since 2.5.0
/**
* 添加群管理員
*
* @param userInfos 群成員UserInfo列表
* @param callback 回調
* @since 2.5.0
*/
groupInfo.addGroupKeeper(List userInfos, BasicCallback callback);
取消管理員
Since 2.5.0
/**
* 取消群管理員,管理員角色描述詳見官方文檔群組管理員
*
* @param userInfos 群成員UserInfo列表
* @param callback 回調
* @since 2.5.0
*/
groupInfo.removeGroupKeeper(List userInfos, BasicCallback callback);
獲取管理員列表
Since 2.5.0
/**
* 獲取群管理員列表, 返回群內管理員的成員信息列表,管理員角色描述詳見官方文檔群組管理員
*
* @return 管理員的成員信息列表
* @since 2.5.0
* @deprecated deprecated in jmessage 2.7.0 use{@link #getGroupKeeperMemberInfos()}instead
*/
groupInfo.getGroupKeepers();
/**
* 獲取群管理員列表, 返回群內管理員的成員{@link GroupMemberInfo}列表
*
* @return 管理員的成員GroupMemberInfo列表
* @since 2.7.0
*/
groupInfo.getGroupKeeperMemberInfos();
代碼示例
//添加管理員
groupInfo.addGroupKeeper(userInfos, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (responseCode == 0) {
Toast.makeText(getApplicationContext(), "添加管理員成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "添加管理員失敗", Toast.LENGTH_SHORT).show();
mTvGroupKeeper.setText("responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
//取消管理員
groupInfo.removeGroupKeeper(userInfos, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (responseCode == 0) {
Toast.makeText(getApplicationContext(), "取消管理員成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "取消管理員失敗", Toast.LENGTH_SHORT).show();
mTvGroupKeeper.setText("responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
//獲取管理員列表
List memberInfos = groupInfo.getGroupKeeperMemberInfos();
String result = "這里只展示username:";
for (GroupMemberInfo memberInfo : memberInfos) {
if (memberInfo != null) {
result += "\n" + memberInfo.getUserInfo().getUserName();
}
}
mTvGroupKeeper.setText(result);
群消息屏蔽
群組被設置為屏蔽之后,將收不到該群的消息。但是群成員變化事件還是能正常收到
Since 2.1.0
設置群消息屏蔽
groupinfo.setBlockGroupMessage(int blocked, BasicCallback callback)
參數說明
int blocked 是否屏蔽群消息。 1 - 屏蔽,0 - 取消屏蔽
BasicCallback callback 結果回調。
判斷群組是否被屏蔽
groupinfo.isGroupBlocked();
返回
int 1 - 已被屏蔽,0 - 未被屏蔽
獲取當前用戶的群屏蔽列表
JMessageClient.getBlockedGroupsList(GetGroupInfoListCallback callback)
參數說明
GetGroupInfoListCallback callback 結果回調。
群組@功能
消息發送方可以發一條帶有@list的消息。
接收方收到帶有@list的消息之后,如果@list中包含了自己,或者是@全體成員,則在sdk默認彈出的通知欄提示中會有相應的提示,如"xxx在群中@了你"。
創建@群成員的消息
Since 2.1.0
conversation.createSendMessage(MessageContent content, List atList, String customFromName)
參數說明
MessageContent content 消息內容對象
ListatList 被@用戶的userInfo list
String customFromName 自定義fromName
返回
Message 消息對象。
創建@全體群成員的消息
Since 2.2.0
conversation.createSendMessageAtAllMember(MessageContent content, String customFromName)
參數說明
MessageContent content 消息內容對象
String customFromName 自定義fromName
返回
Message 一條包含@全體成員信息的消息對象。
判斷消息是否@了自己
Since 2.1.0
message.isAtMe()
返回
boolean true - atList中包含了自己, false - atList中不包含自己
判斷消息是否是@全體成員
Since 2.2.0
message.isAtAll()
返回
boolean true - 是@全體成員, false - 不是@全體成員
獲取消息中@的群成員列表
Since 2.1.0
message.getAtUserList(GetUserInfoListCallback callback)
參數說明
GetUserInfoListCallback callback 獲取用戶列表的回調接口。注意當這條消息是一條@全體成員的消息時,此接口將返回空。
代碼示例
//消息發送方
Conversation conv = Conversation.createGroupConversation(gid);
GroupInfo groupInfo = (GroupInfo) conv.getTargetInfo();
List atList = new ArrayList();
atList.add(groupInfo.getGroupMember("user1", appkey).getUserInfo());//獲取到被@的群成員的userinfo,并填充到atList中去。
atList.add(groupInfo.getGroupMember("user2", appkey).getUserInfo());
//創建一條帶有atList的消息。
Message msg = conv.createSendMessage(new TextContent("a message with atList!"), atList, null);
JMessageClient.sendMessage(msg);//發送消息
//消息接收方
public void onEvent(MessageEvent event){
Message msg = event.getMessage();//收到消息事件,從消息事件中拿到消息對象
msg.isAtMe(); //判斷這條消息是否@了我
//獲取消息中包含的完整的atList
msg.getAtUserList(new GetUserInfoListCallback() {
@Override
public void gotResult(int responseCode, String responseMessage, List userInfoList) {
if(responseCode == 0){
//獲取atList成功
}else{
//獲取atList失敗
}
}
});
}
入群申請和審批
申請入群和審批,適用于公開群組。
申請入群
Since 2.4.0
/**
* 申請加入群組,只有公開群組(公開群組定義參考{@link JMessageClient#createPublicGroup(String, String, CreateGroupCallback)}),
* 才能發送入群申請
*
* @param groupID 申請加入群組的gid
* @param reason 申請理由,可為null
* @param callback
* @since 2.4.0
*/
JMessageClient.applyJoinGroup(long groupID, String reason, BasicCallback callback);
群成員審批事件
Since 2.4.0
GroupApprovalEvent
群成員審批事件,收到群成員審批通知時,sdk將會拋出此事件通知上層。
具體處理方法見事件處理一節。
已審批事件通知
Since 2.5.0
GroupApprovedNotificationEvent
群成員審批事件已經被審批通知事件,當有一個群管理員或群主審批過群成員審批事件,sdk將會拋出此事件通知上層,
只有該審批事件對應群的群主和群管理員會收到此事件。具體處理方法見事件處理一節
入群審批
Since 2.4.0
通過接收到的群成員審批事件進行審批操作,審批不能多人操作,當一人同意或拒絕后其他管理者或群主收到已審批事件通知
/**
* 入群審批同意,操作成功后,群內所有成員包括被審批人自己都會收到一個包含群成員變化的EventNotification類型的消息
*
* @param username 被同意加入群組用戶的username
* @param appKey 被同意入群者的appKey,若傳入空則默認使用本應用的appKey
* @param callback 操作結果回調
*/
groupApprovalEvent.acceptGroupApproval(String username, String appKey, final BasicCallback callback);
/**
* 入群審批拒絕,操作成功后,該次審批請求的發起方(Type為{@link Type#apply_join_group}時是申請人 Type為{@link Type#invited_into_group}時是邀請人)
* 會收到一個審批拒絕通知事件{@link GroupApprovalRefuseEvent}
*
* @param username 被拒絕加入群組用戶的username
* @param appKey 被拒絕入群者的appKey, 若傳入空則默認使用本應用的appKey
* @param reason 拒絕理由,可填null
* @param callback 操作結果回調
*/
groupApprovalEvent.refuseGroupApproval(String username, String appKey, String reason, BasicCallback callback);
入群審批審批事件批量同意
Since 2.6.1
/**
* 批量同意審批事件內所有成員進群.
*
* 操作成功后,事件GroupApprovalEvent對象內包含的所有待審批的用戶都會被批準入群。之后,
* 群內所有成員包括被審批人自己都會收到一個包含群成員變化的EventNotification類型的消息
*
* @param events 待處理的事件對象集合
* @param sendNotify 預留字段,暫時無用
* @param callback 操作結果回調
* @since 2.6.1
*/
GroupApprovalEvent.acceptGroupApprovalInBatch(Collection events, boolean sendNotify, BasicCallback callback);
群成員審批拒絕事件
Since 2.4.0
GroupApprovalRefuseEvent
群成員審批拒絕通知事件,收到群成員審批拒絕通知時,sdk將會拋出此事件通知上層,具體處理方法見事件處理一節
入群審批代碼示例:
//申請入群
JMessageClient.applyJoinGroup(Long.parseLong(mEt_groupID.getText().toString()), reason, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
mProgressDialog.dismiss();
if (responseCode == 0) {
Toast.makeText(ApplyJoinGroupActivity.this, "申請成功", Toast.LENGTH_SHORT).show();
} else {
Log.d(TAG, "apply failed. code :" + responseCode + " msg : " + responseMessage);
Toast.makeText(ApplyJoinGroupActivity.this, "申請失敗", Toast.LENGTH_SHORT).show();
}
}
});
//入群審批
event.acceptGroupApproval(username, appKey, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (0 == responseCode) {
Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_SHORT).show();
} else {
Log.i(TAG, "acceptApplyJoinGroup failed,"+ " code = " + responseCode + ";msg = " + responseMessage);
Toast.makeText(getApplicationContext(), "添加失敗", Toast.LENGTH_SHORT).show();
}
}
}); //入群審批同意
event.refuseGroupApproval(username, appKey, reason, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (0 == responseCode) {
Toast.makeText(getApplicationContext(), "拒絕成功", Toast.LENGTH_SHORT).show();
} else {
Log.i(TAG, "refuseApplyJoinGroup failed,"+ " code = " + responseCode + ";msg = " + responseMessage);
Toast.makeText(getApplicationContext(), "拒絕失敗", Toast.LENGTH_SHORT).show();
}
}
}); //入群審批拒絕
GroupApprovalEvent.acceptGroupApprovalInBatch(events, false, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
textView.append("批量審批請求發送完成。 responseCode = " + responseCode + " responseMessage = " + responseMessage + "\n");
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
events.clear();
}
}); // 入群審批批量同意
群成員禁言
Since 2.4.0
2.4.0版本新增群成員禁言狀態設置,禁言后用戶可正常接收消息,但無法向被禁言的群組中發送消息,解禁后可正常發送消息。
2.4.0老接口廢棄,請使用2.8.2新接口
群成員禁言狀態設置
Since 2.8.2
/**
* 設置群成員禁言(可設置禁言時間,批量設置一次最多500個),群主和管理員可以禁言普通群成員,
* 群主和管理員不能被禁言,重復調用此接口將根據當前時間重新計算結束時間。
* 禁言后用戶可正常接收消息,但無法向被禁言的群組中發送消息,禁言成功后會以系統消息形式通知群內成員
* @param userInfos 將要被禁言的用戶信息,size <= 500
* @param silenceTime 禁言時間,單位:毫秒, 禁言時間最少5分鐘(300000毫秒),最長一年(31536000000毫秒),即300000 <= times <= 31536000000
* @param callback 禁言結果回調
* @since 2.8.2
*/
groupInfo.addGroupSilenceWithTime(Collection userInfos, long silenceTime, BasicCallback callback);
獲取禁言列表
Since 2.8.2
/**
* 獲取群禁言列表,排序規則以添加入禁言的先后的時間倒序排序(后加入的在前)
* @param callback 結果回調
* @since 2.8.2
*/
groupInfo.getGroupSilenceList(RequestCallback> callback);
查詢用戶禁言狀態
Since 2.8.2
/**
* 查詢群內用戶的禁言狀態,如果用戶未處于禁言狀態,回調中SilenceInfo為null
* @param name 群成員的username
* @param appkey 群成員的appKey,傳入空則默認使用本應用appKey
* @param callback 回調,如果用戶未處于禁言狀態,回調中SilenceInfo為null
* @since 2.8.2
*
*/
groupInfo.getGroupMemberSilence(String name, String appkey, RequestCallback callback);
群成員禁言相關代碼示例
//設置群成員禁言狀態
GroupMemberInfo memberInfo = groupInfo.getGroupMember(mNames, mAppKey);
UserInfo userInfo = memberInfo != null ? memberInfo.getUserInfo() : null;
if (userInfo != null) {
List userInfos = Collections.singletonList(userInfo);
SetSilenceCallback callback = new SetSilenceCallback(keepSilence);
if (keepSilence) {
groupInfo.addGroupSilenceWithTime(userInfos, silenceTime, callback);
} else {
groupInfo.delGroupSilence(userInfos, callback);
}
} else {
mProgressDialog.dismiss();
Toast.makeText(getApplicationContext(), "用戶信息獲取失敗", Toast.LENGTH_SHORT).show();
}
//獲取群成員禁言列表
groupInfo.getGroupSilenceList(new RequestCallback>() {
@Override
public void gotResult(int responseCode, String responseMessage, List result) {
if (0 == responseCode) {
StringBuilder sb = new StringBuilder();
for (SilenceInfo silenceInfo : result) {
sb.append(silenceInfo.getUserInfo().getUserName())
.append(", begin:" + silenceInfo.getSilenceStartTime())
.append(", end:" + silenceInfo.getSilenceEndTime())
.append("\n");
}
mTv_showSilenceInfo.append("群成員禁言信息列表(這里獲取name,需要其他信息請自行獲取):\n" + sb.toString());
Toast.makeText(getApplicationContext(), "獲取成功", Toast.LENGTH_SHORT).show();
} else {
Log.i(TAG, "getGroupSilenceList" + ", responseCode = " + responseCode + " ; Desc = " + responseMessage);
Toast.makeText(getApplicationContext(), "獲取失敗", Toast.LENGTH_SHORT).show();
}
}
});
//獲取用戶禁言狀態
groupInfo.getGroupMemberSilence(mNames, mAppKey, new RequestCallback() {
@Override
public void gotResult(int responseCode, String responseMessage, SilenceInfo result) {
mProgressDialog.dismiss();
if (responseCode == 0) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("用戶:" + mNames);
if (result == null) {
stringBuilder.append(", 沒有被禁言");
} else {
stringBuilder.append(", 已被禁言\n")
.append("禁言開始時間:").append(result.getSilenceStartTime()).append("\n")
.append("禁言結束時間:").append(result.getSilenceEndTime()).append("\n");
}
mTv_showSilenceInfo.setText(stringBuilder);
} else {
Log.i(TAG, "getGroupMemberSilence" + ", responseCode = " + responseCode + " ; Desc = " + responseMessage);
Toast.makeText(getApplicationContext(), "獲取失敗", Toast.LENGTH_SHORT).show();
}
}
});
群公告
發布群公告
Since 2.8.0
/**
* 發布群公告(只有群主和管理員有權限發送),選擇是否向群中發布消息,sendMessage為true代表發送,false不發送
* 注意只有發送公告成功時才會向群中發布消息,創建的消息在回調中返回,如果發送公告失敗或者創建消息失敗則回調中message為null。
* 消息的發送是否成功可以通過{@link cn.jpush.im.android.api.enums.MessageStatus}判斷,
*
Message的extra里帶有公告的實現,key為""jmessage_group_announcement", value為jsonString:
*
* {"id": 公告id,"text":"公告內容text,"publisher_uid":發布者uid,"ctime" : 公告發布時間,"gid":群組id}
*
* 獲取方式如下:
*
* String announceJson = message.getContent.getStringExtras("jmessage_group_announcement");
*
* 可自己通過字段去解析json字符串,也可通過{@link GroupAnnouncement#fromJson(String)}得到公告對象
* 如果needSendMessage為false, 回調中message一直為null。
* 群公告最多100條,超過老的將會被刪除,發布群公告成功時群內所有人會收到{@link cn.jpush.im.android.api.event.GroupAnnouncementChangedEvent}
* @param text 公告內容字節數不能超過1K(utf-8)
* @param needSendMessage 是否需要發送消息
* @param callback PublishAnnouncementCallback 回調中包含創建的公告和消息
* @since 2.8.0
*/
groupInfo.publishGroupAnnouncement(String text, Boolean needSendMessage, PublishAnnouncementCallback callback);
獲取群公告
Since 2.8.0
/**
* 按照順序(置頂時間倒序,創建時間倒序)獲取群內所有公告.
*
* @param callback 回調,如果獲取成功但群沒有公告則返回一個empty list
* @since 2.8.0
*/
groupInfo.getAnnouncementsByOrder(RequestCallback> callback);
刪除群公告
Since 2.8.0
/**
* 刪除群內指定id的公告,只有群主和管理員有權限刪除
* 刪除群公告成功時群內所有成員會收到{@link cn.jpush.im.android.api.event.GroupAnnouncementChangedEvent}
*
* @param announceID 公告id 通過{@link GroupAnnouncement#getAnnounceID()}獲取
* @param callback 回調
* @since 2.8.0
*/
groupInfo.delGroupAnnouncement(int announceID, BasicCallback callback);
置頂群公告
Since 2.8.0
/**
* 設置置頂狀態,本設置為改變置頂狀態和置頂時間,同時會導致公告的排序發生改變{@link #getAnnouncementsByOrder(RequestCallback)}
* 設置成功時,群內所有成員會收到{@link cn.jpush.im.android.api.event.GroupAnnouncementChangedEvent}
*
* @param announceID 公告id, 通過{@link GroupAnnouncement#getAnnounceID()}獲取
* @param isTop true置頂, false取消置頂
* @param callback 回調
* @since 2.8.0
*/
groupInfo.setTopAnnouncement(int announceID, boolean isTop, BasicCallback callback);
群公告相關代碼示例
// 發布群公告
String text = mEtText.getText().toString();
boolean needSendMessage = Boolean.valueOf(mEtSendMessage.getText().toString());
groupInfo.publishGroupAnnouncement(text, needSendMessage, new PublishAnnouncementCallback() {
@Override
public void gotResult(int responseCode, String responseMessage, GroupAnnouncement announcement, Message message) {
if (ErrorCode.NO_ERROR == responseCode) {
Toast.makeText(getApplicationContext(), "發布公告成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "發布公告失敗", Toast.LENGTH_SHORT).show();
mTvResult.setText("responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
// 獲取群公告
groupInfo.getAnnouncementsByOrder(new RequestCallback>() {
@Override
public void gotResult(int responseCode, String responseMessage, List announcements) {
if (ErrorCode.NO_ERROR == responseCode) {
StringBuilder result = new StringBuilder();
for (GroupAnnouncement announcement : announcements) {
result.append("公告ID:" + announcement.getAnnounceID() + "\n");
result.append("公告內容:" + announcement.getText() + "\n");
result.append("公告創建時間:" + announcement.getCtime() + "\n");
result.append("公告是否置頂:" + announcement.isTop() + "\n");
result.append("公告置頂時間:" + announcement.getTopTime() + "\n");
result.append("公告發布者(username):" + announcement.getPublisher().getUserName() + "\n\n");
}
Toast.makeText(getApplicationContext(), "獲取公告成功", Toast.LENGTH_SHORT).show();
mTvResult.setText(result.toString());
} else {
Toast.makeText(getApplicationContext(), "獲取公告失敗", Toast.LENGTH_SHORT).show();
mTvResult.setText("responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
// 刪除群公告
try {
int announceID = Integer.valueOf(mEtAnnounceID.getText().toString());
groupInfo.delGroupAnnouncement(announceID, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (ErrorCode.NO_ERROR == responseCode) {
Toast.makeText(getApplicationContext(), "刪除公告成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "刪除公告失敗", Toast.LENGTH_SHORT).show();
mTvResult.setText("responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
} catch (NumberFormatException e) {
Toast.makeText(getApplicationContext(), "請輸入合法公告ID", Toast.LENGTH_SHORT).show();
}
// 置頂群公告
try {
int announceID = Integer.valueOf(mEtAnnounceID.getText().toString());
groupInfo.setTopAnnouncement(announceID, isTop, new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
StringBuilder result = new StringBuilder();
result.append(isTop ? "置頂" : "取消置頂");
if (ErrorCode.NO_ERROR == responseCode) {
result.append("成功");
Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_SHORT).show();
} else {
result.append("失敗");
Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_SHORT).show();
mTvResult.setText("responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
} catch (NumberFormatException e) {
Toast.makeText(getApplicationContext(), "請輸入合法公告ID", Toast.LENGTH_SHORT).show();
}
群組黑名單
群黑名單用以屏蔽某些不良用戶, 被加入黑名單的用戶無法再次加入該群組除非從黑名單中移除,如果被加入黑名單的用戶已經在群中會被踢出群。
將用戶添加至黑名單
Since 2.8.0
/**
* 將用戶加到群組黑名單,只有群主和管理員有此權限, 被加入黑名單的用戶如果在群內會被踢出群組,黑名單中的用戶無法再加入群組
* 操作成功后群內成員將收到群黑名單變更事件{@link cn.jpush.im.android.api.event.GroupBlackListChangedEvent}
*
* @param userInfos 準備加入黑名單的用戶userInfo集合
* @param callback 回調
* @since 2.8.0
*/
groupInfo.addGroupBlacklist(List userInfos, BasicCallback callback);
將用戶從群組黑名單中移除
Since 2.8.0
/**
* 將用戶從群組黑名單中移除,只有群主和管理員有此權限.
* 操作成功后群內成員將收到群黑名單變更事件{@link cn.jpush.im.android.api.event.GroupBlackListChangedEvent}
*
* @param userInfos 準備移出黑名單的用戶userInfo集合
* @param callback 回調
* @since 2.8.0
*/
groupInfo.delGroupBlacklist(List userInfos, BasicCallback callback);
獲取群組黑名單用戶列表
Since 2.8.0
/**
* 獲取群組的黑名單用戶列表, 按照被拉黑時間倒序排列
*
* @param callback 回調
* @since 2.8.0
*/
groupInfo.getGroupBlackList(RequestCallback> callback);
群組黑名單代碼相關示例
// 將用戶加到群組黑名單
groupInfo.addGroupBlacklist(Collections.singletonList(info), new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (ErrorCode.NO_ERROR == responseCode) {
Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "添加失敗", Toast.LENGTH_SHORT).show();
mTvShowResult.setText("添加用戶到黑名單失敗:\n" + "responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
// 將用戶從群組黑名單中移除
groupInfo.delGroupBlacklist(Collections.singletonList(info), new BasicCallback() {
@Override
public void gotResult(int responseCode, String responseMessage) {
if (ErrorCode.NO_ERROR == responseCode) {
Toast.makeText(getApplicationContext(), "移除成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "移除失敗", Toast.LENGTH_SHORT).show();
mTvShowResult.setText("將用戶從黑名單中移除失敗:\n" + "responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
// 獲取群組黑名單用戶列表
groupInfo.getGroupBlackList(new RequestCallback>() {
@Override
public void gotResult(int responseCode, String responseMessage, List result) {
if (ErrorCode.NO_ERROR == responseCode) {
Toast.makeText(getApplicationContext(), "獲取成功", Toast.LENGTH_SHORT).show();
StringBuilder builder = new StringBuilder();
if (result.size() > 0) {
builder.append("群組黑名單:\n");
for (UserInfo userInfo : result) {
builder.append("用戶名:").append(userInfo.getUserName()).append("\n");
builder.append("appKey:").append(userInfo.getAppKey()).append("\n\n");
}
} else {
builder.append("群組的黑名單為空");
}
mTvShowResult.setText(builder.toString());
} else {
Toast.makeText(getApplicationContext(), "獲取失敗", Toast.LENGTH_SHORT).show();
mTvShowResult.setText("獲取群黑名單失敗:\n" + "responseCode:" + responseCode + "\nresponseMessage:" + responseMessage);
}
}
});
群組免打擾
群組免打擾參考用戶信息管理免打擾設置一節
總結
以上是生活随笔為你收集整理的android 群组消息,极光IM- 群组管理 - 极光文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 管道和过滤器模式
- 下一篇: 四则运算java_小学生四则运算JAVA