UdeskSDK-Android
お知らせ
SDKのネイティブロボット機能は 5.x ブランチにあります。
androidQ、androidX への対応は 5.x_android_Q ブランチにあります。
SDKダウンロードアドレス
Udesk-Android ソースコードダウンロードアドレス
目次
- 一、特別声明
- 二、SDKの統合
- 三、SDKのクイックスタート
- 四、Udesk SDK カスタム設定
- 五、Udesk API説明
- 六、メッセージプッシュ
- 七、よくある質問
- 八、更新履歴
- 九、機能スクリーンショット
一、特別声明
5.1.0 商品メッセージの背景、フォント設定APIが変更されました。ご注意ください。
SDKはAACフレームワークを採用しています
frescoバージョンに関する問題
もしあなたのプロジェクトでsoライブラリのロード設定を指定してパッケージングしている場合、
ndk{
abiFilters "armeabi"
}
frescoのバージョン番号に特に注意する必要があります。fresco 1.9.0 以降の Application.mk では APP_ABI := armeabi-v7a armeabi arm64-v8a x86 x86_64 となっており、
armeabi は含まれていません。
UdeskSDKUIディレクトリのbuild.gradleファイルの dependencies で frescoのバージョン番号を変更してください。androidstudioの最新版への更新指示に従わないでください。
customer_token、 sdk_token は英数字とアンダースコアのみをサポートし、特殊文字は使用できません。
二、SDKの統合
1 リモート依存関係による統合
-
ルートの build.gradle ファイルの repositories セクションの末尾に以下を追加します:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } } 2. 依存関係を追加します
全機能
dependencies {
implementation 'com.github.udesk:UdeskSDK-Android:バージョン番号'
}
部分機能
dependencies {
implementation 'com.github.udesk.UdeskSDK-Android:モジュール名(UdeskSDKUI|udeskvideo|udeskasr):バージョン番号'
}
3.その他の依存ライブラリを追加します
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.facebook.fresco:fresco:1.3.0'
implementation 'com.facebook.fresco:animated-gif:1.3.0'
implementation 'me.relex:photodraweeview:1.1.3'
implementation 'android.arch.lifecycle:extensions:1.1.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
implementation group: 'org.ccil.cowan.tagsoup', name: 'tagsoup', version: '1.2.1'
implementation 'org.greenrobot:eventbus:3.0.0'
2 ローカル統合
| Demo内のファイル | 説明 |
|---|---|
| UdeskSDKUI | Udeskオンライン相談SDK |
| udeskvideo | UdeskビデオサポートSDK(オンライン相談SDKに依存) |
| udeskasr | Udeskネイティブボット音声認識機能(オンライン相談SDKに依存) |
注意:UdeskSDKUIはUdeskvideoとudeskasrに依存していません。不要な場合はこれらのSDKをインポートしないでください。
行うべきことは、UdeskSDKUIを独立したモジュールとしてインポートし、あなたのアプリのbuild.gradleファイルに以下を追加することです:
dependencies {
api project(':UdeskSDKUI')
}
3 権限
SDKには以下の権限が必要です。すでにある場合は重複して追加する必要はありません。
<!-- ネットワーク状態権限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 電話状態権限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 電話発信権限 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- 外部ファイル読み書き権限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FLAG_GRANT_READ_URI_PERMISSION" />
<!-- 録音権限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- カメラ・アルバム権限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<!-- 地理位置情報 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
4 Proguard
SDKはsmack、fresco、eventbus、okhttp、bugly、agoraなどのサードパーティライブラリを使用しています。具体的な難読化はそれぞれの公式ドキュメントを参照してください。重複する場合は追加する必要はありません。
//udesk
-keep class udesk.** {*;}
-keep class cn.udesk.**{*; }
//百度音声(百度音声認識を使用する場合は追加、使用しない場合は追加不要)
-keep class com.baidu.speech.**{*;}
//smack
-keep class org.jxmpp.** {*;}
-keep class de.measite.** {*;}
-keep class org.jivesoftware.** {*;}
-keep class org.xmlpull.** {*;}
-dontwarn org.xbill.**
-keep class org.xbill.** {*;}
//agora
-keep class io.agora.**{*;}
以上の操作が完了したら、UdeskSDKの他の機能を使用できるようになります。幸運を祈ります!
三、SDKのクイックスタート
1. 管理画面でアプリケーション作成時に生成された対応するApp KeyとApp IDを初期化する
UdeskSDKManager.getInstance().initApiKey(context, "you domain","App Key","App Id");
注意:ドメインにはhttp://部分を含めないでください。登録時に生成されたドメインが"http://udesksdk.udesk.cn/"の場合、"udesksdk.udesk.cn"のみを渡してください。
2. UdeskConfigの設定情報を設定する。
説明:設定する機能は実際の必要に応じて選択してください。すべてデフォルトの動作があります。
2.1 ユーザーの基本情報を設定する
注意:sdktokenは必須入力です
デフォルトのシステムフィールドはUdeskが定義済みのフィールドです。開発者はこれらのユーザー情報を直接渡して、カスタマーサポートが確認できるようにすることができます。
String sdktoken = "ユーザーの一意の識別子";
Map<String, String> info = new HashMap<String, String>();
//sdktoken 必須
info.put(UdeskConst.UdeskUserInfo.USER_SDK_TOKEN, sdktoken);
//以下の情報はオプションです
info.put(UdeskConst.UdeskUserInfo.NICK_NAME,"ニックネーム");
info.put(UdeskConst.UdeskUserInfo.EMAIL,"0631@163.com");
info.put(UdeskConst.UdeskUserInfo.CELLPHONE,"15651818750");
info.put(UdeskConst.UdeskUserInfo.DESCRIPTION,"説明情報");
info.put(UdeskConst.UdeskUserInfo.CUSTOMER_TOKEN,custom_token);
//ユーザー基本情報のみを設定する構成
UdeskConfig.Builder builder = new UdeskConfig.Builder();
builder.setDefualtUserInfo(info)
UdeskSDKManager.getInstance().entryChat(getApplicationContext(), builder.build(), sdkToken);
ユーザー作成および更新ロジック:
1. 主キー [sdk_token customer_token email cellphone] (デフォルトprimary_keyはsdk_token)、または [customer_token sdk_token email cellphone] (primary_key が customer_takenの場合) を使用して順次ユーザーを検索
1. primary_keyがデフォルトの場合、sdk_tokenで見つかったユーザーをcustomerAとする
1.1 競合がない場合、ユーザーの主キー customer_token email cellphoneを更新し、1.4に進む
1.2 競合が存在する場合、競合する主キー customer_token email cellphoneは無視される
2. primary_key == 'customer_token' の場合、customer_tokenで見つかったユーザーをcustomerAとする
2.1 他の顧客customerB.sdk_tokenがsdk_tokenと等しくない場合、sdk_tokenを更新
2.2 他の顧客customerB.sdk_tokenがsdk_tokenと等しい場合、customerBのsdk_tokenは 元のsdk_token + '_' + customerA.id + '_' + タイムスタンプ に更新され、ニックネームは 新しく渡された nick_name + ' ' + 'sdk' に変更される。これにより、ユーザーcustomerBは主キー変更されたと見なされる
3. email cellphone 主キー処理
3.1 競合がない場合、email cellphoneを更新
3.2 競合がある場合、email cellphoneを無視
4. 顧客のその他の非主キー情報 customer_field nick_name qq description lang を更新
5. deviceを更新
6. ユーザーのipおよび都道府県情報を更新
2. ユーザーdeviceを作成
注意
現在、primary_keyの値を顧客の一意識別子として使用し、身元を識別します。
customer_tokenの値が空でない場合、primary_keyの値はcustomer_tokenとなり、customer_tokenの値を顧客の一意識別子として使用し、身元を識別します。
customer_tokenの値が空の場合、primary_keyの値はsdk_tokenとなり、sdk_tokenの値を顧客の一意識別子として使用し、身元を識別します。
customer_token sdk_token: 渡される文字には **英字/数字** 文字セットを使用してください。身分証のように、1つの身分証番号が複数の人に対応したり、1人が複数の身分証番号を持つことは許可されません。
次に、顧客にメールアドレスと携帯電話番号を設定する場合、異なる顧客が同じ携帯電話番号やメールアドレスに対応しないようにする必要があります。同じものが出現した場合、新しい顧客は作成されません。
2.2 UdeskConfig内部クラスBuilderの説明
| 属性 | 設定メソッド | 機能説明 |
|---|---|---|
| udeskTitlebarBgResId | setUdeskTitlebarBgResId | タイトルバーTitleBarの背景色、色で設定 |
| udeskTitlebarMiddleTextResId | setUdeskTitlebarMiddleTextResId | タイトルバーTitleBar、中央上下の文字の色 |
| udeskTitlebarRightTextResId | setUdeskTitlebarRightTextResId | タイトルバーTitleBar、右側の文字の色 |
| udeskIMLeftTextColorResId | setUdeskIMLeftTextColorResId | IM画面、左側の文字のフォント色 |
| udeskIMRightTextColorResId | setUdeskIMRightTextColorResId | IM画面、右側の文字のフォント色 |
| udeskIMAgentNickNameColorResId | setUdeskIMAgentNickNameColorResId | IM画面、左側のカスタマーサポートニックネーム文字のフォント色 |
| udeskIMCustomerNickNameColorResId | setUdeskIMCustomerNickNameColorResId | IM画面、右側の顧客ニックネーム文字のフォント色 |
| udeskIMTimeTextColorResId | setUdeskIMTimeTextColorResId | IM画面、時間文字のフォント色 |
| udeskIMTipTextColorResId | setUdeskIMTipTextColorResId | IM画面、ヒントテキストのフォント色、例えばカスタマーサポート転送 |
| udeskbackArrowIconResId | setUdeskbackArrowIconResId | 戻る矢印アイコンのリソースid |
| udeskCommityBgResId | setUdeskCommityBgResId | 商品相談itemの背景色 |
| udeskCommityTitleColorResId | setUdeskCommityTitleColorResId | 商品紹介Titleの文字色 |
| udeskCommitysubtitleColorResId | setUdeskCommitysubtitleColorResId | 商品相談ページ内、商品紹介サブTitleの文字色 |
| udeskCommityLinkColorResId | setUdeskCommityLinkColorResId | 商品相談ページ内、リンク送信の文字色 |
| isUserSDkPush | setUserSDkPush | プッシュサービスを使用するかどうかを設定 true は使用 falseは不使用 |
| UdeskQuenuMode | setUdeskQuenuMode | 待機行列放棄の戦略を設定 |
| isUseVoice | setUseVoice | 録音機能を使用するかどうか trueは使用 falseは不使用 |
| isUsephoto | setUsephoto | 画像送信機能を使用するかどうか trueは使用 falseは不使用 |
| isUsecamera | setUsecamera | 写真撮影機能を使用するかどうか trueは使用 falseは不使用 |
| isUsefile | setUsefile | ファイルアップロード機能を使用するかどうか trueは使用 falseは不使用 |
| isUseMap | setUseMap | 位置情報送信機能を使用するかどうか trueは使用 falseは不使用 |
| isUseEmotion | setUseEmotion | 絵文字を使用するかどうか trueは使用 falseは不使用 |
| isUseMore | setUseMore | その他の機能オプションを表示するかどうか trueは使用 falseは不使用 |
| isUseNavigationRootView | setNavigations | ナビゲーションUIを使用するかどうかを設定 trueは使用 falseは不使用 |
| isUseRobotNavigationRootView | setRobotNavigations | ロボットナビゲーションUIを使用するかどうかを設定 trueは使用 falseは不使用 |
| isUseNavigationSurvy | setUseNavigationSurvy | ナビゲーションUI内の満足度評価UIを使用するかどうかを設定 trueは使用 falseは不使用 |
| isUseSmallVideo | setUseSmallVideo | 小動画機能が必要かどうかを設定 trueは使用 falseは不使用 |
| isScaleImg | setScaleMax | 幅と高さの最大値を設定、超える場合は圧縮、それ以外は圧縮しない |
| ScaleMax | setScaleImg | 画像アップロードで原画像を使用するかサムネイルを使用するか |
| useMapType | setUseMapSetting | 使用する地図の種類を設定 |
| Orientation | setOrientation | デフォルトの画面表示習慣を設定 |
| isUserForm | setUserForm | ローカル設定でフォームメッセージが必要かどうか、trueは必要、 false は不要 |
| defaultUserInfo | setDefaultUserInfo | ユーザー作成の基本情報 |
| definedUserTextField | setDefinedUserTextField | カスタムテキスト情報を作成 |
| definedUserRoplist | setDefinedUserRoplist | カスタムリスト情報を作成 |
| firstMessage | setFirstMessage | メッセージを1つ設定 セッション割り当て時にカスタマーサポートに送信 |
| robot_modelKey | setRobot_modelKey | udesk ロボットよくある質問 対応するId値 |
| concatRobotUrlWithCustomerInfo | setConcatRobotUrlWithCustomerInfo | ロボットページで顧客情報を収集するために使用 |
| customerUrl | setCustomerUrl | 顧客のアバターアドレスを設定 |
| commodity | setCommodity | 商品リンク送信のmodeを設定 |
| txtMessageClick | setTxtMessageClick | テキストメッセージ内のリンクメッセージのクリックイベントのインターセプトコールバック。 絵文字を含むものはインターセプトコールバックされません |
| formCallBack | setFormCallBack | オフラインメッセージフォームのコールバックインターフェース 、コールバックで独自の処理フローを使用 |
| structMessageCallBack | setStructMessageCallBack | 構造化メッセージのクリックイベントコールバックインターフェースを設定 |
| extreFunctions | setExtreFunctions | 追加の機能ボタンを設定 |
| functionItemClickCallBack | setExtreFunctions | クリックイベントコールバック テキスト,画像,動画,ファイル,地理位置,商品情報を直接送信 |
| navigationModes | setNavigations | 取り決められたカスタムボタンコレクションを渡す |
| robotnavigationModes | setRobotNavigations | 取り決められたカスタムボタンコレクションを渡す |
| navigationItemClickCallBack | setNavigations | 顧客がナビゲーションにカスタムボタンのクリックコールバックイベントを追加することをサポート |
| locationMessageClickCallBack | setUseMapSetting | 地理位置情報クリックのコールバックインターフェース |
| cls | setUseMapSetting | 地図メッセージ表示の詳細activityを開くために渡す |
| groupId | setGroupId | 指定グループを設定、毎回入室時に再指定が必要 |
| isOnlyByGroupId | setGroupId | グループ指定のみで入室するかどうか |
| agentId | setAgentId | 指定カスタマーサポートidを設定、毎回入室時に再指定が必要 |
| isOnlyByAgentId | setAgentId | カスタマーサポート指定のみで入室するかどうか |
| isOnlyUseRobot | setOnlyUseRobot | ロボットのみを使用し、他の機能を使用しないかどうかを設定、必須項目ではない |
| mProduct | setProduct | 商品メッセージを設定 |
| channel | setChannel | SDKはカスタムチャネルをサポート(英数字のみサポート、特殊文字はサポートしません) |
| isShowCustomerNickname | isShowCustomerNickname | 顧客ニックネームを表示するかどうか |
| isShowCustomerHead | isShowCustomerHead | 顧客アバターを表示するかどうか |
| udeskProductLeftBgResId | setUdeskProductLeftBgResId | 商品メッセージ背景左側 |
| udeskProductRightBgResId | setUdeskProductRightBgResId | 商品メッセージ背景右側 |
| udeskProductRightNameLinkColorResId | setUdeskProductRightNameLinkColorResId | 商品メッセージの リンク付き時の 商品名表示の色 右側 |
| udeskProductLeftNameLinkColorResId | setUdeskProductLeftNameLinkColorResId | 商品メッセージの リンク付き時の 商品名表示の色 左側 |
| udeskProductMaxLines | setUdeskProductMaxLines | 商品メッセージ名の最大表示行数 |
| preSendRobotMessages | setPreSendRobotMessages | メッセージを1つ設定 ロボット画面に入ると自動送信 |
| productMessageClick | setProductMessageClick | 商品メッセージクリックコールバック |
| linkMessageWebonClick | setLinkMessageWebonClick | リンクメッセージクリックコールバック |
| replyProductMessageWebonClick | setReplyProductMessageWebonClick | 商品返信メッセージクリックコールバック |
| richMessageWebonClick | setRichMessageWebonClick | リッチテキストリンクメッセージクリックコールバック |
| imgTxtMessageWebonClick | setImgTxtMessageWebonClick | 画像テキストメッセージクリックコールバック |
| structMessageWebonClick | setStructMessageWebonClick | 構造化メッセージボタンリンクコールバック |
| maxHeightViewRatio | setMaxHeightViewRatio | インテリジェントヒントの最大高さを比率で設定 |
| maxHeightViewDimen | setMaxHeightViewDimen | インテリジェントヒントの最大高さを設定 |
private UdeskConfig.Builder makeBuilder() {
if (!TextUtils.isEmpty(edit_language.getText().toString())){
// 言語設定を保存
LocalManageUtil.saveSelectLanguage(getApplicationContext(),new Locale(edit_language.getText().toString()));
}
UdeskConfig.Builder builder = new UdeskConfig.Builder();
builder.setUdeskTitlebarBgResId(R.color.udesk_titlebar_bg1) //タイトルバーTitleBarの背景色を設定
.setUdeskTitlebarMiddleTextResId(R.color.udesk_color_middle_text) //タイトルバーTitleBar、左右両側の文字の色を設定
.setUdeskTitlebarRightTextResId(R.color.udesk_color_right_text) //タイトルバーTitleBar、右側の文字の色を設定
.setUdeskIMLeftTextColorResId(R.color.udesk_color_im_text_left1) //IM画面、左側の文字のフォント色を設定
.setUdeskIMRightTextColorResId(R.color.udesk_color_im_text_right1) // IM画面、右側の文字のフォント色を設定
.setUdeskIMAgentNickNameColorResId(R.color.udesk_color_im_left_nickname1) //IM画面、左側のカスタマーサポートニックネーム文字のフォント色を設定
.setUdeskIMCustomerNickNameColorResId(R.color.udesk_color_im_right_nickname1) //IM画面、右側のユーザーニックネーム文字のフォント色を設定
.setUdeskIMTimeTextColorResId(R.color.udesk_color_im_time_text1) // IM画面、時間文字のフォント色を設定
.setUdeskIMTipTextColorResId(R.color.udesk_color_im_tip_text1) //IM画面、ヒントテキストのフォント色を設定、例えばカスタマーサポート転送
.setUdeskbackArrowIconResId(R.drawable.udesk_titlebar_back) // 戻る矢印アイコンのリソースidを設定
.setUdeskCommityBgResId(R.color.udesk_color_im_commondity_bg1) //商品相談itemの背景色
.setUdeskCommityTitleColorResId(R.color.udesk_color_im_commondity_title1) // 商品紹介Titleの文字色
.setUdeskCommitysubtitleColorResId(R.color.udesk_color_im_commondity_subtitle1)// 商品相談ページ内、商品紹介サブTitleの文字色
.setUdeskCommityLinkColorResId(R.color.udesk_color_im_commondity_link1) //商品相談ページ内、リンク送信の文字色
.setUdeskProductLeftBgResId(R.drawable.udesk_im_txt_left_default) //商品メッセージ背景
.setUdeskProductRightBgResId(R.drawable.udesk_im_item_bg_right) //商品メッセージ背景
.setUdeskProductMaxLines(2) //商品メッセージ名の最大表示行数
.setUserSDkPush(set_sdkpush.isChecked()) // プッシュサービスを使用するかどうかを設定 true は使用 falseは不使用
.setOnlyUseRobot(set_use_onlyrobot.isChecked())//ロボット機能のみを使用するかどうかを設定 ロボット機能のみを使用、ロボット機能のみを使用; その他の機能は使用しない。
.setUdeskQuenuMode(force_quit.isChecked() ? UdeskConfig.UdeskQueueFlag.FORCE_QUIT : UdeskConfig.UdeskQueueFlag.M
3 ページ遷移によるセッション割り当て
UdeskSDKManager.getInstance().entryChat(getApplicationContext(), makeBuilder().build(), sdkToken);
注意:この方法でセッションに入った場合のみ、管理者がバックエンドで設定したオプションが有効になります。他の方法でセッションに入ると、設定は有効になりません。
四、Udesk SDK カスタム設定
1 問い合わせ対象の設定が必要な場合、以下の設定を参照してください
UdeskCommodityItem item = new UdeskCommodityItem();
item.setTitle("木林森男鞋新款2016夏季透气网鞋男士休闲鞋网面韩版懒人蹬潮鞋子");// 商品メインタイトル
item.setSubTitle("¥ 99.00");//商品サブタイトル
item.setThumbHttpUrl("https://img.alicdn.com/imgextra/i1/1728293990/TB2ngm0qFXXXXcOXXXXXXXXXXXX_!!1728293990.jpg_430x430q90.jpg");// 左側画像
item.setCommodityUrl("https://detail.tmall.com/item.htm?spm=a1z10.3746-b.w4946-14396547293.1.4PUcgZ&id=529634221064&sku_properties=-1:-1");// 商品ウェブリンク
UdeskConfig.Builder builder = new UdeskConfig.Builder();
.setCommodity(set_use_commodity.isChecked() ? createCommodity() : null)//商品リンク送信モードを設定
**注意** セッション画面に入る前に呼び出してください
問い合わせ対象情報の送信は、UdeskViewModeで呼び出します
udeskViewMode.sendCommodityMessage(createCommodity());
2 多言語設定
LocalManageUtil.saveSelectLanguage
### 3 カスタム絵文字の設定説明
1. カスタム絵文字は、assetsフォルダ内にudeskemotionディレクトリを作成する必要があります。プログラム起動時に、assetsのudeskemotionディレクトリ内のすべてのスタンプが自動的にスタンプ保存場所にコピーされます。
2. udeskemotionディレクトリ内には、1つのタブアイコンと1つのスタンプフォルダが必要で、両者は同じ名前である必要があります。
詳細はdemoを参照してください。
4 IMチャット機能における位置情報送信の統合説明
Androidでは、サードパーティの選択肢が多いなどの理由から、SDK内に直接地図SDKを組み込まず、お客様の実際のニーズに応じて位置情報送信機能を統合するかどうかを選択していただきます。
地図統合のdemo例として提供しているもの:百度地図(baidumapdemo このmoduleを参照)、高德地図(gaodemapdemo)、腾讯地図(tenxunmapdemo)
1.地図タイプの説明
百度地図の設定
UdeskConfig.useMapType = UdeskConfig.UdeskMapType.BaiDu;
高德地図の設定
UdeskConfig.useMapType = UdeskConfig.UdeskMapType.GaoDe;
腾讯地図の設定
UdeskConfig.useMapType = UdeskConfig.UdeskMapType.Tencent;
その他の地図の設定
UdeskConfig.useMapType = UdeskConfig.UdeskMapType.Other;
UdeskChatActivityはstartActivityForResult方式でLocationActivityに入り、その後、選択した対応情報がUdeskChatActivityに戻されます。これはIntent方式で行われます。
intent.putExtra内のnameについて取り決めがあり、これを遵守することで位置情報が有効に表示されます。
具体的な取り決め:
public static class UdeskMapIntentName {
//選択された位置
public static final String Position = "udesk_position";
//選択された位置周辺のスクリーンショットのローカル保存パス
public static final String BitmapDIR = "udesk_bitmap_dir";
//選択された位置の緯度
public static final String Latitude = "udesk_latitude";
//選択された位置の経度
public static final String Longitude = "udesk_longitude";
}
具体的な例は、demoで提供されているコードスニペットを参照してください。
.setUseMap(set_usemap.isChecked()) //位置送信機能を使用するかどうか trueは使用、falseは不使用
.setUseMapSetting(UdeskConfig.UdeskMapType.GaoDe, LocationActivity.class, new ILocationMessageClickCallBack() {
@Override
public void luanchMap(Context context, double latitude, double longitude, String selctLoactionValue) {
Intent intent = new Intent();
intent.putExtra(UdeskConfig.UdeskMapIntentName.Position, selctLoactionValue);
intent.putExtra(UdeskConfig.UdeskMapIntentName.Latitude, latitude);
intent.putExtra(UdeskConfig.UdeskMapIntentName.Longitude, longitude);
intent.setClass(context, ShowSelectLocationActivity.class);
context.startActivity(intent);
}
})
5 IMでのビデオ機能の使用
**注意**:ビデオ機能を使用するには、必ずUdeskSDKUI IMの機能を使用する必要がありますが、UdeskSDKUIの機能を単独で使用することも可能です。
あなたのアプリで、udeskvideoモジュールに依存関係を追加してください。
6 カスタム機能ボタン設定のサポート 詳細はデモを参照してください
.setExtreFunctions(getExtraFunctions(), new IFunctionItemClickCallBack() {
@Override
public void callBack(Context context, UdeskViewMode udeskViewMode, int id, String name) {
if (id == 22) {
udeskViewMode.sendCommodityMessage(createCommodity());
} else if (id == 23) {
UdeskSDKManager.getInstance().disConnectXmpp();
} else if (id == 24) {
udeskViewMode.sendProductMessage(createProduct());
}else if (id == 25) {
sendCustomerOrder();
}else if (id == 26) {
sendTrace();
}
}
}) // more展開パネルに追加の機能ボタンを設定
**説明**:各機能ボタンはFunctionModeとして設定され、以下の属性を含みます:
// 表示内容
private String name;
// 選択後の対応する操作をマッピングするためのID値。最初の20はUdeskが予約済みです。カスタム追加されたものは、返された後にID値に基づいてマッピング関係を確立するために使用されます。
private int id;
// 例:R.drawable.udesk_001
// 表示されるアイコン
private int mIconSrc ;
インターフェースコールバックから返されたパラメータに基づいて、udeskViewMode内の対応するメソッドを呼び出して処理します。
// メッセージ送信
// テキストメッセージ送信をカプセル化
public void sendTxtMessage(String msgString) {
try {
MessageInfo msg = UdeskUtil.buildSendMessage(
UdeskConst.ChatMsgTypeString.TYPE_TEXT,
System.currentTimeMillis(), msgString);
postMessage(msg, UdeskConst.LiveDataType.AddMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
// 商品メッセージ送信
public void sendProductMessage(Product mProduct) {
if (mProduct == null) {
return;
}
try {
MessageInfo msg = UdeskUtil.buildSendMessage(
UdeskConst.ChatMsgTypeString.TYPE_PRODUCT,
System.currentTimeMillis(), JsonUtils.getProduceJson(mProduct).toString());
postMessage(msg, UdeskConst.LiveDataType.AddMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 位置情報メッセージを送信
*
* @param lat
* @param longitude
* @param localvalue
* @param bitmapDir
*/
public void sendLocationMessage(double lat, double longitude, String localvalue, String bitmapDir) {
try {
StringBuilder builder = new StringBuilder();
builder.append(lat).append(";").append(longitude).append(";").append("16;").append(localvalue);
MessageInfo msg = UdeskUtil.buildSendMessage(
UdeskConst.ChatMsgTypeString.TYPE_Location,
System.currentTimeMillis(), builder.toString(), bitmapDir, "", "");
postMessage(msg, UdeskConst.LiveDataType.AddMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
// ファイル類のメッセージ送信(ビデオ、ファイル、画像を含む)
/**
* @param filepath
* @param msgType 画像:UdeskConst.ChatMsgTypeString.TYPE_IMAGE
* ファイル:UdeskConst.ChatMsgTypeString.TYPE_File
* MP4ビデオ: UdeskConst.ChatMsgTypeString.TYPE_SHORT_VIDEO
*/
public synchronized void sendFileMessage(String filepath, String msgType) {
try {
if (TextUtils.isEmpty(filepath)) {
return;
}
String fileName = (UdeskUtils.getFileName(filepath, msgType));
String fileSzie = UdeskUtils.getFileSizeByLoaclPath(filepath);
MessageInfo msgInfo = UdeskUtil.buildSendMessage(msgType,
System.currentTimeMillis(), "", filepath, fileName, fileSzie);
postMessage(msgInfo, UdeskConst.LiveDataType.AddFileMessage);
} catch (Exception e) {
e.printStackTrace();
} catch (OutOfMemoryError error) {
error.printStackTrace();
}
}
// 録音メッセージ送信
public void sendRecordAudioMsg(String audiopath, long duration) {
try {
String fileName = (UdeskUtils.getFileName(audiopath, UdeskConst.FileAduio));
MessageInfo msgInfo = UdeskUtil.buildSendMessage(
UdeskConst.ChatMsgTypeString.TYPE_AUDIO,
System.currentTimeMillis(), "", audiopath, fileName, "");
duration = duration / 1000 + 1;
msgInfo.setDuration(duration);
postMessage(msgInfo, UdeskConst.LiveDataType.AddFileMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
// オリジナル画像メッセージ送信
public void sendBitmapMessage(Bitmap bitmap, Context context) {
try {
if (bitmap == null) {
return;
}
File scaleImageFile = UdeskUtil.getScaleFile(bitmap, context);
if (scaleImageFile != null) {
MessageInfo msgInfo = UdeskUtil.buildSendMessage(
UdeskConst.ChatMsgTypeString.TYPE_IMAGE,
System.currentTimeMillis(), "", scaleImageFile.getPath(), "", "");
postMessage(msgInfo, UdeskConst.LiveDataType.AddFileMessage);
}
}catch (Exception e){
e.printStackTrace();
}
}
7 カスタムナビゲーションバー設定のサポート 詳細はデモを参照してください
.setNavigations(set_use_navigation_view.isChecked(), getNavigations(), new INavigationItemClickCallBack() {
@Override
public void callBack(Context context, UdeskViewMode udeskViewMode, NavigationMode navigationMode, String currentView) {
if (navigationMode.getId() == 1) {
udeskViewMode.sendProductMessage(createProduct());
} else if (navigationMode.getId() == 2) {
udeskViewMode.sendTxtMessage("www.baidu.com");
}
}
}) // ナビゲーションUIを使用するかどうかを設定 true:使用する false:使用しない
.setRobotNavigations(set_use_navigation_view_robot.isChecked(), getRobotNavigations(), new INavigationItemClickCallBack() {
@Override
public void callBack(Context context, UdeskViewMode udeskViewMode, NavigationMode navigationMode, String currentView) {
if (TextUtils.equals(currentView, UdeskConst.CurrentFragment.robot)) {
if (navigationMode.getId() == 1) {
udeskViewMode.sendTxtMessage("ロボットナビゲーション");
} else if (navigationMode.getId() == 2) {
udeskViewMode.getRobotApiData().onShowProductClick(createReplyProduct());
}
}
}
}) // ロボットナビゲーションUIを使用するかどうかを設定 true:使用する false:使用しない
説明:ナビゲーションバーの各機能ボタンは1つのNavigationModeとして設定され、以下の属性を含みます。
// テキストの表示内容
private String name;
// 選択後の対応する操作をマッピングするために使用
private int id;
サポートされるカスタム機能は機能ボタンと同じです。
注意 ロボットチャットのカスタムナビゲーションは、テキストと商品返信タイプのみをサポートしており、他のタイプはサポートしていません。
8 商品返信メッセージの送信
private ProductListBean createReplyProduct(){
ProductListBean productListBean=new ProductListBean();
productListBean.setId(1);
productListBean.setUrl("https://item.jd.com/7633415.html");
productListBean.setImage("https://udeskzgh.oss-cn-beijing.aliyuncs.com/demo/sumsung.jpg");
productListBean.setName("【SSDセット版】Samsung Galaxy S 軽量版(SM-G8750)4GB +64GB");
List<InfoListBean> infoList = new ArrayList<>();
InfoListBean bean0= new InfoListBean();
bean0.setInfo("新商品");
bean0.setColor("#00ff00");
bean0.setBoldFlag(0);
InfoListBean bean1= new InfoListBean();
bean1.setInfo("分割払い金利無料");
bean1.setColor("#ff0000");
bean1.setBoldFlag(0);
infoList.add(bean0);
infoList.add(bean1);
productListBean.setInfoList(infoList);
return productListBean;
}
udeskViewMode.getRobotApiData().onShowProductClick(createReplyProduct());
9 商品メッセージの送信 (詳細はdemoを参照)
Productフィールド属性説明
| key | 必須かどうか | 説明 |
|---|---|---|
| name | 必須 | 商品名 |
| url | 任意 | 商品ジャンプリンク(新規ページ表示)。値が空の場合はクリック不可 |
| imgUrl | 任意 | 商品表示画像のURL |
| params | 任意 | パラメータリスト |
| customParameters | 任意 | パラメータリスト(カスタム追加コンテンツ) |
| ParamsBean.text | 任意 | パラメータテキスト |
| ParamsBean.color | 任意 | パラメータの色値(16進数カラーコード) |
| ParamsBean.fold | 任意 | 太字にするかどうか |
| ParamsBean.breakX | 任意 | 改行するかどうか |
| ParamsBean.size | 任意 | フォントサイズ |
使用シナリオ: 1. 毎回セッションに入る際に、UdeskConfig設定を通じて商品メッセージを1件設定できます。 2. ナビゲーションバーのカスタム機能ボタンを通じて商品メッセージを送信できます。
10 カスタムロボット満足度評価内容(人工カスタマーサポートの満足度調査内容はバックエンドで設定)
case UdeskConst.LiveDataType.RobotSessionHasSurvey:
if ((boolean) mergeMode.getData()) {
UdeskUtils.showToast(getApplicationContext(), getResources()
.getString(R.string.udesk_has_survey));
} else {
SurveyOptionsModel surveyOptionsModel1 = UdeskUtil.buildSurveyOptionsModel(getApplicationContext());
toLaunchSurveyView(surveyOptionsModel1);
}
break;
public static SurveyOptionsModel buildSurveyOptionsModel(Context context){
SurveyOptionsModel model=new SurveyOptionsModel();
model.setEnabled(true);
model.setName(context.getResources().getString(R.string.udesk_satisfy_evaluation));
model.setTitle(context.getResources().getString(R.string.udesk_satisfy_evaluation_title));
model.setRemark_enabled(true);
model.setRemark(context.getResources().getString(R.string.udesk_satisfy_evaluation_remark));
model.setType("text");
model.setDefault_option_id(0);
model.setRobot(true);
List<OptionsModel> options=new ArrayList<>();
int id=0;
options.add(new OptionsModel(++id,true,context.getResources().getString(R.string.udesk_statify),context.getResources().getString(R.string.udesk_statify),UdeskConst.REMARK_OPTION_HIDE));
options.add(new OptionsModel(++id,true,context.getResources().getString(R.string.udesk_common),context.getResources().getString(R.string.udesk_common),UdeskConst.REMARK_OPTION_OPTIONAL));
options.add(new OptionsModel(++id,true,context.getResources().getString(R.string.udesk_unstatify),context.getResources().getString(R.string.udesk_unstatify),UdeskConst.REMARK_OPTION_REQUIRED));
model.setOptions(options);
return model;
}
11 ユーザーアバターの表示設定
UdeskConfig.Builder builder = new UdeskConfig.Builder();
builder.isShowCustomerHead(true|false);
12 ユーザーニックネームの表示設定
UdeskConfig.Builder builder = new UdeskConfig.Builder();
builder.isShowCustomerNickname(true|false);
五、Udesk API説明
1.未読メッセージの取得
会話画面を終了した後、Udeskサーバーとの接続を切断せず、未読メッセージイベント取得メソッドを登録すると、そのメソッド内で未読メッセージを受信できます。
/**
* 未読メッセージ通知イベントの登録と処理
*/
UdeskSDKManager.getInstance().setNewMessage(new IUdeskNewMessage() {
@Override
public void onNewMessage(MsgNotice msgNotice) {
if (msgNotice != null) {
Log.i("xxx","UdeskCaseActivity でmsgNoticeを受信しました");
NotificationUtils.getInstance().notifyMsg(getApplicationContext(), msgNotice.getContent());
}
}
});
未読メッセージの受信
if (UdeskBaseInfo.isNeedMsgNotice && UdeskSDKManager.getInstance().getNewMessage() != null) {
MsgNotice msgNotice = new MsgNotice(msgId, type, content);
UdeskSDKManager.getInstance().getNewMessage().onNewMessage(msgNotice);
}
未読メッセージの取得
//未読メッセージを取得
List<MessageInfo> unReadMsgs = UdeskSDKManager.getInstance().getUnReadMessages(getApplicationContext(), PreferenceHelper.readString(getApplicationContext(), "init_base_name", "sdktoken"));
2 未読メッセージ数の取得
会話画面を終了した後、Udeskサーバーとの接続を切断せず、このセッションの未読メッセージ数を取得できます。会話画面を開くと未読メッセージ数はクリアされます。
UdeskSDKManager.getInstance().getCurrentConnectUnReadMsgCount();
3 コンソールログの切り替え
開発中に、コンソールで現在の顧客とUdeskサーバー間の接続(xmpp)のやり取りパケットを確認したい場合は、以下のインターフェースを呼び出して実現できます。
//true はコンソールログを有効化、false はコンソールログを無効化
UdeskSDKManager.getInstance().isShowLog(true);
4 Udeskサーバーとの接続を切断
アプリ実行中にカスタマーサポートをオフラインにする必要がある場合、またはカスタマーサポートからのメッセージを受信しない場合、このインターフェースを呼び出してUdeskサーバーとの接続を能動的に切断できます。
UdeskSDKManager.getInstance().disConnectXmpp();
5 キュー退出モードの設定
quitmode: mark (デフォルト、放棄をマーク)/ force_quit(強制的に即時放棄)
build.setUdeskQuenuMode(quitmode);
6 商品注文を送信
**OrderBeanフィールド属性説明**
| key | 必須かどうか | 説明 |
|---|---|---|
| name | 必須 | 注文名 |
| url | オプション | 注文ジャンプリンク |
| order_no | 必須 | 注文番号 |
| price | 必須 | 注文価格 |
| order_at | 必須 | 注文時間 |
| pay_at | オプション | 支払い時間 |
| status | 必須 | 注文ステータス(支払い待ち: 'wait_pay'、支払い済み: 'paid'、クローズ済み: 'closed') |
| remark | オプション | 備考 |
/**
* 商品注文を送信
*/
private void sendCustomerOrder() {
//注文情報を送信
OrderBean orderBean =new OrderBean();
orderBean.setName("Apple iPhone X (A1903) 64GB");
orderBean.setOrder_at(UdeskUtil.getCurrentDate());
orderBean.setUrl("www.baidu.com");
orderBean.setPrice(1200.33);
orderBean.setOrder_no("123");
orderBean.setPay_at(UdeskUtil.getCurrentDate());
orderBean.setStatus(UdeskConst.OrderStatus.paid);
orderBean.setRemark("私はテストです");
String sdkToken = getSDKToken();
UdeskSDKManager.getInstance().sendCustomerOrder(UdeskSDKManager.getInstance().getDomain(this),UdeskSDKManager.getInstance().getAppkey(this),
sdkToken,UdeskSDKManager.getInstance().getAppId(this),JsonUtils.getOrderJson(orderBean));
}
7 商品トラッキングの送信
**TraceBeanフィールド属性の説明**
| key | 必須かどうか | 説明 |
|---|---|---|
| type | 必須 | トラッキングタイプ |
| data.name | 必須 | 商品名 |
| data.url | オプション | 商品ジャンプリンク |
| data.imgUrl | オプション | 画像URL |
| data.date | オプション | アクセス時間 |
| data.params | オプション | パラメータリスト |
| data.params.text | オプション | パラメータテキスト |
| data.params.color | オプション | パラメータカラー値 |
| data.params.fold | オプション | 太字かどうか |
| data.params.breakX | オプション | 改行するかどうか |
| data.params.size | オプション | フォントサイズ |
/**
* 商品トラッキングを送信する
*/
private void sendTrace() {
//商品トラッキングを送信
TraceBean traceBean =new TraceBean();
traceBean.setType("product");
TraceBean.DataBean dataBean =new TraceBean.DataBean();
dataBean.setName("traceBean");
dataBean.setUrl("http://item.jd.com/6748052.html");
dataBean.setDate(UdeskUtil.getCurrentDate());
dataBean.setImgUrl("http://img12.360buyimg.com/n1/s450x450_jfs/t10675/253/1344769770/66891/92d54ca4/59df2e7fN86c99a27.jpg");
List<TraceBean.DataBean.ParamsBean> paramsBeanList =new ArrayList<>();
TraceBean.DataBean.ParamsBean paramsBean1 = new TraceBean.DataBean.ParamsBean();
paramsBean1.setBreakX(false);
paramsBean1.setColor("#ff0000");
paramsBean1.setFold(false);
paramsBean1.setSize("14");
paramsBean1.setText("999999999.00");
paramsBeanList.add(paramsBean1);
dataBean.setParams(paramsBeanList);
traceBean.setData(dataBean);
String sdkToken = getSDKToken();
UdeskSDKManager.getInstance().sendBehaviorTraces(UdeskSDKManager.getInstance().getDomain(this),UdeskSDKManager.getInstance().getAppkey(this),
sdkToken,UdeskSDKManager.getInstance().getAppId(this),JsonUtils.getTraceJson(traceBean));
}
8 リソース UI
チャット画面 UdeskChatActivity
ロボット UdeskRobotFragment
オペレーター UdeskAgentFragment
メッセージアダプター MessageAdatper
左側レイアウト udesk_item_left.xml 内部に複数のメッセージタイプのレイアウトを含む
左側viewHolder LeftViewHolder 左側メッセージを処理
右側レイアウト udesk_item_right.xml 内部に複数のデータタイプのレイアウトを含む
右側viewHolder RightViewHolder 右側メッセージを処理
xmppメッセージ処理 UdeskXmppManager
データ処理
UdeskViewMode
APILiveData オペレーターAPI処理
DBLiveData データベース処理
FileLiveData ファイルアップロード・ダウンロード処理
ReceiveLiveData 受信メッセージ処理
RobotApiData ロボットAPI処理
SendMessageLiveData 送信メッセージ処理
MergeMode livedataで処理されるメッセージ
questionMergeMode MergeModeのサブクラス拡張 質問クリック処理
MergeModeManager mergedata管理クラス
9 キャッシュされたagentIdのクリア
UdeskSDKManager.getInstance().cleanCacheAgentId(getApplicationContext());
10 キャッシュされたgroupIdのクリア
UdeskSDKManager.getInstance().cleanCacheGroupId(getApplicationContext());
11 キャッシュされたmenuIdのクリア
UdeskSDKManager.getInstance().cleanCacheMenuId(getApplicationContext());
12 ヘルプセンター画面の起動
Udeskシステムのヘルプセンターでは、バックエンドでヘルプドキュメントを作成でき、顧客はヘルプセンターを通じて関連ドキュメントを閲覧できます。以下のインターフェースを呼び出してヘルプセンター画面を起動します。
UdeskSDKManager.getInstance().toLaunchHelperAcitivty(getApplicationContext(), UdeskSDKManager.getInstance().getUdeskConfig());
六、メッセージプッシュ
現在、1つのプッシュ方式のみサポートしています。すなわち、Udeskサーバーが開発者のサーバーにメッセージを送信し、開発者がAppにメッセージをプッシュします。
1 プッシュ受信サーバーアドレスの設定
プッシュメッセージは開発者のサーバーに送信されます。
サーバーアドレスを設定するには、Udesk管理者アカウントでUdeskにログインし、設定 -> モバイルSDK で設定してください。
2 Udeskプッシュ機能の使用設定
設定 プッシュサービスを使用するかどうか true は使用する falseは使用しない
public static boolean isUserSDkPush = false;
3 ユーザーのデバイス一意識別子の設定
UdeskSDKManager.getInstance().setRegisterId(context,"xxxxregisterId")
//プッシュ登録のデバイスIDを保存
public void setRegisterId(Context context, String registerId) {
UdeskConfig.registerId = registerId;
PreferenceHelper.write(context, UdeskConst.SharePreParams.RegisterIdName,
UdeskConst.SharePreParams.Udesk_Push_RegisterId, registerId);
}
Udeskプッシュサービスの停止と開始について、Udeskが開発者サーバーにプッシュするメッセージデータ形式には、device_tokenフィールドが含まれます。
4 Udeskプッシュサービスの有効化/無効化
/**
* @param domain 会社登録時に生成されたドメイン
* @param key アプリ作成時に生成されたアプリキー
* @param sdkToken ユーザー一意識別子
* @param status SDKプッシュ状態 ["on" | "off"] onはUdeskプッシュサービス有効化、offはUdeskプッシュサービス無効化を表します
* @param registrationID プッシュデバイス登録ID
* @param appid アプリ作成時に生成されたアプリID
*/
public void setSdkPushStatus(String domain, String key, String sdkToken, String status, String registrationID, String appid, UdeskCallBack callBack) {
try {
UdeskHttpFacade.getInstance().sdkPushStatus(domain, key, sdkToken, status, registrationID, appid, callBack);
} catch (Exception e) {
e.printStackTrace();
}
}
5 Udeskから開発者サーバーへのプッシュインターフェース説明
基本要件
- リクエストはPOSTメソッドで送信します
- リクエスト時のcontent-typeはapplication/x-www-form-urlencodedを使用します
パラメータ
メッセージまたはイベントが発生した場合、以下のデータがプッシュインターフェースに送信されます
| パラメータ名 | タイプ | 説明 |
|---|---|---|
| message_id | string | メッセージID |
| platform | string | プラットフォーム、'ios' または 'android' |
| device_token | string | デバイス識別子 |
| app_id | string | SDKアプリID |
| content | string | メッセージ内容、typeが'message'の場合のみ有効 |
| sent_at | datetime | メッセージプッシュ時間、iso8601形式 |
| from_id | integer | 送信者ID(カスタマーサポート) |
| from_name | string | 送信者名 |
| to_id | integer | 受信者ID(顧客) |
| to_token | string | 受信者sdk_token(一意識別子) |
| type | string | メッセージタイプ、'event'はイベント、'message'はメッセージ |
| event | string | イベントタイプ、'redirect'はカスタマーサポート転送、'close'は会話終了、'survey'は満足度調査送信 |
七、よくある質問
1. 特定のカスタマーサポートグループまたはカスタマーサポートの割り当てで、指定したカスタマーサポートグループのカスタマーサポートと一致しない場合がありますか?
まず、カスタマーサポートが会話を終了していないことを確認してください。
当製品のロジック: 顧客AがカスタマーサポートグループBのカスタマーサポートB1を選択して会話したとします。その後、顧客Aが会話画面を終了し、別の画面に移動し、その後カスタマーサポートグループCのカスタマーサポートC1を通じて会話が割り当てられた場合: この時、バックエンドは、B1との会話がまだ存在するかどうかを判断し、存在する場合はC1ではなく直接B1に割り当てます。 B1の会話が終了して初めて、C1に割り当てられます。
-
異なる顧客に割り当てられた会話が1つの会話内に表示される場合がありますか?
この状況は、カスタマーサポートが渡したsdktokenの値が同じ場合に発生します。 sdktokenは身分証明書のように、ユーザーの一意識別子です。顧客が接続時に渡すsdktokenの値を確認してください。 emailまたはcellphoneを設定している場合、同じ値があると1人のカスタマーサポートの会話内に表示されることもあります。
-
特定の携帯電話でロボットページが開かない場合がありますか?
この問題の可能性の1つ: 携帯電話の時間設定と現在時刻が一致していないことが原因です。時間の誤差が1時間を超えると、ロボットインターフェースに接続できない問題が必ず発生します。
5.xではネイティブロボットチャットを採用しているため、この問題は発生しません。 4. SDKを統合後、クラスが見つからないエラーが発生しますか?
マルチデックス戦略を追加したか確認してください:
AndroidのGradleプラグインはAndroid Build Tool 21.1からmultidexの使用をサポートしているため、Android Build Tools 21.1以降のバージョンを使用する必要があります。appディレクトリ下のbuild.gradleファイルを修正し、2点修正が必要です。
(1)defaultConfigにmultiDexEnabled trueという設定を追加します。
(2)dependenciesにmultidexの依存関係を追加します: compile ‘com.android.support:multidex:1.0.0’
(3)Applicationを継承し、attachBaseContextメソッドをオーバーライドし、AndroidManifest.xmlのapplicationタグで登録します。
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
5.H5接続参考例
https://github.com/udesk/udesk_android_sdk_h5
-
一部のメッセージが完全に表示されない
5.1.0でデータベースがアップグレードされ、いくつかの新しいフィールドが追加されましたが、以前のバージョンのデータベースにはありません。カバーインストール時にローカルデータベースの履歴メッセージを読み取ると、メッセージの一部のフィールドが読み取られず、完全に表示されないことがあります。 アンインストールして再インストールすれば解決します。
八、更新履歴
更新履歴
5.2.6(5.x)、5.2.7(5.x_android_Q ブランチ)バージョン更新:
- 推奨ガイド文を追加
- 人工対応への転送失敗をサポート
- インテリジェントヒントの高さを最適化
- メッセージクリックコールバックを追加
5.2.4(5.x)、5.2.5(5.x_android_Q ブランチ)バージョン更新:
- 回答リンクFAQをサポート
- チャット履歴での評価をサポート
- ファイルアップロードの問題を最適化
5.2.2(5.x)、5.2.3(5.x_android_Q ブランチ)バージョン更新:
- 入力フィールドの問題を修正
5.2.0(5.x)、5.2.1(5.x_android_Q ブランチ)バージョン更新:
- メッセージなしダイアログから待機行列入力フィールドへの問題を修正
- 新規セッションがロボットを経由せず、メッセージなしダイアログフィルタリングの問題を修正
- リッチテキストのフォントカラー表示問題を修正
- ダイアログメッセージ保留状態の切り替え問題を修正
- リッチテキスト画像圧縮問題を修正
5.1.7(5.x)、5.1.8(5.x_android_Q ブランチ)バージョン更新:
- 画像OOM問題を修正
- ビデオ通話問題を修正
- ファイル読み取り問題を修正
- ブラックリスト無効化問題を修正
- ロボット推奨問題を修正
- WebView表示問題を修正
- 待機行列入力フィールド問題を修正
- HTML解析問題を修正
5.1.5(5.x,5.x_androidX)、5.1.6(5.x_android_Q ブランチ)バージョン更新:
- ロボット自動メッセージを追加
- フロー問題を修正
- WebViewマーケット公開問題を修正
5.1.4 バージョン更新(5.x_android_Q ブランチ):
- Android Qに適応
- 満足度受信問題を修正
- ビデオ通話問題を修正
- 下部表示問題を修正
5.1.3 バージョン更新:
- ダイアログメッセージ保留にパラメータを追加
- 「もっと見る」と絵文字の表示/非表示問題を修正
- ファイルアップロードキャンセル問題を修正
- ウェルカムメッセージ非表示問題を修正
- HTMLタグ解析を修正
- ビデオ通話問題を修正
- GIFクエリ問題を修正
5.1.2 バージョン更新:
- 商品リンク送信によるメッセージ保留問題を修正
5.1.1 バージョン更新:
- emojiフォルダ名を修正
- WebViewコンテキストを修正
- メッセージ保留問題を修正
- 満足度評価問題を修正
- キーボード高さ問題を修正
- アルバム問題を修正
- 撮影問題を修正
- 七牛ダウンロード問題を修正
5.1.0 バージョン更新:
- ダイアログメッセージ保留をサポート
- テンプレートメッセージをサポート
- 商品注文と商品軌跡の送信をサポート
- カスタマーサポート側での商品メッセージタイプ追加をサポート
- データ保存ロジックとデータベースを修正
- ロボットウェルカムメッセージロジックを修正
- アップロードポリシー問題を修正
- WebViewでhttp/https以外で始まるリンクに適応
- 人工ナビゲーションクリック問題を修正
- メッセージなしダイアログフィルタリング状態でのメッセージ送信問題を修正
- 商品メッセージの背景、フォントカラー、行数設定APIを追加・修正
- 4.xバージョンから5.xへの上書きインストール時のカスタマーサポートリクエスト問題を修正
- ファイルアップロード進捗表示ポリシーを修正
5.0.0バージョン更新:
- ネイティブロボットをサポート
- サードパーティセッションをサポート
- UIインタラクションを改訂
- AACフレームワークを採用
- 音声認識機能を追加
4.1.1 修正内容
- SDK待機行列中にメッセージ保留をクリックしても待機行列中のままになる問題を修正;
- 待機行列中にテキストメッセージを送信後、「もっと」ボタンが非表示になる問題を修正;
- 商品メッセージ送信時にカスタマーサポート側に表示されない問題を修正;
- メッセージの送信到達を最適化;(セッション画面を離れ、受領確認未受信メッセージがある場合、シングルトンに格納して送信)
4.1.0+
- 待機行列中にメッセージ送信をサポート
- 絵文字を置き換え
- ロボット管理者設定名をサポート
- カスタムチャネルをサポート
- グローバル顧客一意性customer_tokenの設定をサポート
- オフラインメッセージに実際の送信時間を表示するようサポート
- 録音ファイル形式をwavに変更し、カスタマーサポート音声テキスト変換の精度を向上
- メッセージなしダイアログフィルタリングメッセージの保存を最適化
4.0.5+
- メッセージ送信の最適化;
- ボットキーのサポート;
- ボットSDKの自動人間接続イベント
4.0.4+
- メッセージID生成の最適化
4.0.3+
- RTL(右から左)表示の最適化
4.0.1+
- 商品メッセージのサポート
4.0.0+
-
SDKの画像アップロードコンポーネントの最適化;
-
SDKでのショートビデオのサポート;
-
カスタムスタンプのサポート;
-
メッセージなし会話のフィルタリングサポート;
-
入力エリアの最適化;
-
満足度調査の最適化;
-
SDKのメッセージ案内テキスト表示の最適化;
-
SDKの横画面互換性の最適化;
-
SDKがボットから人間接続ボタンをX件のメッセージ後に表示することをサポート;
-
SDKがボットにmodelKey値を渡すことをサポート;
-
IM画像表示でのタップ戻り機能のサポート;
-
SDKの多言語サポートの最適化;
-
SDK内の各種設定のリファクタリング;
-
ボットへの顧客情報の受け渡し;
-
8.0 方向設定と透明属性設定の適応;
-
SDK(Android)の一部問題の最適化;
-
SDKがメッセージ人間接続ボタンをサポート;
-
SDKでの画像送信に画像拡張子を追加;
3.9+
- メッセージ到達率の最適化
- ビデオチャットのサポート
3.8.0+
- 地理位置情報送信のサポート
3.7.1+
- ウェルカムメッセージ表示の最適化
3.7.0+
- オフラインでの直接メッセージ送信をサポート;
- SDKが満足度調査の返却とオン/オフ設定をサポート;
- SDKがGIFの受信と送信をサポート;
- SDKがビデオの受信と送信をサポート;
- SDKがカスタマーサポートメッセージの取り消しをサポート
3.6.0+
- SDKに構造化メッセージ表示を追加
- ブラックリスト通知メッセージを追加
3.5.0 +
- SDK初期化メソッドを
initApiKey(Context context, String domain, String appkey, String appid)に変更 - セッション開始方法を変更し、
entryChat(Context context)を統一して呼び出し、内部で管理者のバックエンド設定に基づく対応する業務フロー遷移を処理 - 以前提供されていた一部のセッション開始方法インターフェースを削除し、
entryChat(Context context)を統一して使用
3.4.0 +
- プッシュ通知のサポート、
- マルチアプリケーションのサポート
3.3.2+
-
HTTPプロトコルをHTTPSに変更
-
SDK側での顧客による満足度調査の自主的放棄を追加
3.3.1+
- Android 7.0への適応
3.3+
- 英語と中国語への適応、
- UI設定の追加、
- セッション接続ロジックの修正、
- アバター設定の追加、
- インターフェースUIの修正
3.2.1+
- ブラックリスト設定のサポート;
- カスタマーサポートのオンライン状態の最適化;
- オフラインの顧客がモバイル端末でオンラインと表示される問題を修正;
- カスタマーサポートのアバターをサポート、各メッセージ送信者のカスタマーサポートニックネーム表示をサポート;
- ユーザー情報更新のサポート;
3.2.0 +
- 商品リンク送信の追加、
- メッセージ通知の追加
- 未読メッセージインターフェースの追加
- Android 6.0 実行権限の追加
3.1+
- ウェルカムメッセージでのリンク設定のサポート
- バックエンドでのカスタムリンク設定のサポート
- 指定されたカスタマーサポートIDによる割り当てのサポート
- 指定されたカスタマーサポートグループIDによる割り当てのサポート
3.0+
- カスタマーサポート転送と評価依頼機能の新規追加
九、一部機能スクリーンショット
1.ネイティブボット

バックエンド設定

2.入力連想

3.音声認識

4.第三者セッション

5.商品リンク カスタムナビゲーション及びサービス評価 カスタム絵文字

6.カスタムボタン

7.オペレーター転送ナビゲーション設定

管理画面設定

8.フォームメッセージ

9.ダイレクトメッセージ

管理画面設定

10.満足度評価

11.メッセージなし会話フィルタリング

管理画面設定

12.メッセージタイプ表示
商品メッセージ 地図 ファイル ショートビデオタイプ

リッチテキスト 画像付きテキスト及び推薦メッセージ

プレーンテキスト フローメッセージ

商品選択 商品返信

質問付き推薦 カテゴリ付き推薦

画像 リンク 音声メッセージ オペレーター転送通知 回答評価

転送 構造化メッセージ

オペレーター転送 メッセージイベント

ビデオライブストリーミング
