体育万博app下载_manbetx客户端网页版_bet万博网站

一.  Android版本体育万博app下载_manbetx客户端网页版_bet万博网站插件的介绍及导入

1. 体育万博app下载_manbetx客户端网页版_bet万博网站插件的介绍及结构

1.1.1 插件介绍

体育万博app下载_manbetx客户端网页版_bet万博网站插件为开发者开发 体育万博app下载_manbetx客户端网页版_bet万博网站 相关的应用提供的一套完善的开发框架,将体育万博app下载_manbetx客户端网页版_bet万博网站基础能力和界面集成到aar文件中,方便开发者快速高效的集成体育万博app下载_manbetx客户端网页版_bet万博网站通讯能力,开发者可以基于我们提供的体育万博app下载_manbetx客户端网页版_bet万博网站插件实现自己的应用,也可以基于Demo开发。

1.1.2 插件结构

 

1.1.3 体育万博app下载_manbetx客户端网页版_bet万博网站插件主要对外暴露类

1、AppMgr: 里面有登录/登出方法,注册/注销登陆状态的广播接收者;

2、体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager:里面主要有获取未读消息、发起群聊/单聊、体育万博app下载_manbetx客户端网页版_bet万博网站全局的设置、获取体育万博app下载_manbetx客户端网页版_bet万博网站全局设置状态的方法;

3、体育万博app下载_manbetx客户端网页版_bet万博网站Configuration:这个类为体育万博app下载_manbetx客户端网页版_bet万博网站配置类,可以配置

      1) 体育万博app下载_manbetx客户端网页版_bet万博网站通知消息的点击事件以及通知消息的图标、

      2) 添加成员和转发消息的点击事件

      3) 配置昵称和头像及点击

      4) 聊天界面底部面板的扩展

      5)华为推送的开关

4、体育万博app下载_manbetx客户端网页版_bet万博网站Panel:这个类为聊天页面底部的扩展基类,可以设置扩展按钮的名字、icon及点击事件。

2. 引用插件

