中通天鸿 Android SDK 是一个 Android 端客服系统访客解决方案,既包含了客服聊天逻辑管理,也提供了聊天界面,开发者可方便的将客服功能集成到自己的 APP 中。
下载demo、sdk包和接入文档,请查看github地址:https://github.com/ztthgly/mobile-android-im-sdk
只需简单 3 步,即可将客服功能加入你的 APP:
快速接入(包含逻辑界面以及Lib库)
Android Studio: 首先在project根目录的build.gralde中添加:
allprojects { repositories { ... //add this maven { url "https://github.com/ztthgly/mobile-android-im-sdk/raw/master" } ... } }
而后在对应Module的build.gradle 文件中添加依赖即可。
implementation 'net.icsoc.im:kit:+'
“+”为当前版本号
Eclipse接入:
先下载 SDK,然后解压缩,将得到的 kit和core对应的aar包导入到你的工程中的libs目录,而后build path即可。
public class YourApplication extends Application { public void onCreate() { // ... your codes // appKey 可以在中通天鸿->设置->APP接入 页面找到 ZTIMCore.init(this, "appKey"); // ... your codes //对应UI选项设置 ZTIMOptions options = new ZTIMOptions(); options.uiCustomization = uiCustomization(); IMKitCore.initOptions(this, options); } /** * 如果返回值为null或者对应属性值未设置,则使用默认参数。 * 对应可调整的UI属性,见UICustomization */ private UICustomization uiCustomization() { // 以下示例的图片均无版权,请勿使用 UICustomization customization = new UICustomization(); customization.msgBackgroundUri = R.mipmap.msg_bg; customization.msgItemBackgroundLeft = R.drawable.my_message_left_bg; customization.msgItemBackgroundRight = R.drawable.my_message_right_bg; customization.textMsgColorLeft = Color.BLACK; customization.textMsgColorRight = Color.WHITE; customization.hideLeftAvatar = false; customization.hideRightAvatar = false; customization.tipsTextColor = 0xFF76838F; return customization; } }
坐席端想了解APP用户信息,以及主动给用户发送消息,就需要APP关联用户信息 发送用户信息到客服端,调用_setUserInfo_实现
//用户信息包含tid,userName,以及avatar,分别对应用户唯一标识、昵称、头像 ZTIMUserInfo userInfo = new ZTIMUserInfo(); userInfo.tid = "用户唯一标识"; userInfo.userName = "用户昵称"; userInfo.avatar = "用户头像"; ZTIMCore.setUserInfo(userInfo); //建议将setUserInfo写在APP用户信息获取逻辑成功之后,注意tid为用户唯一标识符 //注:请务必调用该方法,否则无法确保用户唯一性
如若需要切换用户,请在_setUserInfo_前调用
ZTIMCore.logout(); //建议与APP登出操作逻辑同步
String title = "聊天窗口的标题"; /** * 设置访客来源,标识访客是从哪个页面发起咨询的,用于客服了解用户是从什么页面进入。 * 三个参数分别为:来源页面的url,来源页面标题,来源页面额外信息(保留字段,暂时无用)。 * 设置来源后,在客服会话界面的"用户资料"栏的页面项,可以看到这里设置的值。 */ ConsultSource source = new ConsultSource(); source.title = title; source.landingPageTitle = "当前APP端着陆页"; /** * @param context 上下文 * @param source 咨询的发起来源,包括发起咨询的title,描述信息等 */ IMKitCore.openServiceActivity(context, source); 在打开的页面中,用户就可以咨询客服了。
由于开发环境的不同,很多情况下会出现集成报错或者配置无效的问题。我们官网提供了demo源码,开发者可以参考源码;更多的时候是需要开发者自己本地调试代码,可以通过断点跟踪等基本且有效的方法来定位和排查问题。
假若APP想界面UI完全自定义也可单独引入lib库(常规接入逻辑如下,具体可参考kit源码)
根目录build.gralde与2.1一样
allprojects { repositories { ... //add this maven { url "https://github.com/ztthgly/mobile-android-im-sdk/raw/master" } ... } }
引入lib
implementation 'net.icsoc.im:core:+'
“+”为当前版本号
当用户APP需要界面完全自定义时,可单独引用lib库来实现。Application中对应初始化操作与步骤2相同,自定义界面设置步骤如下:
在对应Activity的界面的onCreate方法中添加
ZTIMCore.startService();
//用户信息包含tid,userName,以及avatar,分别对应用户唯一标识、昵称、头像 ZTIMUserInfo userInfo = new ZTIMUserInfo(); userInfo.tid = "用户唯一标识"; userInfo.userName = "用户昵称"; userInfo.avatar = "用户头像"; ZTIMCore.setUserInfo(userInfo); //建议将setUserInfo写在APP用户信息获取逻辑成功之后,注意tid为用户唯一标识符 //注:请务必调用该方法,否则无法确保用户唯一性
如若需要切换用户,请在_setUserInfo_前调用
ZTIMCore.logout(); //建议与APP登出操作逻辑同步
在对应Activity中添加
// IMessageSubscriber为当前消息接收监听 ConversationManager conversationManager = ZTIMCore.getConversationManager(); conversationManager.subscribe(this); // subscribe方法中传入IMessageSubscriber实现类,实现对应的方法即可收到对应的聊天消息
ConversationManager conversationManager = ZTIMCore.getConversationManager(); //通过conversationManager即可完成消息发送逻辑 //例如文本消息 conversationManager.setTextMessage("文字内容", MessageCallback);
为了咨询客服窗口的界面风格与集成中通天鸿IMSDK的APP能够尽量统一,中通天鸿IMSDK提供精简的UI自定义配置。 配置选项接口名为 UICustomization,配置参数放在 ZTIMOptions 的 uiCustomization 变量中,开发者可在初始化 SDK 或者在运行时任意时候修改配置,当需要与 SDK 提供的默认界面不一样表现的地方,就修改对应的项,否则不赋值即可,界面会保留默认表现。修改各设置项后,都需要等到下次进入会话界面才会看到相应的更改。
各配置项说明如下:
参数名 | 类型 | 参数说明 | 取值说明 |
---|---|---|---|
msgBackgroundUri | int | 客服消息窗口背景图片设置 | drawable resId |
msgBackgroundColor | int | 客服消息窗口背景颜色设置 | 32 位颜色值 |
hideLeftAvatar | boolean | 是否隐藏左边头像 | 默认为false,不隐藏 |
hideRightAvatar | boolean | 是否隐藏右边头像 | 默认为false,不隐藏 |
avatarShape | int | 头像对应形状风格 | 0为圆形,1为方形,默认为圆形 |
tipsTextColor | int | 提示类消息的字体颜色(包括分配客服消息,消息时间标签等) | 32 位颜色值 |
tipsTextSize | float | 提示类消息的字体大小(包括分配客服消息,消息时间标签等) | 单位为 sp |
msgItemBackgroundLeft | int | 客服聊天窗口,左边消息项背景 | drawable resId |
msgItemBackgroundRight | int | 客服聊天窗口,右边消息项背景 | drawable resId |
textMsgColorLeft | int | 客服聊天窗口, 左边文本消息的字体颜色 | 32 位颜色值 |
textMsgColorRight | int | 客服聊天窗口, 右边文本消息的字体颜色 | 32 位颜色值 |
textMsgSize | float | 文本消息的字体大小 | 单位为 sp |
titleBackgroundResId | int | 标题栏背景资源drawable | drawable resId |
titleBackgroundColor | int | 标题栏背景颜色 | 32 位颜色值 |
headerIcon | int | 标题栏显示logo | drawable resId |
hideHeaderIcon | boolean | 是否隐藏标题栏logo | 默认为false,不隐藏 |
headerTitle | String | 标题栏显示title | 默认为对应坐席昵称 |
hideHeaderTitle | boolean | 是否隐藏标题栏title | 默认为false,不隐藏 |
hideAudio | boolean | 是否隐藏语音按钮 | 默认为false,不隐藏 |
hideEmoji | boolean | 是否隐藏emoji表情按钮 | 默认为false,不隐藏 |
hideKeyboardOnEnterConsult | boolean | 是否进入咨询时隐藏键盘 | 默认为false,不隐藏 |
hidePhotographButton | boolean | 是否隐藏拍照按钮 | 默认为false,不隐藏 |
hideSendPictureButton | boolean | 是否隐藏相册选择按钮 | 默认为false,不隐藏 |
ZTIMCore中提供方法trackUserAccess(String title, boolean isEnterPage), 进入界面在Activity或者Fragment中添加
@Override protected void onResume() { super.onResume(); ZTIMCore.userTrackHistory("MainActivity", true); }
对应的离开该页面时
@Override protected void onPause() { super.onPause(); ZTIMCore.userTrackHistory("MainActivity", false); }
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" />
如果你的 apk 最终会经过代码混淆,请在 proguard 配置文件中加入以下代码:
-dontwarn net.icsoc.** -keep class net.icsoc.** {*;}