Udesk客服系统的集成

先贴上客服系统官网http://www.udesk.cn/doc/android/udesksdk_android/#_3

Android Udeskdemo地址 https://github.com/udesk/UdeskSDK-Android  这个地址在API上我是没有找到,但iOS的api上却有一个ios的demo地址,笔者根据链接样式将末尾的IOS改成Android试了一下,没想到奇迹就此出现了;

下面开始集成步骤:

1、导入appkey和 app id;

此处的Appkey和AppID是在登录Udesk后台后能查看的,而此处的domain则是登录后的页面链接,应该是****.udesk.cn

2、设置UdeskConfig信息

这里是提供给客服看的一些客户的信息,比如名字、邮箱、手机号和简介等,此处的sdkToken是必传的,这是作为用户的唯一标识的,进入会话用UdeskSDKManager.getInstance().entryChat()这个方法,进去之后的消息的发送以及接收就是Udesk所处理的事了,下面是一些UdeskConfig内部类Builder的说明:

属性设置方法功能说明
udeskTitlebarBgResIdsetUdeskTitlebarBgResId标题栏TitleBar的背景色,通过颜色设置
udeskTitlebarTextLeftRightResIdsetUdeskTitlebarTextLeftRightResId标题栏TitleBar,左右两侧文字的颜色
udeskIMLeftTextColorResIdsetUdeskIMLeftTextColorResIdIM界面,左侧文字的字体颜色
udeskIMRightTextColorResIdsetUdeskIMRightTextColorResIdIM界面,右侧文字的字体颜色
udeskIMAgentNickNameColorResIdsetUdeskIMAgentNickNameColorResIdIM界面,左侧客服昵称文字的字体颜色
udeskIMTimeTextColorResIdsetUdeskIMTimeTextColorResIdIM界面,时间文字的字体颜色
udeskIMTipTextColorResIdsetUdeskIMTipTextColorResIdIM界面,提示语文字的字体颜色,比如客服转移
udeskbackArrowIconResIdsetUdeskbackArrowIconResId返回箭头图标资源id
udeskCommityBgResIdsetUdeskCommityBgResId咨询商品item的背景颜色
udeskCommityTitleColorResIdsetUdeskCommityTitleColorResId商品介绍Title的字样颜色
udeskCommitysubtitleColorResIdsetUdeskCommitysubtitleColorResId商品咨询页面中,商品介绍子Title的字样颜色
udeskCommityLinkColorResIdsetUdeskCommityLinkColorResId商品咨询页面中,发送链接的字样颜色
isUserSDkPushsetUserSDkPush配置 是否使用推送服务 true 表示使用 false表示不使用
UdeskQuenuModesetUdeskQuenuMode配置放弃排队的策略
isUseVoicesetUseVoice是否使用录音功能 true表示使用 false表示不使用
isUsephotosetUsephoto是否使用发送图片的功能 true表示使用 false表示不使用
isUsecamerasetUsecamera是否使用拍照的功能 true表示使用 false表示不使用
isUsefilesetUsefile是否使用上传文件功能 true表示使用 false表示不使用
isUsefilesetUseMap是否使用发送位置功能 true表示使用 false表示不使用
isUseEmotionsetUseEmotion是否使用表情 true表示使用 false表示不使用
isUseMoresetUseMore否使用展示出更多功能选项 true表示使用 false表示不使用
isUseSmallVideosetUseSmallVideo设置是否需要小视频的功能 rue表示使用 false表示不使用
ScaleMaxsetScaleImg上传图片是否使用原图 还是缩率图
isScaleImgsetScaleMax设置宽高最大值,如果超出则压缩,否则不压缩
OrientationsetOrientation设置默认屏幕显示习惯
isUserFormsetUserForm本地配置是否需要表单留言,true需要, false 不需要
defualtUserInfosetDefualtUserInfo创建用户的基本信息
definedUserTextFieldsetDefinedUserTextField创建自定义的文本信息
definedUserRoplistsetDefinedUserRoplist创建自定义的列表信息
updateDefualtUserInfosetUpdateDefualtUserInfo用户需要更新的基本信息
updatedefinedUserTextFieldsetUpdatedefinedUserTextField用户需要更新自定义字段文本信息
updatedefinedUserRoplistsetUpdatedefinedUserRoplist用户需要更新自定义列表字段信息
firstMessagesetFirstMessage设置带入一条消息 会话分配就发送给客服
robot_modelKeysetRobot_modelKeyudesk 机器人配置欢迎语 对应的Id值
concatRobotUrlWithCustomerInfosetConcatRobotUrlWithCustomerInfo用于机器人页面收集客户信息
customerUrlsetCustomerUrl设置客户的头像地址
commoditysetCommodity配置发送商品链接的mode
txtMessageClicksetTxtMessageClick文本消息中的链接消息的点击事件的拦截回调。 包含表情的不会拦截回调
formCallBacksetFormCallBack离线留言表单的回调接口 ,回调使用自己的处理流程
structMessageCallBacksetStructMessageCallBack设置结构化消息的点击事件回调接口
extreFunctionssetExtreFunctions设置额外的功能按钮
functionItemClickCallBacksetExtreFunctions点击事件回调 直接发送文本,图片,视频,文件,地理位置,商品信息
isUseNavigationRootViewsetNavigations设置是否使用导航UI true表示使用 false表示不使用
navigationModessetNavigations约定传递的自定义按钮集合
navigationItemClickCallBacksetNavigations支持客户在导航处添加自定义按钮的点击回调事件
isUseNavigationSurvysetUseNavigationSurvy设置是否使用导航UI中的满意度评价UI rue表示使用 false表示不使用
useMapTypesetUseMapSetting设置使用那种地图
locationMessageClickCallBacksetUseMapSetting点击地理位置信息的回调接口
clssetUseMapSetting传入打开地图消息显示的详请activity
groupIdsetGroupId设置的指定组,每次进入都必须重新指定
isOnlyByGroupIdsetGroupId是否仅仅指定组进入
agentIdsetAgentId设置指订客服id,每次进入都必须重新指定
isOnlyByAgentIdsetAgentId是否仅仅指定客服进入
isOnlyUseRobotsetOnlyUseRobot设置是否只使用机器人 不用其它功能
localesetLocale设置本地化语言
mProductsetProduct设置商品消息