1、开发者主Module的build.gradle配置文件中添加如下代码

  • android {
  •     //.........
  •     repositories {
  •         flatDir {
  •             dirs 'libs'
  •         }
  •     }
  • }
  • 2、在开发者主Module的libs里面添加需要的aar文件(如下图所示)

    3、在开发者主Module的build.gradle配置文件中依赖导入的aar文件

    注意事项:若之前集成过其他插件,已依赖如下某个aar文件,如

    Yuntx_Android_Common_Plugin_v1.1.x,则无需再次依赖

  • dependencies {
  •     // ........
  •     compile(name: 'Yuntx_Android_Biaoqingmm_Plugin_v1.1.x', ext: 'aar')
  •     compile(name: 'Yuntx_Android_Common_Plugin_v1.1.x', ext: 'aar')
  •     compile(name: 'Yuntx_Android_Dao_Plugin_v1.1.x', ext: 'aar')
  •     compile(name: 'Yuntx_Android_体育万博app下载_manbetx客户端网页版_bet万博网站_Plugin_v1.1.x', ext: 'aar')
  •     compile(name: 'Yuntx_Android_Photopicker_Plugin_v1.1.x', ext: 'aar')
  •     // ........
  • }
  • 4、在开发者主Module的build.gradle配置文件中依赖如下第三方包

    注意事项:如果之间已有以下某个第三方库,可使用原有的,也可以根据自己需求更换新的版本

  • dependencies {
  •     // ........  x.x.x修改为 buildToolsVersion 同样的内容
  • compile 'com.android.support:support-v4:x.x.x'
  • compile 'com.android.support:appcompat-v7:x.x.x'
  •     compile 'org.jsoup:jsoup:1.10.1'
  •     compile 'io.reactivex:rxjava:1.1.1'
  •     compile 'io.reactivex:rxandroid:1.1.0'
  •     compile 'com.squareup.retrofit2:converter-gson:2.1.0'
  •     compile 'com.alibaba:fastjson:1.2.17'
  •     compile 'org.greenrobot:greendao:3.1.0'
  •     compile 'com.github.bumptech.glide:glide:3.6.1'
  •     compile 'com.belerweb:pinyin4j:2.5.1'
  •     compile ‘com.android.support:design:23.1.1'
  •  compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
  • }
  • 3.  配置工程

    1.3.1 清单文件中权限申请

  • // 开发者的 APP 接入时,请将 com.yuntongxun.imdemo 替换为自己的包名
  • // 和下面的 uses-permission 一起加入到你的 AndroidManifest 文件中
  • <permission
  •     android:name="com.yuntongxun.imdemo.permission.RECEIVE_MSG"
  •     android:protectionLevel="signature" />
  • <uses-permission android:name="com.yuntongxun.imdemo.permission.RECEIVE_MSG" />
  • 1.3.2 复制指定的类

    请把下面的自定义广播类YuntxNotifyReceiver.java文件粘贴到开发者的module中,1.1.3版本把XiaoMiPushReceiver.java和 HuaWeiPushReceiver.java开放给开发者,便于开发者对推送的消息进行自定义的处理

    1.3.3 注册自定义通知

    注意事项:

    1、如果之前集成过容联云的其他插件,已经注册过自定义YuntxNotifyReceiver,那么可以使用已注册过的,也可以重新按照以下流程注册。

    2、本配置是属于application的属性,需要复制到AndroidManifest 清单文件的application节点内。

    3、声明自定义通知的广播接收器,开发者需要把action 中的 com.yuntongxun.imdemo替换为自有项目APP的包名。

  • // 声明自定义通知的广播接收器(需要替换包名,详见注意事项)
  • <receiver
  •     android:name="YuntxNotifyReceiver在开发者module中的位置"
  •     android:exported="false">
  •     <intent-filter>
  •         // 接收push消息
  •         // action匹配规则{packageName + ".action" + "功能"}
  •         // com.yuntongxun.imdemo 替换成自己的报名
  •         // 以下三条action 可以根据自己需求来进行增删
  •         // 用于电话会议
  •         <action android:name="com.yuntongxun.imdemo.action.VOIP_CALL" />
  •         // 用于体育万博app下载_manbetx客户端网页版_bet万博网站消息
  •         <action android:name="com.yuntongxun.imdemo.action.MESSAGE" />
  •         // 用于通知点击
  •         <action android:name="com.yuntongxun.imdemo.action.NOTIFICATION_CLICK" />
  •     </intent-filter>
  • </receiver>
  • // 应用处理程序逻辑服务 name为YuntxNotifyReceiver的位置加 $NotifyService
  • <service android:name="YuntxNotifyReceiver的位置$NotifyService" />
  • 1.3.4 集成小米、华为推送功能

    1.3.4.1 导入华为小米推送SDK、推送接收类文件 (文件可以从Demo中提取)

    1.3.4.2 华为小米推送清单文件配置
  • <!-- 以下是华为的 -->
  • <!-- 第三方相关 :接收Push消息(注册、Push消息、Push连接状态、标签,LBS上报结果)广播 -->
  • <receiver android:name=".service.HuaWeiReceiver"
  •     android:exported="true">
  •     <intent-filter>

  •         <!-- 必须,用于接收token -->
  •         <action android:name="com.huawei.android.push.intent.REGISTRATION" />
  •         <!-- 必须,用于接收消息 -->
  •         <action android:name="com.huawei.android.push.intent.RECEIVE" />
  •         <!-- 可选,用于点击通知栏或通知栏上的按钮后触发onEvent回调 -->
  •         <action android:name="com.huawei.android.push.intent.CLICK" />
  •         <!-- 可选,查看push通道是否连接,不查看则不需要 -->
  •         <action android:name="com.huawei.intent.action.PUSH_STATE" />
  •         <!-- 可选,标签、地理位置上报回应,不上报则不需要 -->
  •         <action android:name="com.huawei.android.push.plugin.RESPONSE" />
  •     </intent-filter>

  •     <meta-data
  •         android:name="CS_cloud_ablitity"
  •         android:value="云通讯" />
  • </receiver>

  • <!--
  •      备注:Push相关的android组件需要添加到业务的AndroidManifest.xml,
  •     Push相关android组件运行在另外一个进程是为了防止Push服务异常而影响主业务
  • -->
  • <!-- PushSDK:PushSDK接收外部请求事件入口 -->
  • <receiver
  •     android:name="com.huawei.android.pushagent.PushEventReceiver"
  •     android:process=":hwpushservice">
  •     <intent-filter>
  •         <action android:name="com.huawei.android.push.intent.REFRESH_PUSH_CHANNEL" />
  •         <action android:name="com.huawei.intent.action.PUSH" />
  •         <action android:name="com.huawei.intent.action.PUSH_ON" />
  •         <action android:name="com.huawei.android.push.PLUGIN" />
  •     </intent-filter>
  •     <intent-filter>
  •         <action android:name="android.intent.action.PACKAGE_ADDED" />
  •         <action android:name="android.intent.action.PACKAGE_REMOVED" />

  •         <data android:scheme="package" />
  •     </intent-filter>
  • </receiver>
  • <receiver
  •     android:name="com.huawei.android.pushagent.PushBootReceiver"
  •     android:process=":hwpushservice">
  •     <intent-filter>
  •         <action android:name="com.huawei.android.push.intent.REGISTER" />
  •         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  •     </intent-filter>

  •     <meta-data
  •         android:name="CS_cloud_version"
  •         android:value="\u0032\u0037\u0030\u0035" />
  • </receiver>

  • <!-- PushSDK:Push服务 -->
  • <service
  •     android:name="com.huawei.android.pushagent.PushService"
  •     android:process=":hwpushservice"/>

  • <!-- 以下是小米的 -->
  • <service
  •     android:name="com.xiaomi.push.service.XMPushService"
  •     android:enabled="true"
  •     android:process=":xmpushservice" />
  • <service
  •     android:name="com.xiaomi.push.service.XMJobService"
  •     android:enabled="true"
  •     android:exported="false"
  •     android:permission="android.permission.BIND_JOB_SERVICE"
  •     android:process=":xmpushservice" />
  • <!-- 注:此service必须在3.0.1版本以后(包括3.0.1版本)加入 -->
  • <service
  •     android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
  •     android:enabled="true"
  •     android:exported="true" />
  • <service
  •     android:name="com.xiaomi.mipush.sdk.MessageHandleService"
  •     android:enabled="true" />
  • <!-- 注:此service必须在2.2.5版本以后(包括2.2.5版本)加入 -->
  • <receiver
  •     android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
  •     android:exported="true">
  •     <intent-filter>
  •         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

  •         <category android:name="android.intent.category.DEFAULT" />
  •     </intent-filter>
  • </receiver>
  • <receiver
  •     android:name="com.xiaomi.push.service.receivers.PingReceiver"
  •     android:exported="false"
  •     android:process=":xmpushservice">
  •     <intent-filter>
  •         <action android:name="com.xiaomi.push.PING_T体育万博app下载_manbetx客户端网页版_bet万博网站ER" />
  •     </intent-filter>
  • </receiver>
  • <!-- 小米广播 -->
  • <receiver
  •     android:name=".service.XiaoMiPushReceiver"
  •     android:exported="true">
  •     <intent-filter>
  •         <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
  •     </intent-filter>
  •     <intent-filter>
  •         <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
  •     </intent-filter>
  •     <intent-filter>
  •         <action android:name="com.xiaomi.mipush.ERROR" />
  •     </intent-filter>
  • </receiver>
  • 1.3.4.3 调用华为小米推送API

    请在Applicaiton的onCreate函数中调用华为小米API如下

    二、体育万博app下载_manbetx客户端网页版_bet万博网站插件初始化和配置

    2.1 在onCreate()中初始化

    注意事项:请开发者拷贝下面两句代码到自己的application的onCreate()方法中,此步骤是为保证用户的app在自动登陆模式中的数据完整,如果后续引入多个插件,可在DaoHelper.init()中传入对应的插件IDao参数,如new VoipDao(),new 体育万博app下载_manbetx客户端网页版_bet万博网站Dao(), new CircleDao()等

  • //初始化插件上下文
  • SDKCoreHelper.setContext(this);
  • //初始化数据库
  • DaoHelper.init(this,new 体育万博app下载_manbetx客户端网页版_bet万博网站Dao());
  • 2.2 体育万博app下载_manbetx客户端网页版_bet万博网站功能配置

    2.2.1 功能配置简介

    体育万博app下载_manbetx客户端网页版_bet万博网站功能配置代码必须放置在开发者的application的onCreate()方法中,分为文档2.3.2必须配置和文档2.3.3建议配置。

    文档2.3.1为代码编写方式示例,共有方法1到方法6六个方法,六个方法的详细使用方法见文档2.3.2和2.3.3介绍:

    1) 推荐配置方式一
  • /**
  •  * 推荐配置方式1 链式调用
  •  * 第一步 先创建 体育万博app下载_manbetx客户端网页版_bet万博网站Configuration的实例
  •  * 第二步 添加到体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().init(体育万博app下载_manbetx客户端网页版_bet万博网站Configuration的实例)
  •  * 注意事项:下面的方法可以根据需求进行配置,详情见文档后面接口讲解
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站Configuration imConfiguration = new 体育万博app下载_manbetx客户端网页版_bet万博网站Configuration.体育万博app下载_manbetx客户端网页版_bet万博网站ConfigBuilder(this)
  • /** 方法1 ↓ */
  • .setOnNotificationClickListener(onNotificationClickListener)
  • /** 方法2 ↓*/
  • .setOnReturnIdsClickListener(onReturnIdsClickListener)
  • /** 方法3 ↓*/
  • .setOn体育万博app下载_manbetx客户端网页版_bet万博网站BindViewListener(on体育万博app下载_manbetx客户端网页版_bet万博网站BindViewListener)
  • /** 方法4 ↓*/
  • .imPanel(panel1,panel2)
  • /** 方法5 ↓*/
  • .notifyIcon(R.mipmap.ic_launcher)
  • /** 方法6 ↓*/
  • .setOnBindViewHolderListener(mBindViewHolderListner)
  • /** 方法7 ↓*/
  • .setOnMessagePreproccessListener(mOnMessagePreproccessListener)
  •  
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().init(imConfiguration);
  • 2) 推荐配置方式二

    注意事项:推荐配置二 不再过多介绍,详见体育万博app下载_manbetx客户端网页版_bet万博网站Demo中体育万博app下载_manbetx客户端网页版_bet万博网站Application中

  • /**
  •  * 推荐配置方式  同为链式调用,但创建统一的接口实现类,在实现类中配置接口的方法
  •  * 第一步 先创建 体育万博app下载_manbetx客户端网页版_bet万博网站Configuration的实例
  •  * 第二步 添加到体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().init(体育万博app下载_manbetx客户端网页版_bet万博网站Configuration的实例);
  •  * 注意事项:下面的方法可以根据需求进行配置,详情见文档后面接口讲解
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站Configuration imConfiguration = new 体育万博app下载_manbetx客户端网页版_bet万博网站Configuration.体育万博app下载_manbetx客户端网页版_bet万博网站ConfigBuilder(this)
  • /** 方法1 ↓ */
  • .setOn体育万博app下载_manbetx客户端网页版_bet万博网站BindViewListener(体育万博app下载_manbetx客户端网页版_bet万博网站ManagerImpl.getInstance())
  • /** 方法2 ↓ */
  • .setOnNotificationClickListener(体育万博app下载_manbetx客户端网页版_bet万博网站ManagerImpl.getInstance())
  • /** 方法3 ↓ */
  • .setOnReturnIdsClickListener(体育万博app下载_manbetx客户端网页版_bet万博网站ManagerImpl.getInstance())
  • /** 方法4 ↓ */
  • .imPanel(panel1,panel2)
  • /** 方法5 ↓ */
  • .notifyIcon(R.drawable.ic_launcher)
  • /** 方法6 ↓*/
  • .setOnBindViewHolderListener(mBindViewHolderListner)
  • /** 方法7 ↓*/
  • .setOnMessagePreproccessListener(mOnMessagePreproccessListener)
  • .build();
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().init(imConfiguration);
  • 2.2.2 必须配置

    1)(方法1)配置体育万博app下载_manbetx客户端网页版_bet万博网站通知消息点击事件

    作用位置:

    注意事项:点击事件中,开发者只需要配置好intent。指定跳转的页面及传递的数据,开发者不需要调用startActivity()

  • private OnNotificationClickListener onNotificationClickListener =
  • new OnNotificationClickListener() {
  •     /**
  •      * 此方法为 设置体育万博app下载_manbetx客户端网页版_bet万博网站通知消息点击事件,如果不配置默认跳转到聊天页面
  •      * @param context
  •      * @param contactId 如果是单聊通知消息则是聊天对象的userID,若是群组消息则是groupID
  •      * @param intent 用来跳转页面的intent 开发者来指定跳转的页面
  •      */
  •     @Override
  •     public void onNotificationClick(Context context,String contactId,Intent intent) {
  •         // 代码示例,开发者只需要配置好intent,指定跳转的页面及传递的数据 开发者不需要调用startActivity()
  •         intent.setClassName(context,"com.example.erica.imdemo.MainActivity");
  •         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  •         intent.putExtra("contactId", contactId);
  •         }
  •     };
  • 提示:开发者在自己指定的页面可以根据contactID来再一次使用下面所示方法跳转到聊天页面,如此页面过渡会较为顺滑;也可以不进一步跳转,开发者可根据需求自定义。代码示例如下:

  • String contactId = intent.getStringExtra("contactId");
  • if (TextUtils.isEmpty(contactId)) {
  •     return;
  • }
  • /**
  •  * 获取到contactID后调用该方法,方法为自动判断是单聊还是群聊,然后打开页面
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().startChatting(mContext,contactId);
  • 2)(方法2)配置添加成员和转发消息事件

    作用位置(添加成员):

    注意事项:单聊信息里的加号是为创建群组,群组信息里加号是添加群成员

     

    作用位置(转发消息):

    a 声明回调和设置监听事件(配置页面)

    使用场景:先声明静态成员变量,返回id的回调onReturnIdsCallBack,然后设置监听事件

    //返回Id的回调

    public static OnReturnIdsCallback onReturnIdsCallback;


  • //.........


  • //设置 返回id  的监听事件
  • private OnReturnIdsClickListener onReturnIdsClickListener =
  • new OnReturnIdsClickListener() {
  •     /**
  •     * 此方法为 设置 返回id点击操作 (如添加成员 和 转发事件)点击事件
  •     * @param context
  •     * @param return_type RETURN_TYPE.ADDMEMBER_USERID 为 添加成员点击事件
  •     *                    RETURN_TYPE.TRANSMIT_CONTACTID 为 转发消息点击事件
  •     * @param callback 返回id 的回调
  •     * @param userIds 可变数组 加号点击时,单聊抛出聊天对象的id
  •     *                群聊抛出群组的所有成员的ids
  • */
  •     @Override
  •     public void onReturnIdsClick(Context context, RETURN_TYPE return_type,  OnReturnIdsCallback callback, String... userIds) {
  •         onReturnIdsCallback=callback;
  •         //当转发和增加群成员用于同个界面时,用当前枚举做判断
  •         if(return_type==RETURN_TYPE.ADDMEMBER_USERID){
  •             //跳转到开发者指定的添加成员的页面
  •         }else if(return_type==RETURN_TYPE.TRANSMIT_CONTACTID){
  •             //跳转到开发者指定的转发消息的页面
  •         }
  • for (String userId : userIds) {
  •              LogUtil.i(userId + "");
  •         }
  •       }
  •    };
  • b 返回选取值(跳转页面)

    注意事项:1、请开发者用 声明onReturnIdsCallBack 所在的applicaton名字替换下面方法中的体育万博app下载_manbetx客户端网页版_bet万博网站Application

                       2、调用该方法,可以传入字符串或者字符串数组,如果是转发消息,传入的字符串可以包括群组groupId和任意用户userID;如果是添加成员,传入的只能是任意用户userID

    使用场景:点击添加成员或者转发信息按钮,跳转到开发者在onReturnIdsClick()指定的页面,选取需要转发消息或者添加成员的id后,调用该方法

  • /**
  •  * 此方法是为 返回 转发消息对象 contactId
  •  * MainActivity代表 返回id回调  所在的页面 
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站Application.onReturnIdsCallback.returnIds(contactIds);
  • 3)(方法3)配置昵称、头像及点击事件

    作用位置:

    使用场景:如果不配置方法3,那么默认把userId当做昵称,头像使用默认头像,头像默认不能点击

  • //此方法为 初始化头像,昵称,头像点击事件的
  • private On体育万博app下载_manbetx客户端网页版_bet万博网站BindViewListener on体育万博app下载_manbetx客户端网页版_bet万博网站BindViewListener =
  • new On体育万博app下载_manbetx客户端网页版_bet万博网站BindViewListener() {

  •    /**
  •     * 此方法是为 设置聊天对象昵称
  •     * @param context
  •     * @param userId  聊天对象的userId
  •     */
  •     @Override
  •     public String onBindNickName(Context context, String userId) {
  •         //此处由开发者设置昵称,不设置则默认使用userId作为昵称
  •         //示例
  •         //userIdList为开发者的userId集合
  •         List<String> userIdList = new ArrayList<String>();
  •         for (String s : userIdList) {
  •             if (s == userId) {
  •                 return "开发者查询后定义的昵称";
  •             } 
  •         }
  •         return null;
  •     }
  • /**
  •     * 此方法是为 配置聊天对象的头像
  •     * @param context
  •     * @param avatar  聊天对象 头像的显示控件 ImageView
  •     * @param userId  聊天对象的userId
  • * @return 返回值为头像的 url 地址
  •     */
  •     @Override
  •     public String onBindAvatarByUrl(Context context, String userId) {
  •          //代码示例
  •          String url=HeadList.get(3);
  •          if(userId.equals("5555")){
  •               url=HeadList.get(0);
  •          }else if(userId.equals("4444")){
  •               url=HeadList.get(1);
  •         }
  •         return url ;
  • }
  •     /**
  •     * 此方法是为 配置聊天对象的头像点击事件
  •     * @param context
  •     * @param userId  聊天对象的userId
  •     */
  •     @Override
  •     public void OnAvatarClickListener(Context context, String userId) {
  •         //此处由开发者设置头像点击事件,不设置则默认头像点击无效
  •         //示例
  •         Intent intent = new Intent();
  •         intent.setClassName(context, "com.yuntongxun.plugin.im.ui.contact.SinglePersonInfo");
  •         intent.putExtra("userId", userId);
  •         startActivity(intent);
  •      }
  •    };
  • 2.2.3 建议配置

    1)(方法4)聊天界面底部面板的扩展

    作用位置:

    使用场景:如果开发者需要扩展聊天页面底部面板的功能时,请在体育万博app下载_manbetx客户端网页版_bet万博网站Configuration中按照本步骤进行配置

    a 创建体育万博app下载_manbetx客户端网页版_bet万博网站Panel实例

  • //此Bean是 聊天界面底部面板的基类
  • 体育万博app下载_manbetx客户端网页版_bet万博网站Panel imPanel = new 体育万博app下载_manbetx客户端网页版_bet万博网站Panel
  •         /**
  •          * @params String panel 的名字
  •          * @params int 图片的资源id
  •          * @params int panel的类型 三种选择
  •          * 体育万博app下载_manbetx客户端网页版_bet万博网站Panel.PANELTYPE.SINGLECHAT, 表示添加到单聊
  •          * 体育万博app下载_manbetx客户端网页版_bet万博网站Panel.PANELTYPE.GROUPCHAT,表示添加到群聊
  •          * 体育万博app下载_manbetx客户端网页版_bet万博网站Panel.PANELTYPE.BOTH,表示两者均添加
  •          */
  •         .PanelBuilder("panel的名字", R.drawable.ic_launcher, 体育万博app下载_manbetx客户端网页版_bet万博网站Panel.PANELTYPE.GROUPCHAT)
  •         //此方法为 设置panel 点击事件
  •         .setOn体育万博app下载_manbetx客户端网页版_bet万博网站PannelClickListener(new On体育万博app下载_manbetx客户端网页版_bet万博网站PanelClickListener() {
  • /**
  •            * 此方法是为 设置扩展条目的 点击事件
  •            * @param context
  •            * @param contactId单聊时代表聊天对象的userId 群聊时代表群组的groupId
  • */
  •             @Override
  •             public void on体育万博app下载_manbetx客户端网页版_bet万博网站PannelClick(Context context, String contactId) {
  • //此处开发者进行点击事件的处理 示例: 
  •                 ToastUtil.showMessage("测试");
  •             }
  •         }).build();
  • b 添加到addPanel()

  • /**
  • * 此方法为了 把开发者创建的体育万博app下载_manbetx客户端网页版_bet万博网站Panel实例添加到聊天界面底部面板
  •      * @params ImPanel... 为可变数组,可填入多个体育万博app下载_manbetx客户端网页版_bet万博网站Panel对象
  •      */
  • .imPanel(imPanel)
  • 2)(方法5)配置通知栏中消息图标
  • /**
  • * 此方法是为了 配置通知栏中的消息图标,不配置使用默认的
  • * @param int 图片资源的Id
  • */
  • .notifyIcon("图片资源Id")
  •  

    3)(方法6)自定义聊天列表UI接口

     具体实现参考Demo(OnBindViewHolderListenerImpl.java)

     

  • // 沟通列表和聊天列表的UI自定义接口
  • .setOnBindViewHolderListener(mBindViewHolderListner)
  •  
  • /**
  •  * This is the implementation of custom UI
  •  */
  • private OnBindViewHolderListener mBindViewHolderListner = new OnBindViewHolderListenerImpl();  
  • 4)(方法7)设置消息转发接口

    作用:当收到体育万博app下载_manbetx客户端网页版_bet万博网站消息之后可以自定义实现该消息的处理方式(1.开发者处理该消息,2.交给插件内部处理)

     

  • // 体育万博app下载_manbetx客户端网页版_bet万博网站消息转发接口
  • .setOnMessagePreproccessListener(mOnMessagePreproccessListener)
  •  
  • private OnMessagePreproccessListener mOnMessagePreproccessListener = new OnMessagePreproccessListener() {
  •     @Override
  •     public boolean dispatchMessage(ECMessage message) {
  •         // 返回true意义是消费当前这条消息不交给插件内部处理,返回false意义是交给插件进行处理
  •         if (message.getForm().equals("10086")) {
  •             LogUtil.d(TAG, "dispatchMessage 10086...");
  •             return true;
  •         }
  •         return false;
  •     }
  • };
  •  
  • 5) 配置未读消息数量改变的监听

    作用位置:

    注意事项:结合文档5.1使用

    使用场景:如果开发者需要根据未读消息数量来更新某个界面(如ConversationActivity)的控件,那么该页面需要实现OnUpdateMsgUnreadCountsListener接口,在OnUpdateMsgUnreadCounts()中调用文档5.1后获取到消息数量,然后更新控件角标。

  • /**
  •   * 此监听用于未读消息数量变化
  •  * 用法:需要根据未读消息数量来对界面UI刷新的页面实现 
  •  *       OnUpdateMsgUnreadCountsListener 此方法结合文档4.2.1使用
  •  */
  • public class ConversationActivity extends Activity implements OnUpdateMsgUnreadCountsListener {
  •     @Override
  •     public void OnUpdateMsgUnreadCounts() {
  •         //里面调用方法获取未读消息数量之后,设置角标
  •         //示例:结合 获取未读消息使用
  •         int count = 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().getUnReadMsgCount();
  •         unReadMsg.setText("未读消息=" + count);
  •     }
  •     //.........
  • }
  • 三、登录和登出

    3.1 登录

    注意事项:

    如果接入前已经使用容联云的其他插件,如plugin_voip等,已配置过登录,那么无需再次登录,请直接跳转到可接入界面

    如果要使用私有云,那么服务器的地址书写格式请参考体育万博app下载_manbetx客户端网页版_bet万博网站Demo的assets目录下的文件(位置如下图所示)

    3.1.1 登录

    登录分两种模式:

    1)强制登入

    2)自动登入

    1) 登入(强制登入/自动登入方式)

    两个接口区别是强制登入需要传用户信息,自动登入的是使用上一次的用户信息登入

     

    强制登入:一般用于App首次使用填写完用户账号密码之后使用 如下接口

    注:公有云和专有云客户,第二个参数传null即可,私有云客户需要配置。

  • SDKCoreHelper.login(builder.build(), "server_config_sd.xml");
  •  

    自动登入:一般用于不需要进行用户账号密码填写应用主页地方使用 如下接口

     

  • ClientUser.UserBuilder builder = new ClientUser.UserBuilder(account, name);
  • builder.setAppKey("appId");// AppId
  • builder.setAppToken("appToken");// AppToken
  • builder.setPwd("userPassword");// Password可以不传,自动登录不校验密码

  • if (AppMgr.getClientUser() != null) {
  •     LogUtil.d(TAG, "SDK auto connect...");
  •     SDKCoreHelper.init(getApplicationContext());
  • }
  • 完整登入逻辑代码如下(强制登入):
  • ClientUser.UserBuilder builder = new ClientUser.UserBuilder(account, name);
  • builder.setAppKey("appId");// AppId
  • builder.setAppToken("appToken");// AppToken
  • builder.setPwd("userPassword");// Password不为空情况即通讯账号密码登入

  • // SDK连接登入 
  • //参数一:用户信息参数 参数二:配置私有云地址(传null即为公有云登入)
  • SDKCoreHelper.login(builder.build(), "server_config_sd.xml");
  • 3.1.2 获取登录状态

    1) 注册获取登录状态的广播接收者
  • IntentFilter intentFilter = new IntentFilter();
  • intentFilter.addAction(SDKCoreHelper.ACTION_SDK_CONNECT);
  • registerReceiver(mSDKNotifyReceiver, intentFilter);
  •  
  • private BroadcastReceiver mSDKNotifyReceiver = new BroadcastReceiver() {
  •     @Override
  •     public void onReceive(Context context, Intent intent) {
  •         if (SDKCoreHelper.ACTION_SDK_CONNECT.equals(intent.getAction())) {
  •             if (SDKCoreHelper.isLoginSuccess(intent)) {
  •                 String pushToken = ECPreferences.getSharedPreferences().getString("pushToken", null);
  •                 LogUtil.d(TAG, "SDK connect Success ,reportToken:" + pushToken);
  •                 if (!TextUtils.isEmpty(pushToken)) {
  •                     // 上报华为/小米推送设备token
  •                     ECDevice.reportHuaWeiToken(pushToken);
  •                 }
  •                // 初始化体育万博app下载_manbetx客户端网页版_bet万博网站数据库
  •                 DaoHelper.init(LoginActivity.this, new 体育万博app下载_manbetx客户端网页版_bet万博网站Dao());
  •             } else {
  •                 int error = intent.getIntExtra("error", 0);
  •                 if (error == SdkErrorCode.CONNECTING) return;
  •                 dismissDialog();
  •                 LogUtil.e(TAG, "登入失败[" + error + "]");
  •                 ToastUtil.showMessage("登入失败[" + error + "]");
  •             }
  •         }
  •     }
  • };
  •  
  • 2) 注销获取登录状态的广播接收者
  • @Override
  • protected void onDestroy() {
  •     super.onDestroy();
  •     // 注销广播
  •     unregisterReceiver(mSDKNotifyReceiver);
  • }
  • 3) 登录成功后立即初始化数据库

    注意事项:代码必须写在实现了获知登录成功方法中如1)方法所示,如果后续引入多个插件,可在DaoHelper.init()中传入对应的插件IDao参数,如new VoipDao(),new 体育万博app下载_manbetx客户端网页版_bet万博网站Dao(), new CircleDao()等,本步骤与2.1不重复,不重复,不重复,重要的事情……

  • /**
  •   * 此方法为创建数据表并初始化数据库
  •  * @param context
  •  * @param IDao... IDao可变数组
  •  */
  • DaoHelper.init(this, new 体育万博app下载_manbetx客户端网页版_bet万博网站Dao());
  • 3.1.3 获取异地登录状态

    1) 注册获取异地登录状态的广播接收者
  • IntentFilter intentFilter = new IntentFilter();
  • intentFilter.addAction(SDKCoreHelper.ACTION_SDK_CONNECT);// SDK状态广播
  • intentFilter.addAction(RongXInUtils.ACTION_KICK_OFF);// 账号异地登入广播
  •  
  • private BroadcastReceiver mSDKNotifyReceiver = new BroadcastReceiver() {
  •     @Override
  •     public void onReceive(Context context, Intent intent) {
  •         if (RongXInUtils.ACTION_KICK_OFF.equals(intent.getAction())) {
  •             //代码示例
  •             ToastUtil.showMessage("您的账号被他人登陆,请确定您的账号安全");
  •             startActivity(new Intent(MainActivity.this, LoginActivity.class));
  •             finish();
  •         }
  •     }
  • };
  •  
  • 2) 注销获取异地登录状态的广播接收者
  • @Override
  • protected void onDestroy() {
  •     super.onDestroy();
  •     // 注销广播
  •     unregisterReceiver(mSDKNotifyReceiver);
  • }
  • 3.2 登出

  • /**
  •  * 此方法为退出当前登录账户
  •  */
  • SDKCoreHelper.logout();
  •  
  • 四、可接入界面

    4.1 会话列表(ConversationListFragment)

    体育万博app下载_manbetx客户端网页版_bet万博网站插件提供会话列表(ConversationListFragment),开发者可根据需求接入在自己的项目中,使用示例:

  • /**
  •  *   在开发者指定的activity中复制下面代码,
  •  *   会话列表如果需要topbar,那么putboolean()中传true
  •  */
  • Bundle bundle = new Bundle();
  • bundle.putBoolean(ConversationListFragment.EXTRA_SHOW_TITLE, false);
  • Fragment mFragment = Fragment.instantiate(this, 
  •         ConversationListFragment.class.getName(), bundle);
  • getSupportFragmentManager()
  •         .beginTransaction()
  •         .add(R.id.convert_frame, mFragment)
  •         .commit();
  • 效果图如下:

    页面功能:

    1、显示单聊或者群聊消息;

    2、单击列表中Item进入对应的单聊或者群聊里面;

    3、长按列表中Item,若是单聊会提示删除该聊天,群聊会提示删除该聊天和设置免打扰;

    4、自动根据每个会话的未读消息的在列表对应的Item上显示未读数量;

    5、其他功能。

    4.2群组列表(GroupListFragment)

    如果开发者需要群组列表,可接入体育万博app下载_manbetx客户端网页版_bet万博网站插件中提供的GroupListFragment

    使用示例:

    /**

      * 开发者在容器activity中按照一般fragment嵌入得方法使用

     */

    getSupportFragmentManager().beginTransaction()

            .add(R.id.convert_frame, Fragment.instantiate(this,

                    GroupListFragment.class.getName(), null)).commit();

    其效果图如下图:

    页面功能:

    1、显示我的群组信息;

    2、单击列表中Item进入对应的群组页面;

    3、实时根据我的群组数量刷新页面显示的群组;

    4、其他功能。

    五、主动调用的方法

    5.1 获取未读消息

    注意事项:结合文档配置未读消息数量改变的监听使用

    使用场景:1)在开发者完成文档配置未读消息数量改变的监听后,在OnUpdateMsgUnreadCounts()中调用改方法;

                       2) 需要获取未读消息的总数量时调用

  • /**
  •  * 此方法可主动调用,用于获取全部未读消息的数量
  •  * @return 类型:int 作用:可提示的全部未读信息的数量
  •  */
  • int unReadMsgCount = 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().getUnReadMsgCount();
  • 5.2 发起单聊

    使用场景:开发者若需要和某人发起聊天,可主动调用该方法,需传入聊天对象的userId

  • /**
  •  * 发起单聊
  •  * @param context 类型:上下文
  •  * @param userId 类型:String 传入:指定聊天对象的userID
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().startChatting(context,"与之聊天的userId");
  • 5.3 发起群聊

    使用场景:开发者若需要创建群组,可主动调用该方法,传入需要添加进群的userId的字符串集合或者数组,注意:无需传入创建者(自己)的userId

  • /**
  •  * 此方法为发起群聊
  •  * @params Context 上下文
  •  * @params 第二个参数 可以为List<String> 也可以为 String[] 两者均盛装需添加进群的userId
  •  * @params OnCreateGroupStateListener  创建群组的状态监听器
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().startChatting(context, list, new OnCreateGroupStateListener() {
  •     // 创建开始
  •     @Override
  •     public void onStart() {
  •         // 开发者根据实际情况处理
  •     }
  •     // 创建成功
  •     @Override
  •     public void onSuccess(Context context, String groupId) {
  •         // 开发者根据实际情况处理
  •     }
  •     // 创建失败
  •     @Override
  •     public void onFailed() {
  •         // 开发者根据实际情况处理
  •     }

  • });
  • 5.4 根据groupID获取群成员

    使用场景:譬如开发者在群聊页面底部面板添加发起视频会议按钮,选取发起视频对象前,可能需要知道本群的全部成员时,可调用此方法

  • /**
  •  * @param groupID 群组的groupID
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().getGroupMember(groupID);
  • 5.5 体育万博app下载_manbetx客户端网页版_bet万博网站全局设置

    作用位置:(此图为示例,实际页面应是开发者的设置页面)

    注意事项:如果把1)接收新消息通知设置为false,那么2)声音提示新消息和3)震动提示新消息也会强制设置为false

    使用场景:开发者应把这些设置放置在自己的某个页面内来进行全局设置体育万博app下载_manbetx客户端网页版_bet万博网站,根据下面提供的方法来进行设置,并根据5.5来获取这些设置的状态,更新开发者的这些开关状态。true打开,false关闭,默认是true, 

    1) 接收新消息通知

  • /**
  •  * 关闭/开启 消息通知
  •  * @param boolean 开启true 关闭false
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().setReceiveMessagesNotify(true);
  • 2) 声音提示新消息

  • /**
  •   * 接收到新消息时使用声音提醒,开启true 关闭false
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().useSoundToNotify(true);
  • 3) 震动提示新消息

  • /**
  •   * 接收到新消息时使用震动提醒,开启true 关闭false
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().useShakeToNotify(true);
  • 4) 听筒/扬声器接听语音

  • /**
  •   * 默认使用听筒播放声音,设置false后使用外音
  •  * @param value
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().useHandSetToPlayVoice(true);
  • 5) 清除所有聊天记录

  • /**
  •   * 清除所有聊天记录
  •  */
  • 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().clearAllChatRecord();
  • 5.6 体育万博app下载_manbetx客户端网页版_bet万博网站全局设置状态的获取

    使用场景:开发者若需要获取下列设置的状态来配置自己的设置页面,则可以调用对应的方法对自己设置页面的控件更新

    1) 获取接收新消息设置的状态

  • /**
  •  * 获取 接收新消息设置 的状态 ture为打开,默认为true
  •  */
  • boolean receiveMessagesNotifyState = 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().getReceiveMessagesNotifyState();
  • 2) 获取声音提示设置的状态

  • /**
  •  * 获取 声音提示新消息设置 的状态 ture为打开,默认为true
  •  */
  • boolean soundNotifyState = 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().getSoundNotifyState();
  • 3) 获取震动提示设置的状态

  • /**
  •  * 获取 震动提示新消息设置 的状态 true为打开,默认为true
  •  */
  • boolean shakeNotifyState = 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().getShakeNotifyState();
  • 4) 获取听筒接听语音设置的状态

  • /**
  •  * 获取 听筒接收语音设置 的状态 true为打开,默认为true
  •  */
  • boolean handSetSate = 体育万博app下载_manbetx客户端网页版_bet万博网站PluginManager.getManager().getHandSetSate();
  • 六、更换UI

    6.1 接口更换UI

    1) topbar的背景颜色

    体育万博app下载_manbetx客户端网页版_bet万博网站Configuration imConfiguration = new 体育万博app下载_manbetx客户端网页版_bet万博网站Configuration.体育万博app下载_manbetx客户端网页版_bet万博网站ConfigBuilder(this)

            //......

            /**

             *@param int 设置topbar的背景颜色

             */

             .topBarBackgroundColorRecource(R.color.appid_color)

    2) topbar的文字颜色

    /**

      * @param int 设置topbar的标题颜色

     */

    .topBarTitleColorResource(R.color.ccp_green)

    3) topbar副标题的文字颜色

    /**

      * @param int 设置tobar副标题的颜色

     */

    .topBarSubTitleColorResource(R.color.ccp_green)

    4) topbar右边文字的颜色

  • /**
  •  * @param int 设置topbar右边文字的颜色
  •  */
  • .topBarRightTextColorResource(R.color.ccp_green)
  • 5) topbar左边的按钮

  • /**
  •  * @param int 设置topbar左边按钮
  •  */
  • .topBarLeftImageDrawableResource(R.drawable.ic_launcher)
  • 6) 群聊页面右边的按钮

  • /**
  •  * @param int 设置群聊页面topbar右边的按钮
  •  */
  • .topBarGroupImageDrawableResource(R.drawable.emoji_1f3c1)
  • 7) 单聊页面右边的按钮

  • /**
  •  * @param int 设置单聊页面topbar右边的按钮
  •  */
  • .topBarSingleImageDrawableResource(R.drawable.emoji_1f3c2)
  • 8) 聊天页面系统提示布局的背景颜色

  • /**
  •  * @param int 设置聊天页面系统提示布局的背景颜色
  •  */
  • .chatTipsBackgroundColorResource(R.color.ccp_green)
  • 9) 聊天页面系统提示文字的颜色

  • /**
  •  * @param int 设置聊天页面系统文字的颜色
  •  */
  • .chatTipsTextColorResource(R.color.white)
  • 10) 成员的默认头像

  • /**
  •  * @param int 设置成员的默认头像
  •  */
  • .defaultAvaterResource(R.drawable.ic_launcher)
  • 11) 群组的默认头像

  • /**
  •  * @param int 设置群组的默认头像
  •  */
  • .defaultGroupAvaterResource(R.drawable.ic_launcher)