av一区二区三区在线观看_久久久久国产一区二区三区_伊人春色在线播放_欧美亚洲国产一区_九九热在线免费视频_久久视频国产

初始化SDK及登錄

? 在程序入口初始化SDK并設(shè)置回調(diào)接口 — 初始化要在程序完全啟動(dòng)(即Android Application 創(chuàng)建完成)之后才能調(diào)用。初始化及登錄建議在一個(gè)函數(shù)體中順序調(diào)用。

代碼可參考Demo中的SDKCoreHelper.java(所在的demo目錄:\app\src\main\java\com\yuntongxun\ecdemo\ui)

初始化及登陸過程分由以下四步組成:

(1) 初始化SDK

(2) 設(shè)置登錄參數(shù)

(3) 設(shè)置通知回調(diào)監(jiān)聽

(4) 驗(yàn)證參數(shù)是否正確,登陸SDK

特別提醒:設(shè)置登錄參數(shù)、通知回調(diào)監(jiān)聽和驗(yàn)證參數(shù)是否正確,登陸SDK,需要在SDK初始化成功的方法(onInitialized回調(diào))后執(zhí)行。

1、初始化SDK

初始化SDK 是調(diào)用其他功能(IM,實(shí)時(shí)音視頻,音視頻會(huì)議等)的前提,如果初始化不成功,后續(xù)的接口都無法調(diào)用。

初始化示例代碼如下:


//判斷SDK是否已經(jīng)初始化
if(!ECDevice.isInitialized()) {
 /*  initial: ECSDK 初始化接口
            * 參數(shù):
            *     inContext - Android應(yīng)用上下文對(duì)象
            *     inListener - SDK初始化結(jié)果回調(diào)接口,ECDevice.InitListener
            *
            * 說明:示例在應(yīng)用程序創(chuàng)建時(shí)初始化 SDK引用的是Application的上下文,
            *       開發(fā)者可根據(jù)開發(fā)需要調(diào)整。
            */
      ECDevice.initial(getApplicationContext(), new ECDevice.InitListener() {
           @Override
            public void onInitialized() {
            // SDK已經(jīng)初始化成功
            Log.i("","初始化SDK成功");
            //設(shè)置登錄參數(shù),可分為自定義方式和VoIP驗(yàn)密方式,詳情點(diǎn)此查看>>
            //設(shè)置通知回調(diào)監(jiān)聽包含登錄狀態(tài)監(jiān)聽,接收消息監(jiān)聽,VoIP呼叫事件回調(diào)監(jiān)聽和
            //設(shè)置接收VoIP來電事件通知Intent等,詳情點(diǎn)此查看>>
            //驗(yàn)證參數(shù)是否正確,登陸SDK,詳情點(diǎn)此查看>>        
            }
            @Override
            public void onError(Exception exception) {
            //在初始化錯(cuò)誤的方法中打印錯(cuò)誤原因
            Log.i("","初始化SDK失敗"+exception.getMessage());
       	 }
  	  	});
}
// 已經(jīng)初始化成功,后續(xù)開發(fā)業(yè)務(wù)代碼。
Log.i(TAG, "初始化SDK及登陸代碼完成");


	

注意事項(xiàng):

(1)初始化不要在application的onCreate方法中進(jìn)行調(diào)用,因?yàn)槿绻鸻ndroid的application沒有創(chuàng)建完成時(shí)執(zhí)行初始化方法,將會(huì)導(dǎo)致初始化無效,在后續(xù)的登錄和其他接口的調(diào)用中出現(xiàn)問題。

(2)如果調(diào)用初始化觸發(fā)初始化失敗onError回調(diào)。可能是由下列原因造成:

a、可能SDK已經(jīng)處于初始化狀態(tài)(未做ECDevice.isInitialized判斷時(shí)出現(xiàn))

b、SDK所聲明必要的權(quán)限未在清單文件(AndroidManifest.xml)里配置、或者未配置服務(wù)屬性android:exported="false";

c、當(dāng)前手機(jī)設(shè)備系統(tǒng)版本低于SDK所支持的最低版本(當(dāng)前SDK支持Android Build.VERSION_CODES.FROYO 以及以上版本)

2、設(shè)置登錄參數(shù)

初始化成功之后我們就可以進(jìn)行登錄。登錄有兩種模式,我們選擇其中一種登錄方式即可:

