ZEGO 提供 ZIM + RTC 服務聯動的場景解決方案,公開語聊房、秀場直播等業務場景搭建的示例原始碼,幫助開發者能在極短的時間內搭建完美的業務場景,
ZIM SDK 提供了如下接入方案:

在此方案中,您需要通過您自己的業務系統實作以下業務邏輯:
- 搭建客戶端的用戶管理邏輯,并下發用戶 ID 用于客戶端登錄,
- 鑒權 Token,建議由您的業務后臺自行實作,保證鑒權資料安全,
2 前提條件
在使用 ZIM SDK 前,請確保:
- 開發環境滿足以下要求:
- Android Studio 2.1 或以上版本,
- Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本,
- Android 9.0 或以上版本,且支持音視頻的 Android 設備或模擬器(推薦使用真機),
- 已在 ZEGO 控制臺 創建專案,獲取到了接入 ZIM SDK 服務所需的
AppID和ServerSecret,ZIM 服務權限不是默認開啟的,使用前,請先在 ZEGO 控制臺 自助開通 ZIM 服務(詳情請參考 專案管理 - 即時通訊)、或聯系 ZEGO 技術支持開通, - 已獲取登錄 SDK 所需的 Token,詳情請參考 使用 Token 鑒權,
3 集成 SDK
3.1 新建專案
-
打開 Android Studio,選擇 “File > New > New Project” 選單,

-
填寫專案名及專案存盤路徑,

