Android端SDK集成

集成前提

SDK 适用对象及重要提示

适用范围

1、该文档适用于APP集成小能客服AndroidSDK2.4及其以上版本。

2、该文档提供给与小能合作企业的Android技术开发人员使用。

3、AndroidSDK2.1及其以上版本支持API 14以上API 25以下的系统版本。

重要提示

1、建议先测试我们Demo,并仔细阅读我们Demo中的集成代码,会对您的对接过程有很大的帮助。

2、如需小能方周末提供对接支持,请至少提前一天提出邮件申请,我们好安排加班人员。

3、集成SDK后,请将集成后的安装包发给我们测试,双方测试通过后APP方能上线并进入售后流程。若没有提供给我方测试将APP上线,造成后果由集成方承担。

4、若需要小能协助测试,要发一封测试申请邮件并附带测试账号和测试安装包给技术支持。

5、集成过程中,遇到任何问题,请随时联系我们。

对接企业信息

在集成sdk之前请先与小能相关人员对接好您的企业信息,包括siteid,settingid,appkey等基本信息。

以上各字段的获取方式,详情请见:参数具体说明

同步账号信息

小能sdk具有登录账号和退出账号的功能,目的是传递账号信息,请仔细阅读小能sdk对登录账号的字符限制,做好与您app账号的同步。

SDK导入

Android Studio 导入SDK Demo

1)进入android studio,点击import project(Eclipse ADT,Gradle,etc),如下图所示:

2)选择AndroidSDK文件夹下的XiaonengChatDemo,并点击 OK,如下图所示:

3)在弹出的Import Project from ADT页面中,填写项目导入后的目标路径,一直点击Next直到Finish,如下图所示:

4)点击Finish后,会弹出Gradle Project info Building界面,如下图所示:

5)Building结束后弹出import-summary.txt,表示导入成功,如下图所示:

6)最后在XiaonengChatUI 的build.gradle 中的defaultConfig 加入minSdkVersion 版本,与主项目中的版本保持一致,并点击Sync Now,如下图所示:

经过上面6步,就可以运行小能SDK Demo啦!

Eclipse 导入SDK用于集成

1)将工程XiaonengChatUI导入到你APP所在的工程中,如下图所示:

2)点击APP工程右键—>属性(Properties)—>Android,如下图所示:

3)点击Add,选中XiaonengChatUI,点击确定,如下图所示:

4)再点击应用,确定,完成引用,如下图所示:

Android Studio 导入SDK用于集成

1)点击File—>New—>Import Module,如下图所示:

2)选中XiaonengChatUI工程,一直点击next,如下图所示:

3)然后点击File→Project Structure→点击你的app→dependencies,点击加号“+”,选择Module dependency,如下图所示:

4)选中XiaonengChatUI,点击OK,如下图所示:

5)选中XiaonengChatUI,点击Flavors,设置Min Sdk Version和Target Sdk Version,与主项目的Min Sdk Version和Target Sdk Version保持一致,如下图所示:

经过以上5步就可以运行,运行成功说明小能sdk成功关联到您的app上啦!

配置清单文件

1)在你的清单文件AndroidManifest.xml里加入以下权限的配置。注意:不要与已有的权限冲突。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

2)在你的清单文件AndroidManifest.xml里加入以下Activity的配置。

<activityandroid:name="cn.xiaoneng.activity.ChatActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" />
<activityandroid:name="cn.xiaoneng.activity.LeaveMsgActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" />
<activityandroid:name="cn.xiaoneng.activity.ShowCameraActivity"android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|navigation|layoutDirection|touchscreen|locale|mnc|mcc|fontScale"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@style/MyDialogTopRight" >
</activity>
<activityandroid:name="cn.xiaoneng.activity.ShowAlbumActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" >
</activity>
<activityandroid:name="cn.xiaoneng.activity.ValuationActivity"android:screenOrientation="portrait"android:theme="@style/valuationdialog" >
</activity>
<activityandroid:name="cn.xiaoneng.activity.ShowPictureActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" >
</activity>
<activityandroid:name="cn.xiaoneng.activity.XNExplorerActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" >
</activity>
<activityandroid:name="cn.xiaoneng.video.VideoPreviewActivity"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" >
</activity>
<activityandroid:name="cn.xiaoneng.video.RecordVideoActivity"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" >
</activity>
<activityandroid:name="cn.xiaoneng.video.XNVideoPlayer"android:screenOrientation="portrait"android:theme="@android:style/Theme.NoTitleBar" >
</activity>

标准接口集成

初始化SDK

在整个应用程序中,我们建议您在 App 主进程初始化,您只需要调用一次 initSDK 方法。

如果在App开启时有多进程启动,需要将“initSDK”方法放到主进程中,保证打开App只会调用一次初始化,避免多进程启动导致Application的onCreate方法执行多次 样式代码

siteid、sdkkey、settingid参数的获取方式请见:参数具体说明

