初始化及登录
公开(只读)(权限来自空间)
初始化及登录

在程序入口初始化SDK并设置回调接口 — 初始化要在程序完全启动(即Android Application 创建完成)之后才能调用。初始化及登录建议在一个函数体中顺序调用。

代码可参考Demo中的SDKCoreHelper.java(所在的demo目录:\app\src\main\java\com\yuntongxun\ecdemo\ui)
初始化及登陆过程分由以下四步组成:
  • 初始化SDK
  • 设置登录参数
  • 设置通知回调监听
  • 验证参数是否正确,登陆SDK

特别提醒:
设置登录参数、通知回调监听和验证参数是否正确,登陆SDK,需要在SDK初始化成功的方法(onInitialized回调)后执行。
  • 1、初始化SDK
 初始化SDK 是调用其他功能(IM,实时音视频,音视频会议等)的前提,如果初始化不成功,后续的接口都无法调用。
 初始化示例代码如下:      
//判断SDK是否已经初始化
if(!ECDevice.isInitialized()) {
 /*  initial: ECSDK 初始化接口
            * 参数:
            *     inContext - Android应用上下文对象
            *     inListener - SDK初始化结果回调接口,ECDevice.InitListener
            *
            * 说明:示例在应用程序创建时初始化 SDK引用的是Application的上下文,
            *       开发者可根据开发需要调整。
            */
      ECDevice.initial(getApplicationContext(), new ECDevice.InitListener() {
           @Override
            public void onInitialized() {
            // SDK已经初始化成功
            Log.i("","初始化SDK成功");
            //设置登录参数,可分为自定义方式和VoIP验密方式。
            //设置通知回调监听包含登录状态监听,接收消息监听,VoIP呼叫事件回调监听和设置接收VoIP来电事件通知Intent等。
            //验证参数是否正确,登陆SDK。     
            }              
            @Override
            public void onError(Exception exception) {
            //在初始化错误的方法中打印错误原因
            Log.i("","初始化SDK失败"+exception.getMessage());
                }
                    });}
            // 已经初始化成功,后续开发业务代码。
            Log.i(TAG, "初始化SDK及登陆代码完成");
参考类:ECDevice   查看API 
       
注意事项:
  • 初始化不要在application的onCreate方法中进行调用,因为如果android的application没有创建完成时执行初始化方法,将会导致初始化无效,在后续的登录和其他接口的调用中出现问题。
  • 如果调用初始化触发初始化失败onError回调。可能是由下列原因造成:
     a、可能SDK已经处于初始化状态(未做ECDevice.isInitialized判断时出现);
     b、SDK所声明必要的权限未在清单文件(AndroidManifest.xml)里配置、或者未配置服务属性android:exported="false";
     c、当前手机设备系统版本低于SDK所支持的最低版本(当前SDK支持Android Build.VERSION_CODES.FROYO 以及以上版本)。
常见问题:
  • 2、设置登录参数
初始化成功之后我们就可以进行登录。登录有两种模式,我们选择其中一种登录方式即可:
(1)任意帐号体系(即自定义登录方式) 
(2)VoIP帐号体系(即VoIP验密登录方式)
注:推荐使用(1)自定义登录方式。因为此方式下云通讯平台不验证用户的登录密码,只进行应用级的验证。提高客户帐号创建的自由度和使用的便捷性。

示例代码如下:
  • 2.1 任意帐号体系(即自定义登录方式)        
    //创建登录参数对象
    ECInitParams params = ECInitParams.createParams();
    //设置用户登录账号
    params.setUserid("推荐使用客户项目APP的登录帐号,测试阶段Userid可以填写手机号"); 
    //设置AppId
    params.setAppKey("应用ID;登陆官网查看控制台→应用列表→应用管理→APP ID");
    //设置AppToken
    params.setToken("应用Token;登陆官网查看控制台→应用列表→应用管理→APP TOKEN "); 
    //设置登陆验证模式:自定义登录方式
    params.setAuthType(ECInitParams.LoginAuthType.NORMAL_AUTH);
    //LoginMode(强制上线:FORCE_LOGIN  默认登录:AUTO。使用方式详见注意事项)
    params.setMode(ECInitParams.LoginMode.FORCE_LOGIN);
  • 2.2 固定VoIP帐号体系(即VoIP验密登录方式)      
    //创建登录参数对象
    ECInitParams params = ECInitParams.createParams();
    //设置用户登录账号(VoIP帐号)
    params.setUserid("VoIP帐号;通过创建子帐户接口获得");
    //设置账号密码(VoIP密码)
    params.setPwd("VoIP密码;通过创建子帐户接口获得");
    //设置AppId
    params.setAppKey("应用ID;登陆官网查看控制台→应用列表→应用管理→APP ID ");
    //设置登陆验证模式:VoIP验密登录方式
    params.setAuthType(ECInitParams.LoginAuthType.PASSWORD_AUTH);
    //LoginMode(强制上线:FORCE_LOGIN  默认登录:AUTO)
    params.setMode(ECInitParams.LoginMode.FORCE_LOGIN);