(1)任意帳號(hào)體系(即自定義登錄方式)

(2)VoIP帳號(hào)體系(即VoIP驗(yàn)密登錄方式)

注:推薦使用(1)自定義登錄方式。因?yàn)榇朔绞较略仆ㄓ嵠脚_(tái)不驗(yàn)證用戶的登錄密碼,只進(jìn)行應(yīng)用級(jí)的驗(yàn)證。提高客戶帳號(hào)創(chuàng)建的自由度和使用的便捷性。

示例代碼如下:

1)任意帳號(hào)體系(即自定義登錄方式)


    ECInitParams params = ECInitParams.createParams();
    params.setUserid("推薦使用客戶項(xiàng)目APP的登錄帳號(hào),測(cè)試階段Userid可以填寫手機(jī)號(hào)"); 
    params.setAppKey("應(yīng)用ID;登陸官網(wǎng)查看控制臺(tái)→應(yīng)用列表→應(yīng)用管理→APP ID");
    params.setToken("應(yīng)用Token;登陸官網(wǎng)查看控制臺(tái)→應(yīng)用列表→應(yīng)用管理→APP TOKEN ");
    //設(shè)置登陸驗(yàn)證模式:自定義登錄方式
    params.setAuthType(ECInitParams.LoginAuthType.NORMAL_AUTH);
    //LoginMode(強(qiáng)制上線:FORCE_LOGIN  默認(rèn)登錄:AUTO。使用方式詳見注意事項(xiàng))
    params.setMode(ECInitParams.LoginMode.FORCE_LOGIN);


	

2)固定VoIP帳號(hào)體系(即VoIP驗(yàn)密登錄方式)


    ECInitParams params = ECInitParams.createParams();
    params.setUserid("VoIP帳號(hào);通過創(chuàng)建子帳戶接口獲得");
    params.setPwd("VoIP密碼;通過創(chuàng)建子帳戶接口獲得");
    params.setAppKey("應(yīng)用ID;登陸官網(wǎng)查看控制臺(tái)→應(yīng)用列表→應(yīng)用管理→APP ID ");
    //設(shè)置登陸驗(yàn)證模式:VoIP驗(yàn)密登錄方式
    params.setAuthType(ECInitParams.LoginAuthType.PASSWORD_AUTH);
	//LoginMode(強(qiáng)制上線:FORCE_LOGIN  默認(rèn)登錄:AUTO)
    params.setMode(ECInitParams.LoginMode.FORCE_LOGIN);

	

注意事項(xiàng):

(1)相同終端之間不可以登錄同一賬號(hào),移動(dòng)設(shè)備之間不可以登錄同一賬號(hào)。移動(dòng)設(shè)備、平板、電腦設(shè)備、Web、PC之間可以登錄相同賬號(hào)。

(2)自定義方式(NORMAL_AUTH)登錄時(shí)候時(shí)Userid不可填VoIP帳號(hào),否則會(huì)導(dǎo)致VoIP密碼失效。

(3)兩種登錄模式的使用:

a、FORCE_LOGIN :強(qiáng)制登錄,可以強(qiáng)制上線,踢掉已經(jīng)在線的同終端設(shè)備。

b、AUTO:自動(dòng)重連

建議在首次登陸時(shí)使用FORCE_LOGIN強(qiáng)制上線登錄模式,之后再次啟動(dòng)APP時(shí)使用AUTO自動(dòng)重連模式。

(4)SDK三種情況后會(huì)自動(dòng)重連

a、登錄方式為FORCE_LOGIN類型并且登陸成功

b、客戶端使用AUTO登錄方式并登陸成功

c、手機(jī)網(wǎng)絡(luò)狀態(tài)改變

(5)自定義登錄方式和VoIP驗(yàn)密登錄方式在開發(fā)者正式項(xiàng)目中只可選用一種。

3、設(shè)置通知回調(diào)監(jiān)聽

登錄參數(shù)設(shè)置完成后,開發(fā)者可根據(jù)業(yè)務(wù)需要設(shè)置回調(diào)監(jiān)聽。如下表所示:

監(jiān)聽

說明

約束

OnECDeviceConnectListener

登錄回調(diào)監(jiān)聽

必須設(shè)置

OnChatReceiveListener

IM接收消息監(jiān)聽

使用IM功能時(shí)設(shè)置

OnVoIPListener

