Android集成騰訊云通信IM

本篇文章結(jié)構(gòu)

一、集成流程躬贡。
二谆奥、集成中遇到的問題
集成過程

先打開 官方文檔

TIM圖片20180425151417.png

很清楚,前幾部沒什么說的拂玻,去官網(wǎng)注冊賬號就好了酸些,我們接下來看賬號集成宰译。
首先第一步是集成模式選擇

  • 獨(dú)立模式:私鑰由開發(fā)者保存,公鑰由騰訊保存魄懂。開發(fā)者使用私鑰生成用戶簽名 UserSig沿侈,騰訊使用公鑰對簽名 UserSig 進(jìn)行校驗(yàn)。
  • 托管模式:私鑰由騰訊保存市栗,公鑰由開發(fā)者保存肋坚。騰訊使用私鑰生成用戶簽名 UserSig,開發(fā)者可以使用公鑰對簽名 UserSig 進(jìn)行校驗(yàn)肃廓,注意智厌,對于第三方開放帳號,此時不需要公私鑰盲赊。
    這里可以根據(jù)你們的業(yè)務(wù)需求選擇合適的模式铣鹏。
    這里選擇獨(dú)立模式集成,也就是后臺使用私鑰生成用戶簽名哀蘑,APP端使用UserSig調(diào)用SDK登錄騰訊服務(wù)器诚卸,登錄成功后就可以使用IM功能了。

然后就要開始下載SDK進(jìn)行集成了绘迁。


TIM圖片20180425153120.png

這里是區(qū)分SDK版本號的合溺,不同的版本它的文檔是不一樣。
我這里選擇的是V3.x的版本缀台。
騰訊提供了一個demo 隨心聊IM 不過這個demo中使用的SDK版本是V2.x棠赛。
所以如果你要集成的是V3.x的版本,你還需要注意他們的區(qū)別膛腐。
關(guān)于引入Jar包睛约,清單文件配置等不在贅訴,官方文檔寫的很清楚哲身。
這里說一下SDK的初始化辩涝。

private void init(){
            
        InitBusiness.start(getApplicationContext(), TIMManager.ERROR);//初始化IMSDK
        initTIMLoginConfig();//登錄騰訊服務(wù)器
        }
        private void initTIMLoginConfig()
    {
        String identify = UserController.getInstance().getPhone();//用戶唯一標(biāo)識
        String sig = UserController.getInstance().getSig();   //根據(jù)用戶唯一標(biāo)識生成的簽名
        if (!TextUtils.isEmpty(identify)&&!TextUtils.isEmpty(sig))
        {
            LoginBusiness.loginIm(identify, sig, new TIMCallBack() {
                @Override
                public void onError(int i, String s) {
                    Log.e(TAG, "onError: "+s);
                }
                @Override
                public void onSuccess() {
                    Log.e(TAG, "onSuccess: 登錄成功!");
                    initIM();
                }
            });
        }
    }
        private void initIM()
        {
            //初始化程序后臺后消息推送
        PushUtil.getInstance();
        //初始化消息監(jiān)聽
        MessageEvent.getInstance();
      ToastUtils.showMessage(getContext(),"TIM login success");
        String deviceMan = android.os.Build.MANUFACTURER;
        //注冊小米和華為推送 //
      /*  if (deviceMan.equals("Xiaomi") && shouldMiInit()){
            MiPushClient.registerPush(getApplicationContext(), Constants.MI_APP_ID, Constants.MI_APP_KEY);
        }else if (deviceMan.equals("HUAWEI")){
            PushManager.requestToken(this);
        }*/
        Log.e(TAG, "onSuccess: "+ TIMManager.getInstance().getLoginUser());
        //設(shè)置自己的好友驗(yàn)證方式為需要驗(yàn)證
        TIMFriendshipManager.ModifyUserProfileParam param = new TIMFriendshipManager.ModifyUserProfileParam();
        param.setAllowType(TIMFriendAllowType.TIM_FRIEND_NEED_CONFIRM);
        TIMFriendshipManager.getInstance().modifyProfile(param, new TIMCallBack() {
            @Override
            public void onError(int code, String desc) {
                //錯誤碼code和錯誤描述desc勘天,可用于定位請求失敗原因
                //錯誤碼code列表請參見錯誤碼表
                Log.e(TAG, "modifyProfile failed: " + code + " desc" + desc);
            }
            @Override
            public void onSuccess() {
                Log.e(TAG, "設(shè)置好友驗(yàn)證 succ");
            }
        });
        TIMOfflinePushSettings settings = new TIMOfflinePushSettings();
//開啟離線推送
        settings.setEnabled(true);
//設(shè)置收到C2C離線消息時的提示聲音怔揩,這里把聲音文件放到了res/raw文件夾下
        settings.setC2cMsgRemindSound(null);

        TIMManager.getInstance().setOfflinePushSettings(settings);

       
    }