-
其它按照默認設定,單擊 “Next”,最后單擊 “Finish” 完成新工程創建,
3.2 匯入 SDK
目前支持的平臺架構包括:arm64-v8a、armeabi-v7a、x86、x86_64,
開發者可通過以下任意一種方式實作集成 SDK,
方式一:使用 JitPack 自動集成 SDK
-
進入專案根目錄,打開 “build.gradle” 檔案,在 “allprojects” 中加入如下代碼,
... allprojects { repositories { maven { url 'https://www.jitpack.io' } google() jcenter() } } -
進入 “app” 目錄,打開 “build.gradle” 檔案,在 “dependencies” 中添加
implementation 'com.github.zegolibrary:zim:x.y.z',“x.y.z” 為 SDK 的版本號,請參考 發布日志 中的發布歷史獲取,... dependencies { ... // x.y.z 請填寫具體版本號,如:1.2.0 // 可通過 SDK 發布歷史取得最新版本號 implementation 'com.github.zegolibrary:zim:x.y.z' }
方式二:復制 SDK 檔案手動集成
-
請參考 下載 SDK,下載最新版本的 SDK,
-
將 SDK 包解壓至專案目錄下,例如 “app/libs”,

-
添加 SDK 參考,進入到 “app” 目錄,打開 “build.gradle” 檔案,
- 在 “defaultConfig” 節點添加 “ndk” 節點,指定支持的平臺型別,

ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64', 'x86' }- 在 “android” 節點添加 “sourceSets” 節點,指定 “libs” 所在目錄,
示例代碼中 “libs” 目錄僅為舉例,開發者可根據實際路徑填寫,
- 在 “defaultConfig” 節點添加 “ndk” 節點,指定支持的平臺型別,

```gradle
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
```
* 在 “dependencies” 節點引入 “libs” 下所有的 jar,

```gradle
implementation fileTree(dir: 'libs', include: ['*.jar'])
```
3.3 設定權限
開發者可以根據實際應用需要,設定應用所需權限,
進入 “app/src/main” 目錄,打開 “AndroidManifest.xml” 檔案,添加權限,
<!-- SDK 必須使用的權限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3.4 防止混淆代碼
在 “proguard-rules.pro” 檔案中,為 SDK 添加 -keep 類的配置,防止混淆 SDK 公共類名稱,
-keep class **.zego.**{*;}
4 實作基本收發訊息
以下流程中,我們以客戶端 A 和 B 的訊息互動為例:

4.1 實作流程
請參考 跑通示例原始碼 獲取原始碼,相關功能的原始碼請查看 “app/src/main/java/im/zego/zimexample/ui/room/ZIMPeerSessionActivity” 目錄下的檔案,
1. 匯入類檔案
在專案檔案中引入類檔案,
import im.zego.zim.ZIM;
2. 創建 ZIM 實體
首先我們需要在 SDK 中創建 ZIM 實體,一個實體對應的是一個用戶,表示一個用戶以客戶端的身份登錄系統,
例如,客戶端 A、B 分別呼叫 create 介面,傳入在 2 前提條件 中獲取到的 AppID,創建了 A、B 的實體:
// 創建 ZIM 物件,傳入 APPID 與 Android 中的 Application
zim = ZIM.create(appID, application);
ZIM 創建單例的示例
由于大多數開發者,在整個流程中,只需要將 ZIM 實體化一次,因此 ZEGO 建議您將 ZIM 單例化并保存,
創建一個 SDKManager 類,在該類中宣告并實作了一個 “sharedInstance” 靜態方法,該方法將會在首次呼叫時創建并回傳一個 SDKManager 的物件,在該物件中呼叫 ”create“,此后在專案的任意位置匯入 SDKManager 類,呼叫 “SDKManager.sharedInstance().zim” 將會回傳 zim 物件,
public class SDKManager {
private static SDKManager sdkManager;
public ZIM zim;
public static SDKManager sharedInstance() {
if (sdkManager == null) {
synchronized (SDKManager.class) {
if (sdkManager == null) {
sdkManager = new SDKManager();
}
}
}
return sdkManager;
}
public void create(Application application) {
zim = ZIM.create(ZegoAppID.appID, application);
}
}
3. 設定 setEventHandler 回呼
在客戶端登錄前,開發者可以通過呼叫 setEventHandler 介面,自定義 ZIM 中的事件回呼,接收到 SDK 例外、訊息通知回呼等的通知,
zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onReceivePeerMessage(ZIM zim, ArrayList<ZIMMessage> messageList, String fromUserID) {
// 收到“單聊”通信的訊息回呼
}
});
4. 登錄 ZIM
創建實體后,客戶端 A 和 B 需要登錄 ZIM,只有登錄成功后才可以開始發送、接收訊息、更新 Token 等,
客戶端需要使用各自的用戶資訊和 Token 進行登錄,呼叫 login 介面進行登錄,傳入用戶資訊 ZIMUserInfo 物件,以及在 2 前提條件 中獲取到的 Token 進行鑒權,鑒權通過后才能登錄成功,
- “userID”、“userName” 支持開發者自定義規則生成,建議開發者將 “userID” 設定為一個有意義的值,可將其與自己的業務賬號系統進行關聯,
- 如果 Token 過期,需要在
tokenWillExpire即將過期回呼介面中,呼叫renewToken介面,更新 Token 后才能正常使用 SDK,
// 登錄時,需要開發者 按照 "使用 Token 鑒權" 檔案生成 token 即可
// userID 和 userName,最大 32 位元組的字串,僅支持數字,英文字符 和 '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '`', ';', '’', ',', '.', '<', '>', '/', '\',
ZIMUserInfo zimUserInfo = new ZIMUserInfo();
zimUserInfo.userID = userID;
zimUserInfo.userName = userName;
zim.login(zimUserInfo, token, new ZIMLoggedInCallback() {
@Override
public void onLoggedIn(ZIMError error) {
// 開發者可根據 ZIMError 來判斷是否登錄成功,
}
});
5. 發送單聊訊息
客戶端 A 登錄成功后,可以向客戶端 B 發送訊息,
目前 ZIM 支持的訊息型別如下:
| 訊息型別 | 說明 | 特性及適用場景 |
|---|---|---|
| ZIMTextMessage(1) | 文本訊息,訊息大小不超過 32 KB,單個客戶端發送頻率限制為 10 次/秒, | 訊息可靠有序,可存盤為歷史訊息;一般適用于“單聊”、“群聊”等即時聊天的場景, |
| ZIMCommandMessage(2) | 開發者可自定義資料型別的信令訊息,訊息大小不超過 5 KB,單個客戶端發送頻率限制為 10 次/秒, | 支持更高的并發;一般適用于“語聊房”、“在線課堂”等房間內的即時聊天;房間解散后,訊息不保存, |
| ZIMBarrageMessage(20) | 房間內彈幕文本訊息,訊息大小不超過 5 KB,單個客戶端發送頻率無限制, | 專門用于房間內的高頻、不可靠、允許丟掉的訊息,一般適用于發送“彈幕訊息”的場景中, 支持高并發,但不可靠,不保證訊息送達, |
客戶端 A 可以呼叫 sendPeerMessage 介面,傳入客戶端 B 的 userID、訊息內容等資訊,即可發送一條訊息到 B 的客戶端,同時可以通過 onMessageSent 介面的回呼資訊,判斷訊息是否發送成功,
// 發送“單聊”通信的資訊
String toUserID = "xxxx";
ZIMTextMessage zimMessage = new ZIMTextMessage();
zimMessage.message = "訊息內容";
ZIMMessageSendConfig config = new ZIMMessageSendConfig();
// 訊息優先級,取值為 低:1 默認,中:2,高:3
config.priority = ZIMMessagePriority.LOW;
// 設定訊息的離線推送配置
ZIMPushConfig pushConfig = new ZIMPushConfig();
pushConfig.title = "離線推送的標題";
pushConfig.content= "離線推送的內容";
pushConfig.extendedData = "https://www.cnblogs.com/zegodeveloper/archive/2022/07/06/離線推送的擴展資訊";
config.pushConfig = pushConfig;
zim.sendPeerMessage(zimMessage, toUserID, config, new ZIMMessageSentCallback() {
@Override
public void onMessageSent(ZIMMessage zimMessage, ZIMError error) {
// 開發者可以通過該回呼監聽訊息是否發送成功,
}
});
6. 接收單聊訊息
客戶端 B 登錄 ZIM 后,將會收到在 setEventHandler 回呼中設定的 onReceivePeerMessage 監聽介面,收到客戶端 A 發送過來的訊息,
收到訊息時,由于型別是基類,首先需要判斷訊息型別是 Text 還是 Command,開發者需要強轉基類為具體的子類,然后從 message 欄位獲取訊息內容,
zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onReceivePeerMessage(ZIM zim, ArrayList<ZIMMessage> messageList, String fromUserID) {
for (ZIMMessage zimMessage : messageList) {
if (zimMessage instanceof ZIMTextMessage)
{
ZIMTextMessage zimTextMessage = (ZIMTextMessage) zimMessage;
Log.e(TAG, "收到的訊息:"+ zimTextMessage.message);
}
}
}
});
7. 退出登錄
如果客戶端需要退出登錄,直接呼叫 logout 介面即可,
zim.logout();
8. 銷毀 ZIM 實體
如果不需要 ZIM 實體,可直接呼叫 destroy 介面,銷毀實體,
zim.destroy();
4.2 API 時序圖
通過以上的實作流程描述,API 介面呼叫時序圖如下:

獲取更多ZEGO SDK技術支持:
- ZIM不僅具備全平臺互動、訊息海量并發、合規安全可靠等產品特性,同時還可結合即構 RTC
SDK實作各類音視頻場景的用戶互動,滿足Avatar , 直播,語聊房等實時互動場景, - 七周年福利:提交表單聯系商務,有機會獲取即構IM1個月免費試用,;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/499216.html
標籤:其他
下一篇:AndroidUI繪制流程