可以看到里边的可操作性还是很强的,基本上能满足大部分的需求了,并且此第三方是以module的方式导入的,在程序内部也能做小幅改动;

3、Udesk的混淆

//udesk
-keep class udesk.** {*;}
-keep class cn.udesk.**{*; }
//七牛
-keep class okhttp3.** {*;}
-keep class okio.** {*;}
-keep class com.qiniu.**{*;}
-keep class com.qiniu.**{public <init>();}
-ignorewarnings
//smack
-keep class org.jxmpp.** {*;}
-keep class de.measite.** {*;}
-keep class org.jivesoftware.** {*;}
-keep class org.xmlpull.** {*;}
-dontwarn org.xbill.**
-keep class org.xbill.** {*;}

//eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

//freso
-keep class com.facebook.** {*; }
-keep class com.facebook.imagepipeline.** {*; }
-keep class com.facebook.animated.gif.** {*; }
-keep class com.facebook.drawee.** {*; }
-keep class com.facebook.drawee.backends.pipeline.** {*; }
-keep class com.facebook.imagepipeline.** {*; }
-keep class bolts.** {*; }
-keep class me.relex.photodraweeview.** {*; }

-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
    @com.facebook.common.internal.DoNotStrip *;
}
# Keep native methods
-keepclassmembers class * {
    native <methods>;
}

-dontwarn okio.**
-dontwarn com.squareup.okhttp.**
-dontwarn okhttp3.**
-dontwarn javax.annotation.**
-dontwarn com.android.volley.toolbox.**
-dontwarn com.facebook.infer.**


 //bugly
-keep class com.tencent.bugly.** {*; }

 //agora
-keep class io.agora.**{*;}

这里我们可以看到里边还是有很多第三方引用的,这里就会隐藏着一个问题——依赖冲突!!!笔者就遇到了这个问题

首先是与七牛里的okhttp的冲突笔者做了如下处理将七牛里的okhttp排除掉不进行依赖

compile ('com.qiniu:qiniu-android-sdk:7.3.+'){
    exclude module: 'okhttp'
}

接下来是bugly的包冲突,Udesk里集成bugly是以jar包形式引入的,所以将Udesk的gradle中对应的jar包依赖进行如下更改

compile files('libs/bugly_crash_release_2.1.jar')→→→→→→provided files('libs/bugly_crash_release_2.1.jar')

也就是将compile改成provided  这种改发是为了仅让此依赖在当前module生效,当然还有一步操作是将

compile fileTree(include: ['*.jar'], dir: 'libs')这句话去掉,不然此设置不生效;

4、关于用户信息的更新;

相信很多App内部都有更新用户头像或者名字信息之类的操作,那么我们怎么将此信息及时的在Udesk的聊天中进行更新呢?下面看笔者的实现方式:

由于每次进入会话界面都会调用UdeskSDKManager.getInstance().entryChat()方法将UdeskConfig传到会话页面,所以我们每次对UdeskConfig进行一次最新信息的设置就好了,通过看UdeskConfig的源码发现其下的Builder中有setDefualtUserInfo和setUpdateDefualtUserInfo两个方法,从字面意思很明显就能看出一个是设置默认UserInfo的方法  一个是更新UserInfo的方法,这就需要我们判断是否设置了默认UserInfo,设置了即调用更新方法  没设置进行设置,但是这个判断方式就犯难了,笔者一度想用一个boolean值进行记录,但又觉得这种实现方式实在是low,后来翻了半天源码终于让我找到了方式,下面就是见证奇迹的时刻:

UdeskConfig.Builder builder = new UdeskConfig.Builder();
if (UdeskSDKManager.getInstance().getUdeskConfig().defualtUserInfo == null) {
    builder.setDefualtUserInfo(getDefualtUserInfo(token));
} else {
    builder.setUpdateDefualtUserInfo(getDefualtUserInfo(token));
}

以上是笔者的判断方式,通过判断UdeskSDKManager.getInstance().getUdeskConfig().defualtUserInfo是否为null进行判断是否设置了默认UserInfo,从而进行接下来的操作;

 

这里要说一个算是该平台的一个bug,就是当你改了名字而继续进行当前聊天的话,客服那边是看不到你的新名字的,只有客服刷新页面之后才会显示新名字,这个bug废了笔者很大的劲,最后跟Udesk客服进行咨询才得知。。。

 

笔者此次只用到了一些基本功能,视频及定位等功能暂未涉及,但是看着api上写的也很详细很具体了;朋友们有什么疑问随时进行交流;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值