/**
*  @params appContext
*  @params siteid: 企业id,即企业唯一标识。格式示例:kf_9979【必填】
*  @params sdkkey: 企业key,即小能通行密钥【必填】
*  @return int  0 表示初始化成功, 其他值请查看错误码
*/
Ntalker.getBaseInstance().initSDK(Context appContext,String siteid, String sdkkey);

如果客户想要使用自己的机器码作为游客标识,则调用下面的initSDK方法,如果是游客身份,使用外部传入的机器码id。

/**
*  @params appContext
*  @params siteid: 企业id,即企业唯一标识。格式示例:kf_9979【必填】
*  @params sdkkey: 企业key,即小能通行密钥【必填】
*  @params pcid: 外部传入的游客机器码,长度必须大于等于18位小于等于38位
*  @return int  0 表示初始化成功, 其他值请查看错误码
*/
Ntalker.getInstance().initSDK(Context appContext,String siteid, String sdkkey,String pcid);

登录与登出

重要提示

App集成小能SDK的登录接口, 需要注意以下三点:1. App完全退出(被杀掉进程), 再次进入时, 在SDK初始化之后, 如果是登录用户, 需要重新调用小能SDK登录接口. (用于2.5及以前版本的SDK)2. App访客登录账号的时候, App就调用小能SDK的登录接口, 访客登出账号的时候, 调用小能SDK的登出接口.3. 2.6及以后版本的SDK登录接口调用时机:在访客注册完成、点击登录按钮时分别调用小能SDK登录接口、在SDK初始化之后, 如果是登录用户, 需要调用小能SDK登录接口(保证老用户身份信息同步);访客登出账号的时候,调用小能SDK的登出接口.

用户登录

在访客登录的时候调用login方法, 目的是传递账号信息,为客服显示用户信息,userid作为用户的唯一标识需要保证唯一性,username可根据需要传入手机号、昵称等信息

游客咨询不需要调用小能login方法,小能会自动生成一个游客身份标识(userid格式:guest开头+一串数字)和用户名(username格式:客人+4位数字)

userlevel传入1后,访客咨询时无视排队逻辑,在客服忙碌或者达到最大接待量仍能直接进入会话;如果需要走正常排队逻辑,userlevel建议传入0

/**
*  @params userid: 登录用户的id,只能输入数字、英文字母和“@”、“.”、“_”三种字符。长度小于40,并且不能重复,
*                   相同的userid会造成会话同步,切记不可重复 【必填】
*  @params username: 登录用户名,长度小于32,显示于PC客服端,如未填写,系统随机会随机生成一个用户名,,如:客人9527
*  @params userlevel: 登录用户的等级,普通用户“0”。默认写 0 【必填】
*  @return  int   0 表示登录成功, 1 表示登录失败可参照错误码修改, 2 表示重复登录无需再次登录, 如在登录错误的情况下,咨询客服,用户为游客状态,即非登录用户咨询.
*/Ntalker.getBaseInstance().login(String userid, String username, int userlevel);

用户登出

用户点击退出登录时调用logout方法,调用之后用户身份置为游客状态。

Ntalker.getBaseInstance().logout();

打开聊窗

点击咨询入口时只需要调用startChat方法,前提是已经执行了initSDK方法;目的是加载咨询窗口,与客服进行会话。

settingid参数的获取方式请见:参数具体说明

/**
*  @param appContext
*  @param settingid  有效接待组Id,该组内必须有客服存在,建议使用非管理员客服【必传】
*  @param groupName  客服组名称,默认的企业客服名称,在异常情况下显示(如网络异常)【建议】
*  @param chatparams  聊天参数体(带子参数,与多个功能有关,不用时传空)
*/
Ntalker.getBaseInstance().startChat(Context appContext, String settingid,String groupName,ChatParamsBody chatparams);

咨询发起页功能

咨询发起页,用于PC客服端显示和统计用户首次发起咨询的入口信息,代码示例如下:

ChatParamsBody chatparams = new ChatParamsBody();
chatparams.startPageTitle = "";  // 咨询发起页标题(必填)
chatparams.startPageUrl = "";//咨询发起页URL,必须以"http://"开头 (必填)

以下功能为可选功能:

erp功能

用于传入ERP页面所需的扩展参数,最长64位,参数不够用时可以用逗号间隔

//erp参数, 被用参数,小能只负责经由SDK传到客服端,不做任何处理
chatparams.erpParam = "";

指定请求客服功能

//传入指定客服的格式:siteid_ISME9754_T2D_指定客服的id,客服id即客服登录客服端时的用户名,如:kf_9979_ISME9754_T2D_admin
chatparams.kfuid = "";

然后将chatparams 参数传入到startChat方法中。

Debug模式

是否开启小能sdk的特有log,方便查找对接过程中出现的问题,通常在App启动的时候实现,将isdebug置为true,集成上线时将isdebug置为false。

/**
*  @params isdebug: 是否开启debug模式, 默认false
*/
Ntalker.getBaseInstance().enableDebug(boolean  isdebug);