VoIP通話狀態(tài)監(jiān)聽

使用VoIP功能時(shí)設(shè)置

OnMeetingListener

音視頻會(huì)議回調(diào)監(jiān)聽

使用音視頻會(huì)議時(shí)設(shè)置

說明:

(1)登錄回調(diào)監(jiān)聽將SDK登錄狀態(tài)反饋給APP層,是所有通訊功能的基礎(chǔ),因此必須設(shè)置。

(2)其他關(guān)于IM、VoIP通話、音視頻功能的回調(diào)監(jiān)聽可根據(jù)業(yè)務(wù)使用情況進(jìn)行增減,相互之間沒有影響。

示例代碼如下:


    //設(shè)置登錄回調(diào)監(jiān)聽
    ECDevice.setOnDeviceConnectListener(new ECDevice.OnECDeviceConnectListener() {
            public void onConnect() {
              //兼容舊版本的方法,不必處理
            }

            @Override
            public void onDisconnect(ECError error) {
            //兼容舊版本的方法,不必處理
            }
			
            @Override
            public void onConnectState(ECDevice.ECConnectState state, ECError error) {
                if(state == ECDevice.ECConnectState.CONNECT_FAILED ){
                   if(error.errorCode == SdkErrorCode.SDK_KICKED_OFF) {
				Log.i("","==帳號(hào)異地登陸");	
                   }
                   else
                   {
                       Log.i("","==其他登錄失敗,錯(cuò)誤碼:"+ error.errorCode);
                   }
                    return ;
                }
                else if(state == ECDevice.ECConnectState.CONNECT_SUCCESS) {
                       Log.i("","==登陸成功");
                }
            }
        });

    //IM接收消息監(jiān)聽,使用IM功能的開發(fā)者需要設(shè)置。
    ECDevice.setOnChatReceiveListener(new OnChatReceiveListener() {
        @Override
        public void OnReceivedMessage(ECMessage msg) {
        Log.i("","==收到新消息");
        }

        @Override
        public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
        //收到群組通知消息,可以根據(jù)ECGroupNoticeMessage.ECGroupMessageType類型區(qū)分不同消息類型
        Log.i("","==收到群組通知消息(有人加入、退出...)");
        }

        @Override
        public void onOfflineMessageCount(int count) {
            // 登陸成功之后SDK回調(diào)該接口通知帳號(hào)離線消息數(shù)
        }

        @Override
        public void onReceiveOfflineMessage(List msgs) {
            // SDK根據(jù)應(yīng)用設(shè)置的離線消息拉取規(guī)則通知應(yīng)用離線消息
        }

        @Override
        public void onReceiveOfflineMessageCompletion() {
            // SDK通知應(yīng)用離線消息拉取完成
        }

        @Override
        public void onServicePersonVersion(int version) {
            // SDK通知應(yīng)用當(dāng)前帳號(hào)的個(gè)人信息版本號(hào)
        }
    });
    
    // VoIP通話狀態(tài)監(jiān)聽,使用VoIP通話功能的開發(fā)者需要設(shè)置。
    ECVoIPCallManager callInterface = ECDevice.getECVoIPCallManager();
    if(callInterface != null) {
        callInterface.setOnVoIPCallListener(new ECVoIPCallManager.OnVoIPListener() {
            @Override
            public void onCallEvents(ECVoIPCallManager.VoIPCall voipCall) {
                // 處理呼叫事件回調(diào)
                if(voipCall == null) {
                    Log.e("SDKCoreHelper", "handle call event error , voipCall null");
                    return ;
                 }
                 // 根據(jù)不同的事件通知類型來處理不同的業(yè)務(wù)
                 ECVoIPCallManager.ECCallState callState = voipCall.callState;
                switch (callState) {
                    case ECCALL_PROCEEDING:
                    Log.i("","正在連接服務(wù)器處理呼叫請(qǐng)求,callid:"+voipCall.callId);
                        break;
                    case ECCALL_ALERTING:
                    Log.i("","呼叫到達(dá)對(duì)方,正在振鈴,callid:"+voipCall.callId);
                        break;
                    case ECCALL_ANSWERED:
                    Log.i("","對(duì)方接聽本次呼叫,callid:"+voipCall.callId);
                        break;
                    case ECCALL_FAILED:
                        // 本次呼叫失敗,根據(jù)失敗原因進(jìn)行業(yè)務(wù)處理或跳轉(zhuǎn)
                    Log.i("","called:"+voipCall.callId+",reason:"+ voipCall.reason);
                        break;
                    case ECCALL_RELEASED:
                        // 通話釋放[完成一次呼叫]
                        break;
                    default:
                        Log.e("SDKCoreHelper", "handle call event error , callState " + callState);
                        break;
                }
            }
        });
    } 

    //音視頻會(huì)議回調(diào)監(jiān)聽,使用音視頻會(huì)議功能的開發(fā)者需要設(shè)置。
    if(ECDevice.getECMeetingManager() != null) {
            ECDevice.getECMeetingManager().setOnMeetingListener(new OnMeetingListener() {
                @Override
                Public void onReceiveInterPhoneMeetingMsg(ECInterPhoneMeetingMsg msg) {
                    // 處理實(shí)時(shí)對(duì)講消息Push
                }

                @Override
                public void onReceiveVoiceMeetingMsg(ECVoiceMeetingMsg msg) {
                    // 處理語音會(huì)議消息push
                }

                @Override
                public void onReceiveVideoMeetingMsg(ECVideoMeetingMsg msg) {
                    // 處理視頻會(huì)議消息Push(暫未提供)
                }
            });
        }

    // 接收來電時(shí),需要設(shè)置接收VoIP來電事件通知Intent。用于SDK回調(diào)對(duì)應(yīng)的activity。
    // 呼入activity在sdk初始化的回 調(diào)onInitialized中設(shè)置。
    // 呼入界面activity、開發(fā)者需創(chuàng)建或修改VoIPCallActivity類,可參考demo中的
    // VoIPCallActivity.java(demo中的目錄:\app\src\main\java\com\yuntongxun\ecdemo\ui\voip)
	Intent intent = new Intent(getInstance().mContext, VoIPCallActivity.class);
	intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	PendingIntent pendingIntent = PendingIntent.getActivity( getInstance().mContext, 0, intent, 
	PendingIntent.FLAG_UPDATE_CURRENT);
        ECDevice.setPendingIntent(pendingIntent);


	