参考类: ECInitParams  查看API        
注意事项:
  • 相同终端(例如安卓手机和安卓手机)之间不可以登录同一账号,移动设备(例如安卓手机和苹果手机)之间不可以登录同一账号。移动设备、平板、电脑设备、Web、PC之间可以登录相同账号。
  • 自定义方式(NORMAL_AUTH)登录时候时Userid不可填VoIP帐号,否则会导致VoIP密码失效。
  • 两种登录模式的使用:
      a、FORCE_LOGIN :强制登录,可以强制上线,踢掉已经在线的同终端设备。
      b、AUTO:自动重连
      建议在首次登陆时使用FORCE_LOGIN强制上线登录模式,之后再次启动APP时使用AUTO自动重连模式。
  • SDK三种情况后会自动重连
      a、登录方式为FORCE_LOGIN类型并且登陆成功
      b、客户端使用AUTO登录方式并登陆成功
      c、手机网络状态改变
自定义登录方式和VoIP验密登录方式在开发者正式项目中只可选用一种。
  • 3、设置通知回调监听
登录参数设置完成后,开发者可根据业务需要设置回调监听。如下表所示:
监听说明约束

OnECDeviceConnectListener

登录回调监听

必须设置

OnChatReceiveListener

IM接收消息监听

使用IM功能时设置

OnVoIPListener

VoIP通话状态监听

使用VoIP功能时设置

OnMeetingListener

音视频会议回调监听

使用音视频会议时设置

说明:
  • 登录回调监听将SDK登录状态反馈给APP层,是所有通讯功能的基础,因此必须设置。
  • 其他关于IM、VoIP通话、音视频功能的回调监听可根据业务使用情况进行增减,相互之间没有影响。
示例代码如下:
  • 3.1 登录回调监听
    //设置登录回调监听
    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("","==帐号异地登陆");        
                   }
                   else
                   {
                       Log.i("","==其他登录失败,错误码:"+ error.errorCode);
                   }
                    return ;
                }
                else if(state == ECDevice.ECConnectState.CONNECT_SUCCESS) {
                       Log.i("","==登陆成功");
                }
            }
        });
回调 ECDevice.OnECDeviceConnectListener 查看API
  • 3.2 IM接收消息监听
    //IM接收消息监听,使用IM功能的开发者需要设置。
    ECDevice.setOnChatReceiveListener(new OnChatReceiveListener() {
        @Override
        public void OnReceivedMessage(ECMessage msg) {
        Log.i("","==收到新消息");
        }

        @Override
        public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
        //收到群组通知消息,可以根据ECGroupNoticeMessage.ECGroupMessageType类型区分不同消息类型
        Log.i("","==收到群组通知消息(有人加入、退出...)");
        }

        @Override
        public void onOfflineMessageCount(int count) {
            // 登陆成功之后SDK回调该接口通知帐号离线消息数
        }

        @Override
        public void onReceiveOfflineMessage(List msgs) {
            // SDK根据应用设置的离线消息拉取规则通知应用离线消息
        }

        @Override
        public void onReceiveOfflineMessageCompletion() {
            // SDK通知应用离线消息拉取完成
        }

        @Override
        public void onServicePersonVersion(int version) {
            // SDK通知应用当前帐号的个人信息版本号
        }
    });