商品展示集成

商品信息展示包括两方面:一是:APP用户聊窗内展示的商品信息; 二是:客服端展示咨询用户浏览的商品信息。

在APP端我们提供3种方式,在客服端我们提供2种方式,集成者可根据自己的需求通过传参实现。

APP端商品展示

1)不展示商品信息

chatparams.itemparams.appgoodsinfo_type = CoreData.SHOW_GOODS_NO;

2)使用商品id方式展示商品信息(推荐使用) 商品接口开发说明

/**
* @param goods_id  商品id
* @param itemparam  商品扩展参数
*/
chatparams.itemparams.appgoodsinfo_type = CoreData.SHOW_GOODS_BY_ID;
chatparams.itemparams.goods_id = "";//示例:ntalker_test,传入商品id
chatparams.itemparams.itemparam = "";//示例:App,商品扩展参数(选填),所传参数由商品接口确定

3)以独立控件方式展示商品信息

独立控件方式只支持在SDK端展示商品

chatparams.itemparams.appgoodsinfo_type = CoreData.SHOW_GOODS_BY_WIDGET
chatparams.itemparams.goods_name = "";
chatparams.itemparams.goods_price = "";
chatparams.itemparams.goods_image = "";      //URL必须以"http://"开头
chatparams.itemparams.goods_url = "";    //URL必须以"http://"开头

客服端商品展示

1)不展示商品信息

chatparams.itemparams.clientgoodsinfo_type = CoreData.SHOW_GOODS_NO;

2) 使用商品id方式展示商品信息(推荐使用)

需开发商品接口地址,并配置到小能客服端 商品接口开发说明

/**
* @param goods_id  商品id
* @param itemparam  商品扩展参数
*/
chatparams.itemparams.clientgoodsinfo_type = CoreData.SHOW_GOODS_BY_ID;
chatparams.itemparams.goods_id = "";//示例:ntalker_test,传入商品id
chatparams.itemparams.itemparam = "";//示例:App,商品扩展参数(选填),所传参数由商品接口确定

轨迹的集成

商品详情页轨迹

标准集成方式: 建议在进入到商品详情页面时,调用商品详情页轨迹

 /**
* 商品详情页轨迹标准接口
* @param title 商品详情页的标题, 必传字段
* @param url 商品详情页的url, 必传字段,需要保证每个商品详情页的url唯一,可传入商品链接
* @param sellerid 商户id, B2C企业传空, B2B企业需要传入商户的id
* @param ref 上一页url, 如没有可传空
* @return*/
Ntalker.getBaseInstance().startAction_goodsDetail(String title, String url,String sellerid, String ref);

订单页轨迹

标准集成方式: 建议在生成订单号和订单价格时调用订单页轨迹

 /*** 订单页轨迹标准接口* @param title 订单页的标题, 必传字段* @param url 订单页的url, 必传字段,需要保证每个订单页的url唯一* @param sellerid 商户id, B2C企业传空, B2B企业需要传入商户的id* @param ref 上一页url, 如没有可传空* @param orderid 订单id, 必传字段* @param orderprice 订单价格, 必传字段* @return*/
Ntalker.getBaseInstance().startAction_order(String title, String url,String sellerid, String ref,String orderid, String orderprice);

支付成功页轨迹

标准集成方式:

 /*** 支付成功页轨迹标准接口* @param title 支付成功页的标题, 必传字段* @param url 支付成功页的url, 必传字段,需要保证每个支付成功页的url唯一* @param sellerid 商户id, B2C企业传空, B2B企业需要传入商户的id* @param ref 上一页url, 如没有可传空* @param orderid 订单id, 必传字段* @param orderprice 订单价格, 必传字段* @return*/
Ntalker.getBaseInstance().startAction_paySuccess(String title, String url,String sellerid, String ref,String orderid, String orderprice);

基本事件监听

未读消息的监听

未读消息的监听接口为OnUnreadmsgListener ;

聊窗页面点击返回按钮或返回键后,在5分钟内,客服给访客发送消息,未读消息监听可生效

Ntalker.getExtendInstance().message().setOnUnreadmsgListener(OnUnreadmsgListener mListener);

代码示例:

/**
* @param settingid: 接待组id
* @param username: 客服名字
* @param msgcontent: 消息内容
* @param messagecount: 消息总数
*/
@Override
public void onUnReadMsg(final String settingid, String username, String msgcontent, final int messagecount){runOnUiThread(new Runnable() {@Overridepublic void run() {if (messagecount == 0){tv_unMsg1.setText("未读消息:0");return;}tv_unMsg1.setText(settingid + ":" + messagecount + "条新消息");}
});
}

所有消息的监听

所有消息的监听接口为:OnChatmsgListener

Ntalker.getExtendInstance().message().setOnChatmsgListener(OnChatmsgListener mListener);

代码示例:

/**
*
* @param isSelfMsg 是否是自己发送的消息
* @param settingid 发送消息的客服组id
* @param username 发送消息的客服名称
* @param msgcontent 消息内容
* @param msgtime 消息时间
* @param isunread 是否已读
* @param unreadcount 未读消息数量
* @param uicon 客服头像
*/
@Override
public void onChatMsg(boolean isSelfMsg, String settingid, String username, String msgcontent, long msgtime, boolean isunread, int unreadcount, String uicon)
{
runOnUiThread(new Runnable() {@Overridepublic void run() {}
});
}

聊窗中url链接点击事件的监听

该接口是将访客和客服发送消息中的url点击事件暴漏出来,实现客户点击url链接的自定义跳转事件。

点击事件的监听接口为:OnMsgUrlClickListener

* 第一步:在chatparams参数体中设置url的打开方式

chatparams.clickurltoshow_type = CoreData.CLICK_TO_APP_COMPONENT;

* 第二步:注册监听 Ntalker.getExtendInstance().message().setOnMsgUrlClickListener(OnMsgUrlClickListener mListener);

* 第三步:在onClickUrlorEmailorNumber()方法中添加自定义点击事件

代码示例 :

@Override
public void onClickUrlorEmailorNumber(int contentType, String urlorEmailorNumber)
{if (contentType == 1){// 网址;Intent intent = new Intent(this, WebContentActivity.class);intent.putExtra("urlorEmailorNumber", urlorEmailorNumber);// 实际打开的链接startActivity(intent);}
}

商品条点击事件的监听

需提前集成SDK商品展示

1) 商品详情的点击事件有两种方式,第一种是设置点击商品条在SDK内的Webview打开,是默认的打开方式,由小能实现。

2) 第二种继承XNClickGoodsListener(单独的商品详情点击接口),具体操作步骤如下:

需集成2.6.2及以上版本SDK

* 第一步:设置点击类型 只设置点击类型不实现监听可以屏蔽商品条点击事件

chatparams.itemparams.clicktoshow_type = CoreData.CLICK_TO_APP_COMPONENT

* 第二步:注册监听器,小能SDK提供XNClickGoodsListener监听接口,其中提供了点击商品展示的功能。

Ntalker.getExtendInstance().message().onClickShowGoods(XNClickGoodsListener xnclickgoods);

* 第三步:添加点击事件onClickShowGoods的响应

如果不设置商品详情的点击事件,直接将onClickShowGoods方法中不加任何操作即可。

/**
* appgoodsinfo_type: 设置在SDK端是否显示商品
* clientgoodsinfo_type: 设置在客服端是否显示商品
* goods_id: 商品id
* goods_name: 商品名称
* goods_price: 商品价格
* goods_image: 商品图片URL
* goods_url: 商品URL(点击跳转)
* goods_showurl 商品小页面URL(设置以商品URL显示时传入)
*/@Overridepublic void onClickShowGoods(int appgoodsinfo_type,int clientgoodsinfo_type, String goods_id, String goods_name,String goods_price, String goods_image, String goods_url,String goods_showurl) {}

错误码的监听

错误码的监听接口:XNErrorListener

Ntalker.getBaseInstance().setOnErrorListener(XNErrorListener OnErrorListener);

当发生错误时弹出显示错误码的系统提示,代码示例如下:

@Override
public void onError(int errorcode) {Toast.makeText(getApplicationContext(), "警告!发生错误(" + errorcode + ")!",Toast.LENGTH_SHORT).show();
}

扩展事件监听

扩展监听使用规则

可以参考 XiaonengDemo中的 TestActivity类,增加所需要的扩展功能

扩展事件的使用前提是,新建一个Activity继承小能的ChatActivity,在新建的Activity中实现扩展接口并将此Activity作为最后一个参数传入到startChat方法中。

/**
*  @param appContext
*  @param settingid  有效客服组ID,该组内必须有客服存在,建议使用非管理员客服【必传】
*  @param groupName  客服组名称,默认的企业客服名称,在异常情况下显示(如网络异常)【建议】
*  @param chatparams  聊天参数体(带子参数,与多个功能有关,不用时填null)
*  @param chatWindowActivity 继承自ChatActivity
*/
Ntalker.getBaseInstance().startChat(Context context, String settingid,String settingname,ChatParamsBody chatParams,Class<?> chatWindowActivity);

导航条的扩展

导航条扩展的监听接口为:XNTitleButtonListener

如果需要导航条的扩展,首先需要修改(XiaonengChatUI\res\layout\xn_title.xml)文件,然后通过“setTitleViewListener”接口里面的view,来控制新增的控件,如:代码示例

Ntalker.getExtendInstance().titleBar().setOnViewInflatedListener(XNTitleButtonListener mTitleListener);

代码示例:

@Override
public void setTitleViewListener(View view) {Button button = (Button)view.findViewById(R.id.button1);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(v.getContext(), "导航条的扩展", Toast.LENGTH_SHORT).show();}});
}

商品条的扩展

如采用商品条扩展的方式展示商品,SDK端的商品展示将不通过商品id的形式展示商品内容

