常见问题

1.集成步骤

云客服SDK已将公共功能分了模块,部分开发者可能在集成过程中会遇到一些问题,现对集成过程进行梳理,供开发者参考。

SDK提供的库结构如下图所示,由于module的目录变化,因此部分引用的路径将发生变化,建议开发者集成的最终目录结构如下图一致,减少修改module里库引用路径,避免因此问题导致编译失败。

1553672962680368.png

如上图所示,配置正确且编译成功。kf5Modules文件夹下所有module需要全部导入进去,部分开发者看到module数量太多,可能会问到我们只用到部分功能,能不能只导入需要的moudle呢?答案是不行的,这5个module相互关联,只是为了以后方便接入和替代,将这些模块独立了出来,一个都不能少。同时将moduleSetting.gradle文件复制到moduleModules文件夹下,moduleSetting.gradle文件是所有module所用到的第三方库版本号管理文件,因此不可缺失。

以上是集成sdk且编译成功的目录结构,具体集成步骤请逐一阅读下面步骤。

(1).在项目的根目录下新建kf5Modules文件夹

1553673082758631.png

(2).将module导入到工程中。

1553674776934361.png

新建kf5Modules文件夹之后,直接在把github下载的kf5sdkdemo里的kf5sdkModule导入,其他所有关联module也将一并导入,具体效果如上图所示。点击finish之后,若编译成功,最终效果如下图:

1553674888421621.png

3.当然这个是先建立kf5Modules文件夹,然后将moduleSetting.gradle文件拷贝进去,接着再按步骤2导入的module的所有流程。题外话,如果开发者想把已经导入工程里到module合并到一个文件夹下,请看这里[https://blog.csdn.net/speverriver/article/details/69397749]

2. java.net.UnknownHostException: Unable to resolve host "sdkmobilev2": No address associated with hostname

1553673287244220.jpg


问题分析:未初始化二级域名。解决方法:在进入sdk模块之前调用SPUtils.saveHelpAddress(helpAddress)

3.{"error":10005,"message":"appid参数未获取到","data":{}}

1553673350190973.jpg

问题分析:未初始化appid,appid是否是xxx.kf5.com下所建立的应用的唯一标识。解决方法:在进入sdk模块之前调用SPUtils.saveAppID(appid)

4.appid怎么查看?

appID是KF5为每一个注册平台的用户在开发SDK时所生成的唯一字符串;只代表当前平台,具备唯一性。查看与生成Appid只有管理员拥有权限,具体生成方式如下:

 1.登陆xxx.kf5.com,进入控制面板,将菜单转到系统设置>移动App SDK 

 blob.png

2.添加一个APP ,完成之后提交

blob.png

 注意:若启用推送,需要打开启用推送通知;填写回调函数,并且保证回调URL能够正常访问。

 3.  查看APPID

 blob.png


5.{"error":20006,"message":"UserToken参数未找到","data":{}}   

 1553673457122827.jpg

问题说明:未缓存userToken,userToken是实时令牌,在loginUser与createUser请求成功之后将实时令牌缓存到本地。解决方法:在loginUser与createUser接口请求成功之后,调用SPUtils.saveUserToken(userToken);

6.怎么初始化用户信息?

sdk目前采用的初始化逻辑是登陆(loginUser)或者注册(createUser),登陆顾名思义就是用户信息存在且合法,则登陆成功,注册即用户不存在且用户信息合法,则注册成功。由于登陆与注册两个接口分别只能读与写。所以我们在初始化的时候需要将两个接口组合调用,简单说用用户存在就登陆,不存在就注册。由于我们不知道用户信息存在与否,所以就需要我们组合调用。怎么调用请看图,我们以先注册—>再登陆组合:

1553674187157425.png

1553674306134533.png

loginUser与createUser接收参数说明:手机号(key:phone)与邮箱(key:email),两者传一,不为空。当同时传了phone与email时,由于两者可能不对应于同一个用户,所以极有可能初始化失败,传一个就行。

用户自定义字段(key:user_fields),该参数只在注册用户接口有效,同时用户自定义字段值的修改也可以通过updateUser接口操作,用户自定义字段的参数格式请参考demo里的LoginActivity实现。

7.怎么实现推送功能?

sdk推送逻辑采用的是回调url,这里有一部分工作需要客户那边的后端研发实现,具体推送逻辑是这样的:客户需要在kf5后台填写回调url并启用推送,当满足推送条件时,我们的后端带上需要的推送信息发送到这个回调url上,然后回调url再负责推送到具体的设备上。客户的后端研发需要做的工作是:1.开启一个回调url且能正常通信,2.回调url接收到推送的信息时,执行推送逻辑,将信息推送到对应的设备上。

推送配置:

1、 在你的账号里配置您的移动SDK应用程序启动推送通知

2、 设置回调URL支持我们的回调

3、 在您的应用程序处理用户的唯一标示和推送请求

sdk里需要做的工作,当初始化用户信息成功之后,开发者调用saveDeviceToken接口,将设备唯一标识码保存起来,当然也支持删除设备唯一标识码,调用deleteDeviceToken即可。

8.工单自定义字段怎么上传?

答:工单自定义字段请参考FeedBackActivity下getDataMap回调接口示例。

9.IM里用户自定义消息怎么设置?

答:参考KF5ChatActivity中scConnect回调接口,调用IMPresenter里的setMetadata接口。

10.IM模块卡片消息怎么设置?

答:参考SettingFragment中启动KF5ChatActivity之前的配置。

11.IM模块未读消息数怎么获取?

答:参考demo中SettingsFragment调用getUnReadMessageCount参数格式。

12.修改用户信息(用户自定义字段)怎么实现?

答:参考demo中LoginActivity中updateUser接口的调用。

13.glide版本冲突?

答:以3.7.0版本为分界线,高版本的glide代码结构发生了变化,导致3.7.0以下的代码在升级到3.7.0以上的版本编译失败。建议开发者升级到高版本。

14.buildToolsVersion冲突?

答:当主工程的编译版本号低于kf5Module的编译版本号时,会导致编译不通过。建议开发者升级主工程的编译版本号,或者对kf5Module的编译版本号降级,但是降级跨度不能太大;如遇因资源缺失导致编译不通过,建议尽快升级编译版本号。

15.切换用户之后怎么还能看见之前用户的历史信息?

答:登陆之前调用SPUtils.clearSP()接口。