接入融雲
融雲SDK滿足 App 內的社交溝通需求,提供單群聊、超級群等多種聊天模式,支援紅包、圖片、語音和小視訊,實時訊息推送,高度自定義介面,高清音視訊通話,有效提升使用者粘性和活躍度,所以我用融雲。
新增應用
要接入第三方 SDK 都要在其開發者平臺註冊賬號,新增應用,稽核獲取 appkey secretkey。這樣子的流程。然後去看他的 SDK 接入指南。
開始
下載融雲 SDK,看你功能需要選擇下載。 http://www.rongcloud.cn/downloads
新建專案,引入融雲遠端庫,加入第三方庫
implementation 'cn.rongcloud.android:IMKit:2.8.6'
implementation 'cn.rongcloud.android:IMLib:2.8.6'
複製程式碼
把 下載好的 SDK 中 libs 裡面的檔案加入到專案lib裡面(armeabi裡面的libpush.so 以及libsqlite.so)
新建src/main/assets/ 並加入 SDK 裡面的 armeabi/push_deamon
Androidmanifest.xml 加入許可權
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 獲取機型資訊許可權 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<!-- 檢視 Wi-Fi 狀態 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 檢視網路狀態 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- 錄音 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 控制振動器 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 防止裝置休眠 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<!-- 獲取聯絡人資訊,demo 中演示傳送通訊錄訊息 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- ⼩米 配置開始 < -->
<permission
android:name="cn.rongcloud.im.permission.MIPUSH_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="cn.rongcloud.im.permission.MIPUSH_RECEIVE" />
<!-- ⼩米 配置結束 < -->
<!-- GCM 配置開始 < -->
<permission
android:name="cn.rongcloud.im.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="cn.rongcloud.im.permission.C2D_MESSAGE" />
<!-- GCM 配置結束 < -->
<!-- 華為 配置開始 < -->
<!--HMS-SDK 引導升級 HMS 功能,訪問 OTA 伺服器需要網路許可權 -->
<uses-permission android:name="android.permission.INTERNET" />
<!--HMS-SDK 引導升級 HMS 功能,儲存下載的升級包需要 SD 卡寫許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 檢測網路狀態 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 檢測 wifi 狀態 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 為了獲取使用者手機的 IMEI,用來唯一的標識使用者。-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 如果是安卓 8.0,應用編譯配置的 targetSdkVersion>=26,請務必新增以下許可權 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!-- 華為 配置結束 < -->
<!-- MeiZu 配置開始 < -->
<!-- 相容 flyme5.0 以下版本,魅族內部整合 pushSDK 必填,不然無法收到 訊息 -->
<uses-permission
android:name="com.meizu.flyme.push.permission.RECEIVE"/>
<permission
android:name="cn.rongcloud.im.push.permission.MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="cn.rongcloud.im.push.permission.MESSAGE"/>
<!-- 相容 flyme3.0 配置許可權 -->
<uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
<!-- MeiZu 配置結束 < -->
複製程式碼
新建 Application 在 oncreate 初始化 sdk 因為接入了融雲 SDK會有主程式,和推送程式,那我們在主程式進行初始化
if (applicationInfo.packageName == getCurProcessName(applicationContext)) {
try {
RongIM.init(this,Constant.APP_KEY)
} catch (e: Exception) {
e.printStackTrace()
} finally {
}
}
複製程式碼
然後呼叫 RongIM.connect,在成功的回撥進行內容提供者(設定頭像和暱稱),token要在後臺獲取,測試的時候你可以在 應用裡面獲取 token
RongIM.connect(token, object : RongIMClient.ConnectCallback() {
override fun onTokenIncorrect() {
//get token again
}
override fun onSuccess(userid: String) {
progress.visibility = View.GONE
connectBtn.text = "歡迎回來$name$userId"
RongIM.getInstance().setCurrentUserInfo(UserInfo(userId,name, Uri.parse(image)))
RongIM.getInstance().setMessageAttachedUserInfo(true)
//使用者內容提供者(userid+username+image)
}
override fun onError(errorCode: RongIMClient.ErrorCode) {
//Ooooop
}
}
複製程式碼
建立會話列表
建立ConversationListActivity ,在佈局檔案加入
<fragment
android:id="@+id/conversationlist"
android:name="io.rong.imkit.fragment.ConversationListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
複製程式碼
再註冊這個activity,因為是隱式跳轉這個 activity 注意 data 的 host 是寫自己包名
<activity android:name="com.ppjun.android.improject.mvp.ui.ConversationListActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="com.ppjun.android.improject"
android:pathPrefix="/conversationlist"
android:scheme="rong" />
</intent-filter>
</activity>
複製程式碼
建立聚合會話列表
建立 SubConversationListActivity ,在其佈局檔案加入
<fragment
android:id="@+id/subconversationlist"
android:name="io.rong.imkit.fragment.SubConversationListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
複製程式碼
再註冊這個activity,因為是隱式跳轉這個 activity 注意 data 的 host 是寫自己包名
<!--聚合會話列表-->
<activity
android:name="com.ppjun.android.improject.mvp.ui.SubConversationListActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="com.ppjun.android.improject"
android:pathPrefix="/subconversationlist"
android:scheme="rong" />
</intent-filter>
</activity>
複製程式碼
建立會話
建立 ConversationActivity ,在其佈局檔案加入
<fragment
android:id="@+id/conversation"
android:name="io.rong.imkit.fragment.ConversationFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
複製程式碼
再註冊這個activity,因為是隱式跳轉這個 activity 注意 data 的 host 是寫自己包名
<!--會話介面-->
<activity
android:name="com.ppjun.android.improject.mvp.ui.ConversationActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="com.ppjun.android.improject"
android:pathPrefix="/conversation/"
android:scheme="rong" />
</intent-filter>
</activity>
複製程式碼
開啟會話列表
private fun startConversationList() {
val map = HashMap<String, Boolean>()
map.put(Conversation.ConversationType.PRIVATE.getName(), false) // 會話列表需要顯示私聊會話, 第二個引數 true 代表私聊會話需要聚合顯示
map.put(Conversation.ConversationType.GROUP.getName(), false) // 會話列表需要顯示群組會話, 第二個引數 false 代表群組會話不需要聚合顯示
RongIM.getInstance().startConversationList(this@MainActivity, map)
}
複製程式碼
建立私聊會話
RongIM.getInstance().startPrivateChat(this@MainActivity, "123456", "userid")
複製程式碼
常見問題
connect 無回撥,報找不到 libsqlite.so 異常 解決方法 support.rongcloud.cn/kb/NTQw