商品条扩展的监听接口为:XNGoodsListener

商品条扩展分为两种方式,您可以根据需要使用其中一种:

方式一:在我们原有商品条布局(XiaonengChatUI\res\layout\xn_showgoods.xml)中增加控件,并调用“添加商品详情布局“的监听,然后通过“setViewByIDListener”接口里面的view,来控制新增的控件,如:代码示例

/**
* 添加商品详情布局的监听
* @param goodsListener
*/
Ntalker.getExtendInstance().chatHeadBar().setOnViewClickListener(XNGoodsListener goodsListener);

方式二:重新添加一个布局传入“替换商品详情整个布局“的监听中,然后通过“setViewByIDListener”接口里面的view,来控制新增的控件,如:代码示例

/**
* 替换商品详情整个布局的监听
* @param resID 替换的布局
* @param goodsListener
*/
Ntalker.getExtendInstance().chatHeadBar().setOnViewInflatedListener(R.layout.list_item2, XNGoodsListener goodsListener);

代码示例:

@Override
public void setViewByIDListener(View view) {view.findViewById(R.id.tv_send).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(v.getContext(), "商品栏扩展", Toast.LENGTH_SHORT).show();  }});
}

除商品条扩展监听外,我们还提供一个商品详情发送接口,用于直接获取Chatparams参数中传入的商品名称、价格、图片URL

商品详情发送的监听接口为:XNSendGoodsBtnListener

/**
* 添加商品详情布局的监听
* @param sendgoodsListener
*/
Ntalker.getExtendInstance().chatHeadBar().setOnSendGoodsListener(XNSendGoodsBtnListener sendgoodsListener);

代码示例:

/**
*
* @param View view
* @param title 商品名称
* @param price 商品价格
* @param pic 商品图片url
*/
@Override
public void setSendGoodsBtnListener(View view, final String title,final String price, final String pic) {view.findViewById(R.id.tv_sendgoods).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Ntalker.getExtendInstance().message().sendCustomMsg(2,new String[] { title, price, pic }); }});
}

+号功能区的扩展

+号功能区扩展的监听接口为:OnPlusFunctionClickListener

+号功能扩展首先需要在“addPlusFunction”监听中传入增加的功能类型、名称、资源图片,然后通过“onPlusFunctionClick”接口里面的functionName匹配扩展功能的名称,来实现相应功能,如:代码示例

需要调用的方法如下:

/**
* 增加功能的点击事件
* @param onPlusFunctionClickListener
*/
Ntalker.getExtendInstance().extensionArea().setOnPlusFunctionClickListener(OnPlusFunctionClickListener onPlusFunctionClickListener);
/*** 增加除默认功能之外的功能* @param plusFunctionType 增加功能的类型* @param functionName 增加功能的名字* @param functionIcon 增加功能的图片* @return*/
Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType plusFunctionType,String functionName, int functionIcon);

代码示例:

@Override
public void onPlusFunctionClick(String functionName) {// TODO Auto-generated method stubString funname1 = "订单";String funname2 = "最近商品";if (functionName.equals(funname1)) {  Toast.makeText(getApplicationContext(), "点击自定义功能:" + functionName, Toast.LENGTH_SHORT).show();Intent intent = new Intent(this, OrderListActivity.class);startActivity(intent);}if (functionName.equals(funname2)) {Toast.makeText(getApplicationContext(), "点击自定义功能:" + functionName, Toast.LENGTH_SHORT).show();Intent intent = new Intent(this, GoodsListActivity.class);startActivity(intent);}
}

改变功能的顺序,需要的接口如下:

假设要将功能区的顺序改为评价,图片,拍照,视频,则代码如下:

Ntalker.getExtendInstance().extensionArea().removeAll();//首先先调用删除所有功能的接口,然后依次添加功能
Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_EVALUATE);
Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_PICTRUE);
Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_CAMERA);
Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_VIDEO);

消息发送的扩展

发送消息的监听接口为:OnCustomMsgListener

通过消息发送扩展监听,可以在SDK端聊窗内点击指定功能按钮后,以文本或包装成卡片形式发送消息内容,在客服端以文本形式展示:

文本形式

其中sendType可传入1、2、3,在SDK端和PC客服端均会以纯文本形式展示

/**
*
* @param sendType 1为订单格式的消息;2为商品详情格式的消息;3为最近商品格式的消息
* @param msgs 发送的消息信息
*/
Ntalker.getExtendInstance().message().sendCustomMsg(int sendType, String[] msgs);

卡片形式

如同时设置两或三种不同的卡片类型,需要统一在继承ChatActivity的Activity中添加监听与增加方法,可参考Demo中的TestChatActivity.class

第一步:使用消息扩展功能首先需要在“setOnCustomMsgListener”传入消息的msgType ,自定义布局、OnCustomMsgListener

/**
*
* @param msgType  1为订单格式的消息;2为商品详情格式的消息;3为最近商品格式的消息
* @param resId  自定义布局id
* @param OnCustomMsgListener
*/
Ntalker.getExtendInstance().message().setOnCustomMsgListener(int msgType,int resId, OnCustomMsgListener customListener);