注意事項(xiàng):

回調(diào)監(jiān)聽要放在初始化成功的onInitialized回調(diào)方法里面,這樣保證登錄成功之后就可以接收到他人的來電、消息、會(huì)議等。

4、登錄SDK

設(shè)置完成登錄參數(shù)和通知回調(diào)監(jiān)聽,接下來調(diào)用驗(yàn)證參數(shù)并登錄SDK。如果返回是true,則說明參數(shù)正確。

	
 //驗(yàn)證參數(shù)是否正確
if(params.validate()) {
    // 登錄函數(shù)
    ECDevice.login(params);
}
	

接下來我們可以測(cè)試是否登錄成功。調(diào)試登錄回調(diào)監(jiān)聽(ECDevice.OnECDeviceConnectListener)來判斷連接狀態(tài)。登錄成功的errorcode為200。

主站蜘蛛池模板: 欧美国产日本一区 | 人人玩人人添人人澡欧美 | 成人亚洲网站 | 亚洲手机视频在线 | 中文字字幕在线中文乱码范文 | 久久国产精品72免费观看 | 日韩一区不卡 | 北条麻妃99精品青青久久 | 完全免费av在线 | 黄色一级免费 | 亚洲三区在线观看 | 国产精品永久 | 一级电影免费看 | 午夜日韩 | 一区二区三区四区免费观看 | 天堂久久久久久久 | 欧美不卡在线 | 亚洲成av片人久久久 | 9191在线播放 | 成人国产精品久久 | 狠狠爱免费视频 | 国产精品久久毛片av大全日韩 | 色婷婷综合久久久久中文一区二区 | 国产羞羞视频在线观看 | 精品久久久久久久久久 | 日本不卡视频在线播放 | 国产午夜精品一区二区三区在线观看 | 欧美在线视频一区二区 | 美女黄18岁以下禁止观看 | 国产一区二区三区免费视频 | 日韩精品一区二区三区高清免费 | 成人免费网视频 | 91在线一区 | 91精品国产综合久久精品 | 亚洲毛片网站 | 99re6在线视频精品免费 | 成人午夜影院 | 亚洲人人舔人人 | 高清视频一区二区三区 | 久久国产欧美日韩精品 | 国产成人精品免费视频大全最热 |