下面是InitBussiness的代碼

/**
 * 初始化
 * 包括imsdk等
 */
public class InitBusiness {

    private static final String TAG = InitBusiness.class.getSimpleName();

    private InitBusiness(){}

    public static void start(Context context){
        initImsdk(context, 0);
    }

    public static void start(Context context, int logLevel){
        initImsdk(context, logLevel);
        initUserConfig();
    }


    /**
     * 初始化imsdk
     */
    private static void initImsdk(Context context, int logLevel){
        TIMSdkConfig config = new TIMSdkConfig(AppConfig.SDK_APPID);
        config.enableLogPrint(true)
                .setLogLevel(TIMLogLevel.values()[logLevel]);
        //初始化imsdk
        boolean init = TIMManager.getInstance().init(context, config);
        //禁止服務(wù)器自動代替上報已讀
        Log.d(TAG, "initIMsdk"+init);

    }

    private static void initUserConfig()
    {
        //基本用戶配置
        TIMUserConfig userConfig = new TIMUserConfig()
                .setUserStatusListener(new TIMUserStatusListener() {
                    @Override
                    public void onForceOffline() {
                        //被其他終端踢下線
                        Log.i(TAG, "onForceOffline");
//                        App.TOKEN = "";
//                        UserControl.getInstance().clear();
//                        DataCleanManager.clearAllCache(getContext());
//                        PageRouter.startLogin(getContext());
//                        finish();
                    }

                    @Override
                    public void onUserSigExpired() {
                        //用戶簽名過期了,需要刷新userSig重新登錄SDK
                        Log.i(TAG, "onUserSigExpired");
                    }
                })
                //設(shè)置連接狀態(tài)事件監(jiān)聽器
                .setConnectionListener(new TIMConnListener() {
                    @Override
                    public void onConnected() {
                        Log.i(TAG, "onConnected");
                    }

                    @Override
                    public void onDisconnected(int code, String desc) {
                        Log.i(TAG, "onDisconnected");
                    }

                    @Override
                    public void onWifiNeedAuth(String name) {
                        Log.i(TAG, "onWifiNeedAuth");
                    }
                });
        RefreshEvent.getInstance().init(userConfig);
        userConfig = FriendshipEvent.getInstance().init(userConfig);
        userConfig = MessageEvent.getInstance().init(userConfig);
        userConfig = GroupEvent.getInstance().init(userConfig);
        //將用戶配置與通訊管理器進(jìn)行綁定
        TIMManager.getInstance().setUserConfig(userConfig);

    }


    public interface OffLineNotify{
        void exit();
    }
}

至此登錄成功后脯丝,就可以使用即使通信服務(wù)了商膊。

收發(fā)消息這塊跟SDK版本號沒有很大影響,可以參考demo巾钉,就能實(shí)現(xiàn)基本的聊天功能了翘狱。

遇到的問題

1.首次進(jìn)入聊天頁面獲取不到聊天列表秘案。
2.發(fā)送圖片消息獲取不到圖片砰苍。
3.創(chuàng)建的Public群組潦匈,群主無法邀請好友入群。
問題一

