日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Android端集成

更新時(shí)間:

互動(dòng)消息是用于加強(qiáng)直播間消息溝通、提升交互體驗(yàn)的服務(wù)。提供了豐富、易集成的SDK,可在用戶開(kāi)發(fā)的直播應(yīng)用中輕松集成評(píng)論、彈幕、點(diǎn)贊等能力。本文介紹Android端集成互動(dòng)消息應(yīng)用的操作步驟。

前提條件

客戶端集成前,請(qǐng)確保已完成服務(wù)端集成,并提供客戶端訪問(wèn)的獲取鑒權(quán)Token的接口。詳細(xì)操作,請(qǐng)參見(jiàn)服務(wù)端集成

環(huán)境要求

  • Android 5.0(SDK API Level 21)及以上版本。

  • Android Studio 4.0以及以上版本。

集成SDK

  1. 添加Maven倉(cāng)庫(kù)。

    repositories {
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases' }
    }
  2. 添加SDK依賴。

       // 互動(dòng)庫(kù)
       implementation "com.aliyun.sdk.android:AliVCInteractionMessage:1.3.2"
  3. 配置AndroidManifest.xml權(quán)限。

       <uses-permission android:name="android.permission.INTERNET" />
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

使用SDK

SDK使用需遵循如下操作順序:

  1. 初始化

  2. 登錄

  3. 相關(guān)操作

  4. 登出

  5. 反初始化

其中相關(guān)操作包含群組操作和消息操作,詳細(xì)說(shuō)明如下:

相關(guān)操作

  • 群組操作

    • 創(chuàng)建群組(需要以管理員身份進(jìn)行登錄才能操作)

    • 關(guān)閉群組(僅限群主/群管理員操作)

    • 進(jìn)入群組

    • 離開(kāi)群組

    • 查詢?nèi)航M信息

    • 修改群組消息(僅限群主/群管理員操作)

    • 查詢?nèi)航M最近成員列表

    • 查詢?nèi)航M全部成員(僅限群主/群管理員操作)

    • 對(duì)群組進(jìn)行禁言(僅限群主/群管理員操作)

    • 對(duì)群組取消禁言(僅限群主/群管理員操作)

    • 對(duì)群組的用戶進(jìn)行禁言(僅限群主/群管理員操作)

    • 對(duì)群組的用戶取消禁言(僅限群主/群管理員操作)

    • 查詢?nèi)航M內(nèi)被禁言的用戶列表(僅限群主/群管理員操作)

  • 消息操作

    • 單發(fā)消息

    • 群發(fā)消息

    • 查詢最近群發(fā)消息列表

    • 查詢?nèi)咳喊l(fā)消息(僅限群主/群管理員操作)

    • 刪除/撤回群消息

    • 查詢歷史消息

注意事項(xiàng)

各ID需遵循以下規(guī)則:

appid :最長(zhǎng)64位,僅限于A~Z,a~z, 0~9及“-”, 不能包含其他字符

userid:最長(zhǎng)64位,僅限于A~Z,a~z, 0~9及“-”, 不能包含其他字符

groupid:最長(zhǎng)64位,僅限于A~Z,a~z, 0~9及“-”, 不能包含其他字符

初始化

在App入口(如Application/Activity的onCreate中)進(jìn)行初始化配置。

 ImSdkConfig config = new ImSdkConfig();
 config.deviceId = "deviceId"; //[選填]
 config.appId = "appId"; //[必填],傳空會(huì)返回初始化失敗-2
 config.appSign = "appSign"; //[必填],傳空會(huì)返回初始化失敗-2
 // 初始化返回非0,表示初始化失敗,其中1001:重復(fù)初始化、1002:創(chuàng)建底層引擎失敗、-1:底層重復(fù)初始化、-2:初始化配置信息有誤
 int ret = AliVCIMEngine.instance().init(context, config);

監(jiān)聽(tīng)長(zhǎng)連接狀態(tài)