回调   OnChatReceiveListener 查看API
  • 3.3 VoIP通话状态监听
    // VoIP通话状态监听,使用VoIP通话功能的开发者需要设置。
    ECVoIPCallManager callInterface = ECDevice.getECVoIPCallManager();
    if(callInterface != null) {
        callInterface.setOnVoIPCallListener(new ECVoIPCallManager.OnVoIPListener() {
            @Override
            public void onCallEvents(ECVoIPCallManager.VoIPCall voipCall) {
                // 处理呼叫事件回调
                if(voipCall == null) {
                    Log.e("SDKCoreHelper", "handle call event error , voipCall null");
                    return ;
                 }
                 // 根据不同的事件通知类型来处理不同的业务
                 ECVoIPCallManager.ECCallState callState = voipCall.callState;
                switch (callState) {
                    case ECCALL_PROCEEDING:
                    Log.i("","正在连接服务器处理呼叫请求,callid:"+voipCall.callId);
                        break;
                    case ECCALL_ALERTING:
                    Log.i("","呼叫到达对方,正在振铃,callid:"+voipCall.callId);
                        break;
                    case ECCALL_ANSWERED:
                    Log.i("","对方接听本次呼叫,callid:"+voipCall.callId);
                        break;
                    case ECCALL_FAILED:
                        // 本次呼叫失败,根据失败原因进行业务处理或跳转
                    Log.i("","called:"+voipCall.callId+",reason:"+ voipCall.reason);
                        break;
                    case ECCALL_RELEASED:
                        // 通话释放[完成一次呼叫]
                        break;
                    default:
                        Log.e("SDKCoreHelper", "handle call event error , callState " + callState);
                        break;
                }
            }
        });
    } 
回调 OnVoIPListener 查看API
  • 3.4 音视频会议回调监听
    //音视频会议回调监听,使用音视频会议功能的开发者需要设置。
    if(ECDevice.getECMeetingManager() != null) {
            ECDevice.getECMeetingManager().setOnMeetingListener(new OnMeetingListener() {
                @Override
                Public void onReceiveInterPhoneMeetingMsg(ECInterPhoneMeetingMsg msg) {
                    // 处理实时对讲消息Push
                }

                @Override
                public void onReceiveVoiceMeetingMsg(ECVoiceMeetingMsg msg) {
                    // 处理语音会议消息push
                }

                @Override
                public void onReceiveVideoMeetingMsg(ECVideoMeetingMsg msg) {
                    // 处理视频会议消息Push
                }
            });
        }
回调OnMeetingListener 查看API
    // 接收来电时,需要设置接收VoIP来电事件通知Intent。用于SDK回调对应的activity。
    // 呼入activity在sdk初始化的回 调onInitialized中设置。
    // 呼入界面activity、开发者需创建或修改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);    
注意事项:
回调监听要放在初始化成功的onInitialized回调方法里面,这样保证登录成功之后就可以接收到他人的来电、消息、会议等。
  • 4、登录SDK
设置完成登录参数和通知回调监听,接下来调用验证参数并登录SDK。如果返回是true,则说明参数正确。    
        
 //验证参数是否正确
 if(params.validate()) {
    // 登录函数
    ECDevice.login(params);
    }
        
接下来我们可以测试是否登录成功。调试登录回调监听(ECDevice.OnECDeviceConnectListener)来判断连接状态。登录成功的errorcode为200。

键盘快捷方式

格式

粗体 Ctrl + b
斜体 Ctrl + i
下划线 Ctrl + u
突出显示 Ctrl + e

插入

提及他人 (@life) @
表情符号😀 :
评论 //
日期 /date + 空格
/datetime + 空格
时间 /time + 空格

Markdown 格式

标题 1

# + 空格

标题 2

## + 空格

标题 3

### + 空格
  1. 编号列表
1. + 空格
  • 项目符号列表
* + 空格
  • 任务列表
[] + 空格
斜体 _斜体_
粗体 **粗体**
删除线 ~删除线~
代码块
```
代码 `代码`

​​块格式

标题 1

Ctrl + Alt + 1

标题 2

Ctrl + Alt + 2

标题 3

Ctrl + Alt + 3
代码块
Ctrl + Alt + c

编辑

缩进 制表符
取消缩进 Shift + 制表符
上移行 Ctrl + Alt +
下移行 Ctrl + Alt +
撤销 Ctrl + z
重做 Ctrl + y
搜索和替换 Ctrl + f

应用

创建新文档 Ctrl + Alt + n
文档权限(分享) Ctrl + Alt + s
键盘快捷方式 Ctrl + /
聊天 0
聊天 █