2018 融雲整合

ppjunSpirit發表於2018-05-25

接入融雲

融雲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")
複製程式碼

專案地址 github.com/gdmec071207…

常見問題

connect 無回撥,報找不到 libsqlite.so 異常 解決方法 support.rongcloud.cn/kb/NTQw

相關文章