AliVCIMEngine.instance().addSdkListener(new ImSdkListener() {
    @Override
    public void onConnecting() {
        
    }
    @Override
    public void onConnectSuccess() {
    }
    @Override
    public void onConnectFailed(com.aliyun.im.common.Error error) {
    }
    @Override
    public void onDisconnect(int code) {
    }
    // 登錄token失效(如token過(guò)期)會(huì)通過(guò)該接口獲取新的token,務(wù)必實(shí)現(xiàn)該接口
    @Override
    public void onTokenExpired(ImTokenCallback callback) {
        // 第一步,實(shí)現(xiàn)新token的生成,若需要網(wǎng)絡(luò)請(qǐng)求等耗時(shí)操作,請(qǐng)務(wù)必拋到異步線程實(shí)現(xiàn);
        // 第二步,若token生成失敗,則通過(guò) callback.onError() 回調(diào)錯(cuò)誤信息;
        // 		若token生成成功,則通過(guò) callback.onSuccess() 回調(diào)token信息;
    }
    @Override
    public void onReconnectSuccess(ArrayList<ImGroupInfo> groupStatus) {
    }
});

登錄

ImLoginReq req = new ImLoginReq();

req.user.userId = userId;
//透?jìng)鳂I(yè)務(wù)額外信息
Map<String, Object> data = new HashMap<>();
data.put("level", "high");
req.user.userExtension = App.getGson().toJson(data).toString();

req.userAuth = new ImAuth(nonce,  timestamp, role, app_token);
AliVCIMEngine.instance().login(req, new ImSdkCallback());

其中role參數(shù),有兩種角色:

  • 管理員(值:admin)

    admin角色,可以創(chuàng)建/關(guān)閉群組,如果不需要可以設(shè)置為空。其中,非管理員的所有操作,管理員均能操作。

  • 非管理員(值:非admin)

登出

AliVCIMEngine.instance().logout();

反初始化

登出后進(jìn)行反初始化。

 AliVCIMEngine.instance().unInit();

消息服務(wù)

//消息服務(wù)
AliVCIMMessageInterface messageInterface = AliVCIMEngine.instance().getMessageManager();

非管理員操作

監(jiān)聽(tīng)消息

//監(jiān)聽(tīng)消息
messageInterface.addMessageListener(new ImMessageListener() {
    @Override
    public void onRecvC2cMessage(ImMessage msg) {
        
    }
    @Override
    public void onRecvGroupMessage(ImMessage msg, String groupId) {
    }

    @Override
    public void onDeleteGroupMessage(String msgId, String groupId) {
    }
});

發(fā)送C2C消息

ImSendMessageToUserReq req = new ImSendMessageToUserReq();
req.type = 88888;
req.data = "This is a test message";
req.receiverId = userInput.getText().toString();
// 需確保對(duì)方在線,否則會(huì)返回錯(cuò)誤碼424,此時(shí)建議待對(duì)方上線后再重發(fā)
messageInterface.sendC2cMessage(req, new ImSdkValueCallback<ImSendMessageToUserRsp>() {
    @Override
    public void onSuccess(ImSendMessageToUserRsp data) {
        Log.v(ImTag.TAG, "發(fā)送C2C消息成功:" + data.messageId);
    }
    @Override
    public void onFailure(Error error) {
        Log.v(ImTag.TAG, "發(fā)送C2C消息失敗:error" + error.code);
    }
});

在群組內(nèi)發(fā)送全員消息

ImSendMessageToGroupReq req = new ImSendMessageToGroupReq();
req.level = ImMessageLevel.HIGH;
req.type = 88888;
req.data = "a test";
req.groupId = groupId;
// 需確保已經(jīng)加入群成功(即在AliVCIMGroupInterface.joinGroup回調(diào)成功之后),再發(fā)送群組消息,否則會(huì)返回錯(cuò)誤碼425
messageInterface.sendGroupMessage(req, new ImSdkValueCallback<ImSendMessageToGroupRsp>() {
    @Override
    public void onSuccess(ImSendMessageToGroupRsp data) {
        Log.v(ImTag.TAG, "發(fā)送高優(yōu)先級(jí)群消息成功:" + data.messageId);
    }
    @Override
    public void onFailure(Error error) {
        Log.v(ImTag.TAG, "發(fā)送高優(yōu)先級(jí)群消息成功" + error.code);
    }
});

