簡(jiǎn)介
網(wǎng)易七魚(yú) iOS SDK 是客服系統(tǒng)訪客端的解決方案,既包含了客服聊天邏輯管理,也提供了聊天界面,開(kāi)發(fā)者可方便的將客服功能集成到自己的 APP 中。 本模塊支持 iOS 7 以上,Android 2.3 以上版本,同時(shí)支持手機(jī)、Pad。在iOS 9.2 以上版本中支持 IPv6,能正常通過(guò)蘋(píng)果審核。 詳情請(qǐng)前往:http://www.qiyukf.com
安裝與配置
安裝
通過(guò)yarn安裝
yarn add react-native-qiyu
即把react-native-qiyu導(dǎo)入到工程中的node_modules文件夾中
配置
iOS
執(zhí)行以下命令:
react-native link react-native-qiyu
自動(dòng)完成配置
link成功命令行會(huì)提示
Linking react-native-qiyu ios dependency
或者你還可以手動(dòng)配置
a.打開(kāi)XCode's工程中, 右鍵點(diǎn)擊Libraries文件夾 ? Add Files to <...>
b.去node_modules ? react-native-qiyu ? ios ? 選擇 RCTQiYu.xcodeproj
c.在工程Build Phases ? Link Binary With Libraries中添加libRCTQiYu.a
工程配置
在工程target的Build Phases->Link Binary with Libraries中加入
UIKit.framework、
CoreText.framework、
MobileCoreService.framework、
SystemConfiguration.framework、
AVFoundation.framwork、
CoreTelephony.framework、
CoreMedia.framework、
AudioToolbox.framework、
libz.tbd、
libstdc++.6.0.9.tbd、
libsqlite3.0.tbd等依賴庫(kù),
在Build Phases->Copy Bundle Resources下添加QYResource.bundle資源包。
iOS9傳輸安全問(wèn)題
在iOS9中,默認(rèn)需要為每次網(wǎng)絡(luò)傳輸建立SSL,解決方法是在應(yīng)用plist文件中設(shè)置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key></true>
</dict>
iOS10權(quán)限設(shè)置
* 在Info.plist中加入以下內(nèi)容:
<key>NSPhotoLibraryUsageDescription</key>
<string>需要照片權(quán)限</string>
<key>NSCameraUsageDescription</key>
<string>需要相機(jī)權(quán)限</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要麥克風(fēng)權(quán)限</string>
如果不加,會(huì)crash。
如果在原生代碼中需要引入七魚(yú)SDK
在工程target的Build Setting->
Library Search Paths中添加$(SRCROOT)/../node_modules/react-native-qiyu/ios/RCTQiYu、
在Header Search Paths中添加$(SRCROOT)/../node_modules/react-native-qiyu/ios/RCTQiYu
消息推送
需要在工程的APPDelegate文件中的
(void)application:(UIApplication *)app
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
方法中把 APNS Token 傳給 SDK
示例代碼:
- (void)application:(UIApplication *)app
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
......
[[QYSDK sharedSDK] updateApnsToken:deviceToken];
......
}
具體使用請(qǐng)參考QiYuDemo例子工程
Android
手動(dòng)配置 編輯android/settings.gradle
// ...
include ':react-native-qiyu'
project(':react-native-qiyu').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-qiyu/android')
編輯android/app/build.gradle
// ...
dependencies {
// ...
compile project(':react-native-qiyu')
}
在MainApplication.java中注冊(cè)模塊(基于React-Native 0.32+) 編輯android/app/src/main/java/[...]/MainApplication.java
// ...
import com.qiyukf.unicorn.reactnative.QiyuSdkPackage; // <--- 導(dǎo)包
public class MainApplication extends Application implements ReactApplication {
// ...
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
// ...
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new QiyuSdkPackage("七魚(yú)管理后臺(tái)的appKey", "七魚(yú)管理后臺(tái)的App名稱") // <--- 添加package
);
}
// ...
};
// ...
}
如果你使用的React-Native版本中不包含MainApplication.java,則可能需要在MainActivity.java中注冊(cè)模塊,方法同上。
Method
- registerAppId
- openServiceWindow
- setCustomUIConfig
- setUrlClickWithEventName
- setUnreadCountWithEventName
- getUnreadCountCallback
- setUserInfo
- logout
方法接口描述
registerAppId 注冊(cè)七魚(yú)SDK
registerAppId(appKey, appName)
params
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
| appKey | 字符串類型 | 無(wú) | 七魚(yú)管理后臺(tái)的appKey |
| appName | 字符串類型 | 無(wú) | 七魚(yú)管理后臺(tái)的App名稱 |
示例代碼
import QiYu from 'react-native-qiyu';
QiYu.registerAppId('七魚(yú)管理后臺(tái)的appKey', '七魚(yú)管理后臺(tái)的App名稱');
注意事項(xiàng)
建議在應(yīng)用啟動(dòng)時(shí)初始化,初始化之前無(wú)法使用此模塊的其他方法。七魚(yú)模塊只需要初始化一次。代碼如下
componentWillMount() {
QiYu.registerAppId('七魚(yú)管理后臺(tái)的appKey', '七魚(yú)管理后臺(tái)的App名稱');
}
openServiceWindow 啟動(dòng)客服聊天窗口
openServiceWindow(params)
params
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
| source | JSON對(duì)象 | 無(wú) | 會(huì)話窗口來(lái)源 |
| sourceTitle | 字符串類型 | 無(wú) | 會(huì)話窗口來(lái)源標(biāo)題 |
| sourceUrl | 字符串類型 | 無(wú) | 會(huì)話窗口來(lái)源URL |
| sourceCustomInfo | 字符串類型 | 無(wú) | 會(huì)話窗口來(lái)源自定義消息 |
| commodityInfo | JSON對(duì)象 | 無(wú) | 商品詳情信息 |
| commodityInfoTitle | 字符串類型 | 無(wú) | 商品詳情信息展示商品標(biāo)題,字符數(shù)要求小于100 |
| commodityInfoDesc | 字符串類型 | 無(wú) | 商品詳情信息展示商品描述,字符數(shù)要求小于300 |
| pictureUrl | 字符串類型 | 無(wú) | 商品詳情信息展示商品圖片URL,字符數(shù)要求小于1000 |
| commodityInfoUrl | 字符串類型 | 無(wú) | 商品詳情信息展示跳轉(zhuǎn)URL,字符數(shù)要求小于1000 |
| note | 字符串類型 | 無(wú) | 商品詳情信息展示備注信息,可以顯示價(jià)格、訂單號(hào)等,字符數(shù)要求小于100 |
| show | 布爾類型 | false | 商品詳情信息展示發(fā)送時(shí)是否要在用戶端顯示,默認(rèn)不顯示 |
| sessionTitle | 字符串類型 | 無(wú) | 客服會(huì)話窗口標(biāo)題 |
| staffId | long類型 | 無(wú) | 指定客服id,如果同時(shí)指定 staffId 和 groupId,以 staffId 為準(zhǔn),忽略 groupId |
| groupId | long類型 | 無(wú) | 指定客服分組id,如果同時(shí)指定 staffId 和 groupId,以 staffId 為準(zhǔn),忽略 groupId |
示例代碼
import QiYu from 'react-native-qiyu';
var params = {
source:{
sourceTitle:'網(wǎng)易七魚(yú)ReactNative',
sourceUrl:'http://www.qiyukf.com',
sourceCustomInfo:'我是來(lái)自自定義的信息'
},
commodityInfo:{
commodityInfoTitle:'ReactNative商品',
commodityInfoDesc:'這是來(lái)自網(wǎng)易七魚(yú)ReactNative的商品描述',
pictureUrl:'http://qiyukf.com/res/img/companyLogo/blmn.png',
commodityInfoUrl:'http://www.qiyukf.com',
note:'¥1000',
show:true
},
sessionTitle:'網(wǎng)易七魚(yú)',
groupId:0,
staffId:0
}
QiYu.openServiceWindow(params);
setCustomUIConfig 自定義客服聊天窗口UI
setCustomUIConfig(params)
params
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
| sessionTipTextColor | 字符串類型,如'#CC00FF' | 無(wú) | 會(huì)話窗口上方提示條中的文本字體顏色 |
| sessionTipTextFontSize | int類型,如15 | 無(wú) | 會(huì)話窗口上方提示條中的文本字體大小 |
| customMessageTextColor | 字符串類型,如'#CC00FF' | 無(wú) | 訪客文本消息字體顏色 |
| serviceMessageTextColor | 字符串類型,如'#CC00FF' | 無(wú) | 客服文本消息字體顏色 |
| messageTextFontSize | int類型,如15 | 無(wú) | 消息文本消息字體大小 |
| tipMessageTextColor | 字符串類型,如'#CC00FF' | 無(wú) | 提示文本消息字體顏色 |
| tipMessageTextFontSize | int類型,如15 | 無(wú) | 提示文本消息字體大小 |
| inputTextColor | 字符串類型,如'#CC00FF' | 無(wú) | 輸入框文本字體顏色 |
| inputTextFontSize | int類型,如15 | 無(wú) | 輸入框文本字體大小 |
| sessionBackgroundImage | [*]字符串類型,傳入圖片的絕對(duì)路徑,如'./qiyu/session_bg.png' | 無(wú) | 客服聊天窗口背景圖片 |
| sessionTipBackgroundColor | 字符串類型,如'#CC00FF' | 無(wú) | 會(huì)話窗口上方提示條的背景顏色 |
| customerHeadImage | [*]字符串類型,傳入圖片的絕對(duì)路徑 | 無(wú) | 訪客頭像 |
| serviceHeadImage | [*]字符串類型,傳入圖片的絕對(duì)路徑 | 無(wú) | 客服頭像 |
| sessionMessageSpacing | float類型,如3.5 | 無(wú) | 消息豎直方向間距 |
| showHeadImage | 布爾類型 | true | 是否顯示頭像 |
| showAudioEntry | 布爾類型 | true | 是否顯示發(fā)送語(yǔ)音入口,設(shè)置為false,可以修改為隱藏 |
| showEmoticonEntry | 布爾類型 | true | 是否顯示發(fā)送表情入口,設(shè)置為false,可以修改為隱藏 |
| autoShowKeyboard | 布爾類型 | true | 進(jìn)入聊天界面,是文本輸入模式的話,會(huì)彈出鍵盤(pán),設(shè)置為false,可以修改為不彈出 |
-
注意
為了防止 react-native 在打包時(shí)將用于七魚(yú)的圖片文件過(guò)濾掉,我們需要將用于七魚(yú)的圖片文件添加引用,如
var session_bg = require('./qiyu/session_bg.png')
建議將七魚(yú)使用的圖片單獨(dú)放在一個(gè)文件夾下,如qiyu。
示例代碼
import QiYu from 'react-native-qiyu';
var params = {
sessionTipTextColor:'#CC00FF',
sessionTipTextFontSize:20,
customMessageTextColor:'#CC00FF',
serviceMessageTextColor:'#CC00FF',
messageTextFontSize:20,
tipMessageTextColor:'#CC00FF',
tipMessageTextFontSize:20,
inputTextColor:'#CC00FF',
inputTextFontSize:20,
sessionBackgroundImage:'session_bg',
sessionTipBackgroundColor:'#000000',
customerHeadImage:'customer_head',
serviceHeadImage:'service_head',
sessionMessageSpacing:2,
showHeadImage:true,
showAudioEntry:false,
showEmoticonEntry:false,
autoShowKeyboard:false
}
QiYu.setCustomUIConfig(params);
setUrlClickWithEventName 用于設(shè)置聊天窗口中的事件處理
setUrlClickWithEventName(eventName)
params
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
| eventName | 字符串類型 | 無(wú) | 指定一個(gè)事件名稱,指定DeviceEventEmitter.addListener后會(huì)進(jìn)行事件監(jiān)聽(tīng) |
| e | Event對(duì)象 | 無(wú) | 事件回調(diào)返回?cái)?shù)據(jù),返回'url'字段,為鏈接地址字符串 |
示例代碼
import QiYu from 'react-native-qiyu';
QiYu.setUrlClickWithEventName(eventName);
DeviceEventEmitter.addListener(eventName, function(e: Event) {
console.log(e.url);
});
setUnreadCountWithEventName 用于設(shè)置會(huì)話管理,使得未讀數(shù)改變的時(shí)候會(huì)回調(diào)
setUnreadCountWithEventName(eventName)
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
| eventName | 字符串類型 | 無(wú) | 指定一個(gè)事件名稱,指定DeviceEventEmitter.addListener后會(huì)進(jìn)行事件監(jiān)聽(tīng) |
| e | Event對(duì)象 | 無(wú) | 事件回調(diào)返回?cái)?shù)據(jù),返回'unreadCount'字段,為未讀數(shù)字符串 |
示例代碼
import QiYu from 'react-native-qiyu';
QiYu.setUnreadCountWithEventName(UnreadCountCallback);
DeviceEventEmitter.addListener(UnreadCountCallback, function(e: Event) {
console.log(e.unreadCount);
});
getUnreadCountCallback 得到會(huì)話未讀數(shù),主動(dòng)獲取
getUnreadCountCallback(callback(unreadCount))
params
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
| unreadCount | 字符串類型 | 無(wú) | 返回未讀消息數(shù) |
示例代碼
import QiYu from 'react-native-qiyu';
QiYu.getUnreadCountCallback((unreadCount)=>{
console.log(unreadCount);
});
setUserInfo 用于設(shè)置CRM個(gè)人信息
setUserInfo(params)
params
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
| userId | 字符串類型 | 無(wú) | 個(gè)人賬號(hào)Id |
| data | 字符串類型 | 無(wú) | 用戶詳細(xì)信息json |
示例代碼
import QiYu from 'react-native-qiyu';
var params = {
userId:'uid10101010',
data:'[{\"key\":\"real_name\", \"value\":\"土豪\"},{\"key\":\"mobile_phone\", \"hidden\":true},{\"key\":\"email\", \"value\":\"13800000000@163.com\"},{\"index\":0, \"key\":\"account\", \"label\":\"賬號(hào)\", \"value\":\"zhangsan\", \"href\":\"http://example.domain/user/zhangsan\"},{\"index\":1, \"key\":\"sex\", \"label\":\"性別\", \"value\":\"先生\"},{\"index\":5, \"key\":\"reg_date\", \"label\":\"注冊(cè)日期\", \"value\":\"2015-11-16\"},{\"index\":6, \"key\":\"last_login\", \"label\":\"上次登錄時(shí)間\", \"value\":\"2015-12-22 15:38:54\"}]'
}
QiYu.setUserInfo(params);
logout 注銷當(dāng)前賬號(hào)
logout()
示例代碼
import QiYu from 'react-native-qiyu';
QiYu.logout();
此文轉(zhuǎn)自網(wǎng)易七魚(yú)官方GitHub:https://github.com/qiyukf/react-native-qiyu