第二步:通过“setCustomViewFromDB”接口里面的view控制自定义布局中的的控件,来实现相应功能,如:代码示例

代码示例:

@Override
public void setCustomViewFromDB(View view, int msgType, String[] msg) {
if (msgType == 1) {TextView tv_orderid = (TextView) view.findViewById(R.id.tv_orderid_demo);TextView tv_ordernum = (TextView) view.findViewById(R.id.tv_ordernum_demo);TextView tv_orderprice = (TextView) view.findViewById(R.id.tv_orderprice_demo);TextView tv_ordertime = (TextView) view.findViewById(R.id.tv_ordertime_demo);ImageView pic = (ImageView) view.findViewById(R.id.iv_icon_demo);RelativeLayout rl_custom = (RelativeLayout) view.findViewById(R.id.rl_custom);tv_orderid.setText(msg[0]);tv_ordernum.setText(msg[1]);tv_ordertime.setText(msg[2]);tv_orderprice.setText(msg[3]);rl_custom.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(TestChatActivity.this, WebContentActivity.class);intent.putExtra("urlorEmailorNumber", "www.baidu.com");// 实际打开的链接startActivity(intent);}
});
}
}

第三步:最后在需要发送消息的位置调用“sendCustomMsg”传入相应的sendType和消息内容

/**
*
* @param sendType 1为订单格式的消息;2为商品详情格式的消息;3为最近商品格式的消息
* @param msgs 发送的消息信息
*/
Ntalker.getExtendInstance().message().sendCustomMsg(int sendType, String[] msgs);

问候语头像(2.5及以上版本支持)

1.联系小能实施人员申请开通SDK端问候语服务

2.问候语头像默认加载的是小能SDK包中:XiaonengChatUI\res\drawable-hdpi\kefu.png

3.替换默认问候语头像时,头像尺寸建议为:120 x 120,替换头像图片后命名保持不变,仍为kefu.png

自定义访客头像

1.访客头像可根据传入的bitmap来显示,代码如下:

Ntalker.getExtendInstance().settings().setUsersHeadIcon(bitmap);

2.除Bitmap外可以传入url图片链接的形式进行显示,代码如下:

chatparams.headurl = "";  //必须以http://开头

访客圆形头像的设置

访客头像可根据下面的接口来显示为圆形:

/**
*
* @param context
* @param yesOrNo true为圆形;false为方形
*/
Ntalker.getExtendInstance().settings().setHeadIconCircle(Context context, boolean yesOrNo);

名片链接的设置

Ntalker.getExtendInstance().settings().setShowCard(boolean yesOrNo);

小视频功能的开启

Ntalker.getExtendInstance().extensionArea().addPlusFunction(EPlusFunctionType.DEFAULT_VIDEO);

关闭聊窗(2.6及以上版本)

调用后可关闭当前聊窗,同等于点击返回按钮

Ntalker.getExtendInstance().chatHeadBar().setBackButtonFunctions();

调用后可关闭当前聊窗,同等于点击关闭按钮

Ntalker.getExtendInstance().chatHeadBar().setFinishButtonFunctions();

关闭按钮扩展监听(2.6及以上版本)

实现点击聊窗内关闭按钮后,增加自定义的操作

关闭按钮扩展监听接口为:XNFinishButtonListener

Ntalker.getExtendInstance().chatHeadBar().setOnFinishButtonClickListener(XNFinishButtonListener finishListener);

代码示例:

@Override
public void setFinishButtonListener() {}

返回按钮扩展监听(2.6及以上版本)

实现点击聊窗内返回按钮或物理返回键后,增加自定义的操作

返回按钮扩展监听接口为:XNBackButtonListener

Ntalker.getExtendInstance().chatHeadBar().setOnBackButtonClickListener(XNBackButtonListener buttonListener);

代码示例:

@Override
public void setBackButtonListener() {}

咨询列表功能

显示一个客服组的列表,该列表是一个访客咨询过得所有客服组的信息列表。

具体实现方法,可以参考XiaonengDemo中的“SettingListActivity.class”和“ListviewAdapter.class”

SDK提供两个接口 1) 所有消息接口onChatMsg,该接口是用来刷新列表信息的。

/**
*
* @param isSelfMsg 是否是自己发送的消息
* @param settingid 发送消息的客服组id
* @param username 发送消息的客服名称
* @param msgcontent 消息内容
* @param msgtime 消息时间
* @param isunread 是否已读
* @param unreadcount 未读消息数量
* @param uicon 客服头像
*/
void onChatMsg(boolean isSelfMsg, String settingid, String username, String msgcontent, long msgtime, boolean isunread, int unreadcount, String uicon) ;

客户可以使用isSelfMsg,settingid,username,msgcontent这四个参数来刷新列表。