查詢最近消息列表

ImListRecentMessageReq req;
req.groupId = groupId;
messageInterface.listRecentMessage(req, new ImSdkValueCallback<ImListRecentMessageRsp>() {
    @Override
    public void onSuccess(ImListRecentMessageRsp data) {
    }
    @Override
    public void onFailure(com.aliyun.im.common.Error error) {
    }
});

查詢歷史消息

//該接口主要用戶直播結(jié)束后的歷史消息回放,用戶無(wú)需進(jìn)入群組可查詢,比較耗時(shí),在直播過(guò)程中不建議使用,另外該接口后續(xù)會(huì)收費(fèi)。
ImListHistoryMessageReq req = new ImListHistoryMessageReq();
req.groupId = "群ID";
req.nextPageToken = 231231;  //不傳時(shí)表示第一頁(yè),遍歷時(shí)服務(wù)端會(huì)返回下一頁(yè)Token,客戶端獲取下一頁(yè)時(shí)應(yīng)帶上
req.type = 99999;            // 自定義消息類型,需大于10000
req.sortType = ImSortType.ASC;
req.pageSize = 20;
req.beginTime = 0; // 按時(shí)間范圍遍歷,開(kāi)始時(shí)間,單秒,為0時(shí)表示最早時(shí)間
req.endTime = 0;   // 按時(shí)間范圍遍歷,結(jié)束時(shí)間,單秒,為0時(shí)表示最晚時(shí)間
messageInterface.listHistoryMessage(req, new ImSdkValueCallback<ImListHistoryMessageRsp>() {
    @Override
    public void onSuccess(ImListHistoryMessageRsp rsp) {
    }
    @Override
    public void onFailure(Error error) {
    }
});

刪除消息

ImDeleteMessageReq req = new ImDeleteMessageReq();
req.groupId = "群ID";
req.messageId = "消息ID";
messageInterface.deleteMessage(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
                
    }

    @Override
    public void onFailure(Error error) {

    }
});

管理員操作

查詢消息列表

//該接口(僅限群主/群管理員操作)
ImListMessageReq req = new ImListMessageReq();
req.groupId = "群ID";
req.nextPageToken = 231231;  //不傳時(shí)表示第一頁(yè),遍歷時(shí)服務(wù)端會(huì)返回下一頁(yè)Token,客戶端獲取下一頁(yè)時(shí)應(yīng)帶上
req.type = 99999;            // 自定義消息類型,需大于10000
req.sortType = ImSortType.ASC;
req.pageSize = 20;
req.beginTime = 0; // 按時(shí)間范圍遍歷,開(kāi)始時(shí)間,單秒,為0時(shí)表示最早時(shí)間
req.endTime = 0;   // 按時(shí)間范圍遍歷,結(jié)束時(shí)間,單秒,為0時(shí)表示最晚時(shí)間
messageInterface.listMessage(req, new ImSdkValueCallback<ImListMessageRsp>() {
    @Override
    public void onSuccess(ImListMessageRsp rsp) {
    }
    @Override
    public void onFailure(Error error) {
    }
});

群組服務(wù)

//群組服務(wù)
AliVCIMGroupInterface groupInterface = AliVCIMEngine.instance().getGroupManager();

非管理員操作

監(jiān)聽(tīng)群組狀態(tài)

//監(jiān)聽(tīng)群組
groupManager.addGroupListener(new ImGroupListener() {
    @Override
    public void onMemberChange(String groupId, int memberCount, ArrayList<ImUser> joinUsers, ArrayList<ImUser> leaveUsers) {
        
    }
    @Override
    public void onExit(String groupId, int reason) {
    }
    @Override
    public void onMuteChange(String groupId, ImGroupMuteStatus status) {
    }
    @Override
    public void onInfoChange(String groupId, ImGroupInfoStatus info) {
    }
});

