====== Android 客服工作台 SDK ====== ===== 开发工具 ===== > Android Studio 开源Demo源码:[[https://github.com/easemob/kefu-agent-android/]] ==== 目录 ==== * 入门指南 * [[#build.gradle 配置|build.gradle 配置]] * [[#初始化|初始化]] * [[#登录|登录]] * [[#退出方法|退出]] * [[#添加移除事件监听|添加移除事件监听]] * [[#设置调试模式|日志]] * [[#判断是否已经登录|登录状态]] * [[#添加网络监听,可以显示当前是否连接服务器|网络监听]] * [[#添加小米推送|添加小米推送]] * [[#添加华为推送|添加华为推送]] * [[#混淆文件|打包混淆]] * [[#更多功能|更多功能]] === build.gradle 配置 === 添加依赖,在app的build.gradle 中dependencies中加入如下(添加后需同步gradle): android{ ...... defaultConfig { ndk { //选择要添加的对应cpu类型的.so库 abiFilters 'armeabi', 'arm64-v8a' //还可以添加 'armeabi-v7a', 'x86' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //环信坐席端SDK implementation 'com.easemob:kefu-agentsdk-android:1.0.9r2' implementation 'com.google.code.gson:gson:2.8.5' } **注意** 如果在添加以上abiFilter配置后AndroidStudio有如下提示: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. 则需要在Project根目录的gradle.properties文件中添加: android.useDeprecatedNdk=true === 初始化 === > 初始化需要在Application中调用,HDClient的其他方法也都需要在他后面调用 例如:DebugMode、网络通知,消息通知等 HDClient.getInstance().init(this); === 设置调试模式 === // 设置为true后,将打印日志到logcat, 发布APP时应关闭该选项 HDClient.getInstance().setDebugMode(true);; === 登录 === //uName 登录账号 uPwd 登录密码 isHiddenLogin[false|true] 在线登录|隐身登录 HDClient.getInstance().login(uName, uPwd, isHiddenLogin, new HDDataCallBack() {}); === 添加移除事件监听 === //事件监听,由新消息,新会话,会话关闭,账号被删除等事件组成 HDClient.getInstance().chatManager().addEventListener(eventListener); HDClient.getInstance().chatManager().removeEventListener(eventListener); === 判断是否已经登录 === //APP只需要登录一次,SDK会协助自动登录,因此在进入APP时需要判断是否登录过 if(HDClient.getInstance().isLoggedInBefore()){ //已经登录,可以直接进入主界面 }else{ //未登录,需要登录后,再进入主界面 } === 退出方法 === > 登出后应退出客服系统或跳转到登录界面 HDClient.getInstance().logout(new HDDataCallBack() {}); === 添加网络监听,可以显示当前是否连接服务器 === connectionListener = new HDConnectionListener() { @Override public void onConnected() { runOnUiThread(new Runnable() { @Override public void run() { // 正常连接到服务器 } }); } @Override public void onAuthenticationFailed(int errorCode) { runOnUiThread(new Runnable() { @Override public void run() { // 认证失败,可能为账号被删除,可能为服务器强制下线,可能为在其他地方登录,总之,需要退到登录界面即可,此处无需再调用退出方法,直接跳转登录界面即可。 } }); } @Override public void onDisconnected() { runOnUiThread(new Runnable() { @Override public void run() { //连接不到服务器,可能为网络不可用,可能为服务器有问题 } }); } }; HDClient.getInstance().addConnectionListener(connectionListener); //如果添加到某个Activity,需要在Activity的onDestory方法调用移除监听 if (connectionListener != null){ HDClient.getInstance().removeConnectionListener(connectionListener); } === 添加小米推送 === * AndroidManifest.xml配置 * 添加MiPush.jar到项目的libs文件夹中 == AndroidManifest.xml配置 == ... ... ... === 添加华为推送 === ===== 华为HMS推送集成 ===== 按照下面的说明重新集成 HMS 推送服务; PS:集成时需要''删除''之前的华为''jar''包和推送代码,并下载新版''HMS SDK''引用到自己的项目中,其中''Base''和''Push''两个库是必须的,其他的可以参考华为官方介绍自己决定是否添加 ==== 创建华为应用 ==== 首先就是去华为开发者后台创建应用,并开启 push 服务,并上传对应的证书指纹,具体可以看下华为官方介绍:[[http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devprepare| 华为HMS消息推送服务集成]] ==== 上传推送证书 ==== 注册完整后,需要在[[http://console.easemob.com|环信开发者后台]]上传推送证书,选择你的应用—>推送证书—>Huawei—>新增证书,然后输入你在[[http://developer.huawei.com/consumer/cn/devunion/openPlatform/html/memberCenter.html#/appManager|华为开发者后台]]创建的应用的''APPID''和''APP SECRET''; ==== 客户端配置 HMS ==== 然后SDK 这里对 HMS 注册华为推送 token 进行了封装,集成时还是比较简单的,只需要在 AndroidManifest.xml 配置文件配置相关广播接收器和服务等: 记得设置自己的在''华为开发者后''台创建的应用的''APP ID'' PS:在自己实现广播接收器的时候必须继承自环信封装的那个广播接收器''com.hyphenate.chat.EMHWPushReceiver'',否则收不到环信的离线推送 配置完这些之后,在''满足条件的华为设备''上就可以使用华为推送接收离线推送通知了; ==== 故障排查 ==== 当开发者做完这些之后如果在华为设备上还是收不到推送,可以看下控制台的输出,或者环信 sdcard 上保存的日志,是否有一下日志输出: // 当设备的华为移动服务版本比较低的时候,无法启用华为推送,会有以下输出 D/ONE SDK: [EMPushHelper] huawei mobile services is not available. please upgrade // 当注册 token 时,华为开发者后台证书不对应,或者没有开通 Push 服务,当所有的都确认没问题后,如果还是有这样的问题,这个需要联系华为技术支持查看下是否生效 D/ONE SDK: hms service connection suspended. error: 6xxx 或 9xxxxxxxx 后边的 error 为华为官方错误码,更多错误码请参考华为官方错误表:[[http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devguide#表3-1 HMS 通用错误码及处理方式|表3-1 HMS 通用错误码及处理方式]] ----- == 混淆文件 == 混淆添加到proguard-rules.pro中 #环信客服 -keep class com.hyphenate.** {*;} -dontwarn com.hyphenate.** #gson -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.stream.* { *; } -keep class com.google.gson.examples.android.model.* { *; } -keep class com.google.gson.* { *;} #nineoldandroids -dontwarn com.nineoldandroids.* -keep class com.nineoldandroids.** { *;} #butterknife -keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; } -keepclasseswithmembernames class * { @butterknife.* ; } -keepclasseswithmembernames class * { @butterknife.* ; } #okhttp -dontwarn com.squareup.okhttp.** -keep class com.squareup.okhttp.** { *;} -dontwarn okio.** -keep interface com.squareup.okhttp.** { *; } -dontwarn com.squareup.okhttp.** #okhttp3 -dontwarn com.squareup.okhttp3.** -keep class com.squareup.okhttp3.** { *;} -dontwarn okio.** #glide -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } #如添加华为push # Huawei push -keep class com.huawei.android.pushagent.** {*;} -keep class com.huawei.android.pushselfshow.** {*;} -keep class com.huawei.android.microkernel.** {*;} -keep class com.baidu.mapapi.** {*;} -keep class com.hianalytics.android.** {*;} -dontwarn com.huawei.android.pushagent.** -dontwarn com.huawei.android.pushselfshow.** -dontwarn com.huawei.android.microkernel.** -dontwarn com.github.mikephil.charting.data.** #如添加小米push #mipush -keep class com.xiaomi.push.** {*;} -dontwarn com.xiaomi.push.** -keepclasseswithmembernames class com.xiaomi.**{*;} -keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver ==== 更多功能 ==== 更多API,请参考API文档[[cs:300visitoraccess:androidagentapi|AndroidSDKAPI介绍]]