先說第一個問題赚导,因?yàn)楣P者的項目結(jié)構(gòu)是MainActivity+fragment的結(jié)構(gòu)茬缩,項目一打開就是聊天列表頁,但是每次打開項目吼旧,聊天列表總是獲取不到凰锡,后來debug發(fā)現(xiàn)了問題所在,因?yàn)橛脩舻牡卿浭菍懺贛ainActivity中圈暗,fragment的加載也是在MainActivity中完成的掂为。
就是上面代碼中的登錄,我們知道登錄是耗時操作员串,所以問題就是在登錄還沒有成功的時候勇哗,fragment已經(jīng)加載出來,并且去獲取了聊天列表寸齐,而此時用戶還沒有登錄成功欲诺,所以每次進(jìn)入頁面取到的列表都是空的。
最后解決方案就是渺鹦,我在登錄成功的回調(diào)中發(fā)送一條消息扰法,在聊天列表的fragment中接收消息,然后再去獲取聊天列表毅厚。
至此問題1得到解決塞颁。

問題2

圖片消息發(fā)送是成功的,因?yàn)榘l(fā)送方式跟文本消息是一樣的吸耿,但是在接收時卻接收不到殴边。

V2.x的文檔介紹。
V3.x的文檔介紹珍语。

這是兩個版本的文檔說明锤岸,我找了半天也沒找到參數(shù)在哪,圖片從哪里獲取板乙。
然后截圖投訴了一下他們的產(chǎn)品是偷,說找不到他們寫的參數(shù)在哪?
然后大概在6點(diǎn)左右募逞,收到一條短信蛋铆,說圖片會自動保存在path路徑下。我試了一下放接,果然取到了刺啦。我。纠脾。玛瘸。這文檔寫的蜕青。。糊渊。
至此問題2解決右核。

問題3

因?yàn)橛杏玫饺毫牡墓δ埽詣?chuàng)建的是Public類型的群組渺绒,然而在邀請好友入群的時候卻報錯10007,this group is not enable invite.
然后去看錯誤碼贺喝,發(fā)現(xiàn)沒什么用。
然后我再次投訴宗兼,他們的產(chǎn)品躏鱼,
到現(xiàn)在沒有回復(fù)。
發(fā)現(xiàn)還是沒什么用殷绍。


文檔寫的是不允許群成員邀請他人入群挠他,然而就是群主也不能邀請他人入群。
這個問題到現(xiàn)在也沒能解決篡帕,目前能實(shí)現(xiàn)的是他人可以通過申請加入群殖侵。。镰烧。

好了拢军,這篇博客到此結(jié)束,希望能幫到有同樣困擾的小伙伴怔鳖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茉唉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子结执,更是在濱河造成了極大的恐慌度陆,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件献幔,死亡現(xiàn)場離奇詭異懂傀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜡感,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蹬蚁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人郑兴,你說我怎么就攤上這事犀斋。” “怎么了情连?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵叽粹,是天一觀的道長。 經(jīng)常有香客問我,道長虫几,這世上最難降的妖魔是什么锤灿? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮持钉,結(jié)果婚禮上衡招,老公的妹妹穿的比我還像新娘篱昔。我一直安慰自己每强,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布州刽。 她就那樣靜靜地躺著空执,像睡著了一般。 火紅的嫁衣襯著肌膚如雪穗椅。 梳的紋絲不亂的頭發(fā)上辨绊,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音匹表,去河邊找鬼门坷。 笑死,一個胖子當(dāng)著我的面吹牛袍镀,可吹牛的內(nèi)容都是我干的默蚌。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼苇羡,長吁一口氣:“原來是場噩夢啊……” “哼绸吸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起设江,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤锦茁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叉存,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體码俩,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年歼捏,在試婚紗的時候發(fā)現(xiàn)自己被綠了握玛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡甫菠,死狀恐怖挠铲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寂诱,我是刑警寧澤拂苹,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響瓢棒,放射性物質(zhì)發(fā)生泄漏浴韭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一脯宿、第九天 我趴在偏房一處隱蔽的房頂上張望念颈。 院中可真熱鬧,春花似錦连霉、人聲如沸榴芳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窟感。三九已至,卻和暖如春歉井,著一層夾襖步出監(jiān)牢的瞬間柿祈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工哩至, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躏嚎,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓菩貌,卻偏偏與公主長得像卢佣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菜谣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容