加入群組

ImJoinGroupReq req = new ImJoinGroupReq();
req.groupId = groupId;
groupInterface.joinGroup(req, new ImSdkValueCallback<ImJoinGroupRsp>() {
    @Override
    public void onSuccess(ImJoinGroupRsp data) {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

離開(kāi)群組

ImLeaveGroupReq req = new ImLeaveGroupReq();
req.groupId = groupId;
groupInterface.leaveGroup(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

查看最近群組成員

ImListRecentGroupUserReq req = new ImListRecentGroupUserReq();
req.groupId = groupId;
groupManager.listRecentGroupUser(req, new ImSdkValueCallback<ImListRecentGroupUserRsp>() {
    @Override
    public void onSuccess(ImListRecentGroupUserRsp data) {
    }
    @Override
    public void onFailure(Error error) {
    }
});

管理員操作

創(chuàng)建群組

ImCreateGroupReq req = new ImCreateGroupReq();
req.groupName = "羽毛球群";
Map<String, Object> data = new HashMap<>();
data.put("desc", "一三五晚8-10");
req.groupMeta = App.getGson().toJson(data).toString();
groupInterface.createGroup(req, new ImSdkValueCallback<ImCreateGroupRsp>() {
    @Override
    public void onSuccess(ImCreateGroupRsp data) {
        Log.v(ImTag.TAG, "Create Group Success:" + data.groupId);
        
    }
    @Override
    public void onFailure(com.aliyun.im.common.Error error) {
        Log.v(ImTag.TAG, "Create Group Failure:" + error.getCode());
    }
});

刪除群組

ImCloseGroupReq req = new ImCloseGroupReq();
req.groupId = groupId;
groupInterface.closeGroup(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

修改群組

ImModifyGroupReq req = new ImModifyGroupReq();
req.groupId = groupId;
req.admins.add(adminUserId);//指定群管理員ID列表,最多設(shè)置3個(gè)管理員;若需要清空列表,則配置空列表或者不設(shè)置,同時(shí)必須設(shè)置req.forceUpdateAdmins=true;
req.groupMeta = "群信息拓展字段";//添加群拓展信息;若需要清空,則配置空字符串或者不設(shè)置,同時(shí)必須設(shè)置req.forceUpdateGroupMeta=true;
groupInterface.modifyGroup(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

查詢?nèi)航M成員

ImListGroupUserReq req = new ImListGroupUserReq();
req.groupId = groupId;
req.sortType = ImSortType.ASC;
req.pageSize = 30;
groupManager.listGroupUser(req, new ImSdkValueCallback<ImListGroupUserRsp>() {
    @Override
    public void onSuccess(ImListGroupUserRsp data) {
    }
    @Override
    public void onFailure(Error error) {
    }
});

全體禁言

ImMuteAllReq req = new ImMuteAllReq();
req.groupId = groupId;
groupInterface.muteAll(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

取消禁言

ImCancelMuteAllReq req = new ImCancelMuteAllReq();
req.groupId = groupId;
groupInterface.cancelMuteAll(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

禁言指定用戶

ImMuteUserReq req = new ImMuteUserReq();
req.groupId = groupId;
req.userList.add(muteUserId);
groupInterface.muteUser(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

取消禁言

ImCancelMuteUserReq req = new ImCancelMuteUserReq();
req.groupId = groupId;
req.userList.add(muteUserId);
groupInterface.cancelMuteUser(req, new ImSdkCallback() {
    @Override
    public void onSuccess() {
        
    }

    @Override
    public void onFailure(Error error) {
	}
});

查詢禁言用戶

ImListMuteUsersReq req = new ImListMuteUsersReq();
req.groupId = groupId;
groupManager.listMuteUsers(req, new ImSdkValueCallback<ImListMuteUsersRsp>() {
    @Override
    public void onSuccess(ImListMuteUsersRsp data) {
        
    }
    @Override
    public void onFailure(Error error) {
    }
});