2) 客服组列表接口Ntalker.getExtendInstance().conversation().getList(),该接口是app首次显示客服组列表时调用的。数据结构是List<Map<String, Object»,key值有8个,包括settingid,isunread,isSelfMsg,textmsg,uname,msgtime,messagecount,uicon。

/**
* @param isSelfMsg true:访客自己的消息false:客服的消息
* @param settingid 发送消息的客服组id
* @param username 发送消息的客服名称
* @param msgcontent 消息内容
* @param msgtime 消息时间
* @param isunread 是否已读
* @param messagecount 未读消息数量
* @param uicon 客服头像
*/
Ntalker.getExtendInstance().conversation().getList();

Android集成FAQ

Android6.0动态获取权限

可在小能initSDK方法后调用,或者在打开聊窗前调用,动态获取所需权限

String[] permissions = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA};
Ntalker.getExtendInstance().ntalkerSystem().requestPermissions(this, permissions);

Android7.0拍照适配

如在项目中已经适配了7.0拍照,可以将file_paths.xml中的内容与您项目中的path.xml合并为一个,同时将清单文件中Provider的android:authorities统一为项目包名+.fileprovider

1)在XiaonengChatUI的res/xml/file_paths.xml中标注位置更改为您自己的包名。

2)在您自己工程的AndroidManifest.xml中添加以下代码,并将其中的android:authorities中的包名改为您自己的包名+.fileprovider即可。

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.example.XNChatDemo3.fileprovider"android:exported="false"android:grantUriPermissions="true" ><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" />
</provider>

添加表情白名单

若build.gradle文件中的shrinkResources为true,聊窗中的表情将显示为空白或者黑框,如图中所示:

需要在您主项目的res/raw中添加一个keep.xml,保留小能的emoji表情,文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"tools:keep="@drawable/xnemoji_*"
/>

混淆代码

2.6.0及之前版本混淆代码

-dontwarn cn.xiaoneng.**
-dontwarn android.support.v4xn.**
-dontwarn orgxn.fusesource.**
-keep class cn.xiaoneng.** {*;}
-keep class android.support.v4xn.** {*;}
-keep class orgxn.fusesource.** {*;}
-ignorewarnings

2.6.2及后续版本混淆代码

-dontwarn cn.xiaoneng.**
-dontwarn android.support.v4xn.**
-dontwarn org.fusesource.**
-dontwarn net.sf.retrotranslator.**
-dontwarn edu.emory.mathcs.backport.java.util.**
-keep class cn.xiaoneng.** {*;}
-keep class android.support.v4xn.** {*;}
-keep class org.fusesource.** {*;}
-keep class net.sf.retrotranslator.** {*;}
-keep class edu.emory.mathcs.backport.java.util.** {*;}
-ignorewarnings

旧版升级2.6.5说明

1)删除项目中旧版的SDK集成包

2)导入2.6.5新版本SDK集成包

3)如之前添加过小能混淆代码,需调整为2.6.2及后续版本的混淆代码进行集成 混淆代码

4)升级完成后需发送测试包,由小能技术测试完成后在上线使用

备注:

1)旧版包括2.6.0及之前的所有SDK版本,必需在完全删除原有SDK集成包的基础上进行升级,不能只替换libs文件夹中的jar包

2)旧版升级到2.6.5.2及后续版本SDK时,如果集成了小能IM推送,需要删除AndroidManifest清单文件中的XpushReceiver相关内容 配置修改

判断是否在主进程的样式代码

if(getApplicationContext().getPackageName().equals(getCurrentProcessName())
{//初始化SDK
}private String getCurrentProcessName() {int pid = android.os.Process.myPid();String processName = "";ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);for (ActivityManager.RunningAppProcessInfo process : manager.getRunningAppProcesses()) {if (process.pid == pid) {processName = process.processName;}}return processName;
}

错误码

各集成方法均有错误码,在注册XNErrorListener错误码监听接口后,可以统一从其实现的onError接口方法中获得错误码。

重要提示:

1)在集成发生错误时,集成方可首先利用此表自我纠错。

2)在寻求小能客服技术支持时,请先告知错误码,这样才能够快速的定位问题。

3)对于604错误,请检查“初始化”中的参数是否正确,ChatActivity是否注册。

SDK历史版本说明

Android访客SDK V2.6.5.3 2018-07-24

  • 1、调整获取设备系统信息方法

  • 2、优化url链接在聊窗渲染问题

  • 3、优化DataBase数据库问题

Android访客SDK V2.6.5.2 2018-06-25

  • 1、优化小能Xpush推送注册方式,改为动态注册BroadCastReceiver

  • 2、修复一些bug

Android访客SDK V2.6.5.1 2018-06-12

  • 1、适配Android8.0通知栏

  • 2、修复一些bug

Android访客SDK V2.6.5 2018-05-21

  • 1、支持设置用户标签

  • 2、优化登录逻辑和聊窗列表刷新

  • 3、优化商品请求

  • 4、修复一些bug

Android访客SDK V2.6.2 2017-12-15

  • 1、添加商品条点击跳转监听

  • 2、添加“关闭聊窗”外部调用接口

  • 3、优化统计请求逻辑

  • 4、优化SDK登录逻辑

  • 5、更新mqtt底层jar包

Android访客SDK V2.6.0 2017-09-25

  • 1、优化SDK登录方法。

  • 2、优化客服组列表功能,添加了客服头像和客服名字。

  • 3、修复机器人回复消息不可点击的问题。

  • 4、添加https重定向功能。

小能在线客服开发文档相关推荐

  1. 微信小程序客服介绍:如何设置小程序在线客服?

    其实只需要解决2个问题 第一步,在微信小程序中添加联系在线客服按钮 第二步,接入在线客服功能,设置[自动/人工/转人工]回复等 一.添加小程序客服按钮 ① 在小程序中添加客服按钮功能,点此参考官方文档 ...

  2. 微信小程序在线客服系统都有哪些功能?

    微信小程序的用户已经破6亿,不少企业都看准了小程序这块大蛋糕.但是想要把握住小程序红利,除了做好运营推广外,用户服务也是重中之重.微信小程序自带的客服系统却很难满足用户服务的需求,于是很多小程序使用者 ...

  3. 知乎爆赞!4504页《微信小程序零基础入门开发文档》+《小程序实战笔记》,你学废了吗?

    前言 微信小程序作为近几年"微服务"的杰出代表,应用十分广泛.小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验 ...

  4. 小程序在线客服完整实现

    1.先注册公众号>小程序(需实名认证) 2.开发>测试>上传>审核发布>发布>使用 3.公众号(订阅号或服务号)与小程序(此为在线客服)通过同一主体绑定可以打通调用 ...

  5. ttkefu迷你小窗口“在线客服咨询”文字怎么改?

    登录网站后,左下角或右下角弹出的迷你对话框中,对话框的标题默认是中文"在线客服咨询",有客户问这个的标题可以修改吗,比如换成英文之类的,这个当然是可以的,那么要怎么修改呢?如图所示 ...

  6. 微信小程序在线客服聊天

    1.分析 小程序给我们提供的在线聊天功能,在界面中只能通过按钮开放能力来打开. 只能在手机端中去使用,在模拟器中无法进行 2.代码: <!--联系客服--><buttonopen-t ...

  7. 微信小程序在线客服接入功能详解

    步骤一::小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任选一种方法. 1.插入固定的接入样式 < ...

  8. 微信内置小程序在线客服功能

    在小程序中加入客服消息按钮 小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可,不需要自行在小程序中实现. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任 ...

  9. 微信小程序在线客服接入

    小程序接入微信「客服消息」功能模块,开发者只需要调用按钮,触发微信的客服消息功能即可,不需要自行在小程序中实现. 加入客服消息按钮有两个方法,大家可以根据自己的实际需求,任选一种方法. 1.插入固定的 ...

  10. 微信小程序(天气预报)开发文档

    相关Demo以放到github上 ---------飞机------------https://github.com/193Eric/XCXdemo.git 小程序技术文档 一.小程序应用分析 1.  ...

最新文章

  1. 数据库的概念以及MYSQL的安装和卸载
  2. NCEPU:线下组队学习周报(008)
  3. 可视化的Redis数据库管理工具redis-desktop-manager的初步使用(图文详解)
  4. 动态规划--最长公共子序列
  5. flex使用FlexPrintJob打印问题
  6. VTK:Rendering之AmbientSpheres
  7. 三数之和为0(c语言实现)(改进)
  8. python-jieba分词模块
  9. 调用另外一个文件_从零开始学Python-Day52-文件读写
  10. 实验2-1-5 将x的平方赋值给y (5 分)
  11. scipy.stats —— 概率、随机变量与分布
  12. IE8 默认以Web Standards模式显示网页 全面遵循Web标准
  13. 经典:趣解什么叫网关?
  14. 【2018蓝桥省赛A组C/C++】全球变暖(两次bfs+状态标记 or 一次dfs)
  15. H5在微信下载app
  16. altium designer 快捷键
  17. 细说MySQL的时间戳(Timestamp)类型
  18. eclipse web项目启动后不自动打开浏览器,谷歌了一下终于找到设置了
  19. Google Adwords新手快速入门教程
  20. 数据库MySQL最大连接数、最大活跃连接数、最大并发数、并发会话数区别

热门文章

  1. 数据分析入门必备基础知识
  2. 江南大学物联网工程学院数据库课程实验一作业1实验报告
  3. 糖尿病会对视网膜造成影响吗?
  4. GI 中新的基础架构 --MDNS, gipc 和 gpnp 是如何协同工作的
  5. Mathematica 分段函数 求导 求积分
  6. Starbound正式版的Mod制作(一)nbsp;…
  7. 安全之路 —— C/C++开3389端口(远程终端)
  8. 12306火车时刻表查询接口
  9. Android修改浏览器书签和主页
  10. 如何将pdf转换成jpg,转换达人教你一招搞定