iOS IM SDK 5.x バージョン(masterブランチ)
お知らせ
SDKを組み込んでコンパイルエラーが発生した場合は、Xcodeを最新バージョンにアップグレードしてください
「master」ブランチに対応するSDKバージョンは5.0+です
「4.x_back」ブランチに対応するSDKバージョンは4.3.4です
問題が発生した場合は、まず最新バージョンのSDKにアップグレードするか、デモをダウンロードして検証することをお勧めします
SDKダウンロードアドレス
https://github.com/udesk/UdeskSDK-iOS
master コードは Xcode13、iPhone12 iOS16 でコンパイルされています。
目次
一、SDKの統合
ファイル紹介
| Demo内のファイル | 説明 |
|---|---|
| UdeskSDK | Udeskオンライン相談SDK |
| UdeskCall | UdeskビデオセッションSDK(オンライン相談SDKに依存) |
注意:UdeskSDKはUdeskCallに依存していません。この機能が必要ない場合は、このSDKをインポートしないでください。
互換性
| カテゴリ | 互換範囲 |
|---|---|
| システム | iOS 8.0以上をサポート |
| アーキテクチャ | armv7、arm64、i386、x86_64 |
| 開発環境 | 最新バージョンのXcodeを使用することを推奨 |
| Cocoapods | 1.5.3バージョン |
SDKサイズ説明
- Bitcodeを有効にするとバイナリファイルのサイズが増加しますが、この部分はAppStoreで公開する際にさらにコンパイル最適化が行われ、最終ファイルのサイズ変化には影響しません。したがって、ここで計算しているのはBitcodeをオフにした場合のバイナリ増分です。
- .aファイルは複数のアーキテクチャをマージしたものであり、lipoを使用すると詳細を確認できます。そのため、.aライブラリファイル自体は大きく、パッケージ化されたipaも比較的大きくなります。しかし、ユーザーが実際にダウンロードする際には、AppStoreによって最適化され、ユーザーのデバイスに必要なアーキテクチャのみがダウンロードされるため、実際に携帯電話で占有されるスペースは非常に小さくなります。
Architectures in the fat file: libUdesk.a are: armv7 i386 x86_64 arm64 - DemoApp は iPhoneX 12.1 で実際に占有するサイズが10M未満です
プロジェクトへのUdeskSDKのインポート
1.1 手動インポート
Udesk SDK の実装は、いくつかのシステムフレームワークに依存しています。アプリケーションを開発する際には、これらのフレームワークをプロジェクトに追加する必要があります。まず、プロジェクトの右側にあるプロジェクト名をクリックし、次にプロジェクト名の右側で TARGETS -> BuiLd Phases -> Link Binary With Libraries の順に選択し、LinkBinary With Libraries を展開した後、展開された下の + をクリックして以下の依存関係を追加します:
libz.tbd
libxml2.tbd
libresolv.tbd
libsqlite3.tbd
WebKit.framework
MapKit.framework
AssetsLibrary.framework
ImageIO.framework
Accelerate.framework
MediaPlayer.framework
Photos.framework
CoreText.framework
ダウンロードしたフォルダ内のUdeskSDKフォルダをプロジェクトにドラッグし、以下の設定を行います
- プロジェクトのtargets->Build Settings をクリックします
- Other Linker Flags を検索し、-lxml2 -ObjC を追加します
- header search paths を検索し、/usr/include/libxml2 を追加します
1.2 CocoaPods によるインポート
Podfile に以下を追加します:
pod 'UdeskSDK'
以下のコマンドを実行します:
# ローカルのCocoapodsリポジトリを更新
$ pod repo update
# Podfile内のサードパーティライブラリを更新
$ pod update
コントローラでインポートします:
//Objective-C
#import "Udesk.h"
//swift
import UdeskSDK
権限の問題
SDKはiOSのフォトライブラリ、カメラ、マイク、位置情報、画像保存機能を使用します。info.plistに対応する権限を追加してください。
追加しないとクラッシュします!!!
その他の問題
SDKはほとんどのゲームプロジェクトをサポートしていません(コンパイル時に直接エラーが発生します)。ゲームプロジェクトでは当社のWebプラグインの使用を推奨します。ドキュメントはこちら。
UdeskCallをプロジェクトにインポート
ダウンロードしたフォルダ内のUdeskCallフォルダをプロジェクトにドラッグし、以下の設定を行います。
-
pod 'AgoraRtcEngine_iOS', '~> 2.0.2'
-
システムフレームワークをインポート
libicucore.tbd
CFNetwork.framework
Security.framework
注意:UdeskCallはiOS8.0以上をサポートし、bitcodeはサポートしていません。info.plistでバックグラウンド実行モードを設定してください。
二、クイックスタート
Udeskはオープンソースのチャットインターフェースを提供しており、開発者が迅速に対話ウィンドウとヘルプセンターを作成できるように支援します。また、カスタマイズ要件を実現するためのカスタムインターフェースも提供しています。
2.1 会社情報と顧客情報の初期化
// 会社の初期化(appKey、appID、domainはすべて必須フィールドです)
UdeskOrganization *organization = [[UdeskOrganization alloc] initWithDomain:"domain" appKey:"appKey" appId:"appId"];
UdeskCustomer *customer = [UdeskCustomer new];
customer.sdkToken = @"sdkToken";
customer.nickName = @"テスト名前";
customer.email = @"test@udesk.cn";
customer.cellphone = @"18888888888";
customer.customerDescription = @"私はテストです";
customer.robotModelKey = @"TestKey";
customer.qq = @"573979861";
customer.channel = @"Test";
// 顧客カスタムフィールドの例(必須ではありません)
UdeskCustomerCustomField *textField = [UdeskCustomerCustomField new];
textField.fieldKey = @"TextField_390";
textField.fieldValue = @"テスト";
UdeskCustomerCustomField *selectField = [UdeskCustomerCustomField new];
selectField.fieldKey = @"SelectField_455";
selectField.fieldValue = @[@0];
customer.customField = @[textField,selectField];
// SDKの初期化
[UdeskManager initWithOrganization:organization customer:customer];
| パラメータ名 | 説明 |
|---|---|
| domain | 貴社がUdeskに登録した際にUdeskから割り当てられたドメイン |
| appKey、appId | Udeskから割り当てられたAPP keyとID |
| sdkToken | ユーザーの一意の識別子で、身元を識別するために使用されます。これはあなた方が生成して当社に渡すものです。渡す文字は、アルファベット/数字などの一般的な文字セットを使用してください。 身分証のように、1つの身分証番号が複数の人に対応したり、1人が複数の身分証番号を持つことは許可されません。また、顧客にメールアドレスと携帯電話番号を設定する場合、異なる顧客が同じ携帯電話番号やメールアドレスに対応しないようにする必要があります。同じものが出現した場合、新しい顧客は作成されません。 |
| customerToken | オプションの主キー: 一意の顧客外部識別子。一意識別子の衝突を処理するために使用されます(値を任意に渡さないでください)。 |
| nickName | ユーザーのニックネーム |
| ユーザーのメールアドレス。メールアドレスの規則に厳密に従ってください。ない場合は記入しないでください!空にしないでください!固定値にしないでください!適当に記入しないでください! | |
| cellphone | ユーザーの電話番号。電話番号の規則に厳密に従ってください。ない場合は記入しないでください!空にしないでください!固定値にしないでください!適当に記入しないでください! |
| customerDescription | ユーザーの説明 |
| robotModelKey | ロボットのFAQテンプレートID |
| ユーザーのQQ番号 | |
| channel | カスタムチャネル |
| customField | ユーザーカスタムフィールド |
- 上記のフィールドのうち、domain、appkey、appId、sdkTokenは必須パラメータです。その他のパラメータは自身のニーズに応じて選択してください。
- domainの形式は xxx.udesk.cn で、https:// は追加しないでください。
- appKeyとappIdは、管理画面 -> 管理センター -> チャネル管理 -> モバイル SDK で、新しいAppを追加することで取得できます。
- robotModelKeyは、管理画面 -> ナレッジベース -> Udesk KM -> よくある質問 でテンプレートIDを取得できます。
- fieldKeyはUdeskによって生成されます。管理画面 -> 管理センター -> 管理 -> 顧客フィールド で取得できます。
- fieldValueには2種類のタイプがあります。1. テキストフィールド:文字列型;2. 選択フィールド:配列型(配列要素はオプションのインデックス)
2.2 チャットページへ遷移
//pushを使用
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:[UdeskSDKConfig customConfig]];
[sdkManager pushUdeskInViewController:self completion:nil];
//presentを使用
[sdkManager presentUdeskInViewController:self completion:nil];
2.3 ヘルプセンターへ遷移
//pushを使用
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:[UdeskSDKConfig customConfig]];
[sdkManager showFAQInViewController:self transiteAnimation:UDTransiteAnimationTypePush completion:nil];
//presentを使用
[sdkManager showFAQInViewController:self transiteAnimation:UDTransiteAnimationTypePresent completion:nil];
-
[UdeskSDKStyle customStyle] はSDKのデフォルトUIスタイルです。ユーザーはスタイルをカスタマイズできます。詳細はこちらをクリックしてください。
-
[UdeskSDKConfig customConfig] はSDKの設定オプションです。詳細はこちらをクリックしてください。
三、カスタム設定
3.1 UIのカスタマイズ
//ここは例です。より多くのUIパラメータについては、SDKパッケージ内のファイル: UdeskSDKStyle.h を参照してください。
//パス例: UdeskSDK/UDChatMessage/UDTools/Config/UdeskSDKStyle.h
UdeskSDKStyle *sdkStyle = [UdeskSDKStyle customStyle];
sdkStyle.navigationColor = [UIColor yellowColor];
sdkStyle.titleColor = [UIColor orangeColor];
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:sdkStyle];
[sdkManager pushUdeskInViewController:self completion:nil];
3.2 エージェントIDの指定
注意:コードでエージェントまたはエージェントグループを指定する場合、バックエンドのSDK設定でナビゲーションメニューをオフにして、両者の衝突を防ぐ必要があります。
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.agentId = @"agentId";
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.3 指定客服グループID
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.groupId = @"groupId";
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.4 SDK言語の設定
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
/*
注意:
1. 使用する前に、対応する言語の言語パッケージを事前に作成してください。これはアプリ側とサーバー側に分かれます。
2. アプリ側では、対応する名前のlprojパッケージを作成し、一部のローカル言語の切り替えに使用します。現在は中国語(zh-Hans.proj)と英語(en.lproj)が含まれています。デフォルトは簡体字中国語です。作成されていない場合は、対応するキー値が使用されます。
3. サーバー側では対応する言語パッケージを作成し、Apiがデータを返す際に設定に基づいて対応する言語を選択します。ヘルプドキュメント:http://udesk.udesk.cn/hc/articles/46387。作成されていない場合は、デフォルトで中国語が使用されます。
4. サーバー側のデフォルト言語パッケージを設定できます。設定されていない場合は、このデフォルトが使用されます。
ar:アラビア語;
en-us:英語; // 注意:アプリ側はen.lprojに対応 !!!!!!!!!
es:スペイン語;
fr:フランス語;
ja:日本語;
ko:朝鮮語/韓国語;
th:タイ語;
id:インドネシア語;
zh-TW:繁体字中国語;
pt:ポルトガル語;
ru:ロシア語;
zh-cn:簡体字中国語; // 注意:アプリ側はzh-Hans.projに対応 !!!!!!!!!
*/
sdkConfig.language = @"en-us";
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.5 待機放棄タイプの設定
注意:待機放棄タイプのデフォルト値は"mark"(マーク放棄)です
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
//即時放棄: リクエスト後、直ちに待機列からクリアされ、待機放棄として記録されます。
sdkConfig.quitQueueMode = @"force_quit";
//マーク放棄: マーク後、オペレーターが取得する際に顧客がオンラインでない場合、待機列からクリアされ、待機放棄として記録されます。
//sdkConfig.quitQueueMode = @"mark";
//マーク解除: マーク後、ユーザーが戻ってきた場合にマークを解除できます。agentインターフェースをリクエストすると、解除操作が一度行われます。
//sdkConfig.quitQueueMode = @"cannel_mark";
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.6 強制横画面/縦画面
注意:iPadでは「Requires full screen」にチェックを入れる必要があります
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
// 強制縦画面
sdkConfig.orientationMask = UIInterfaceOrientationMaskPortrait;
// 強制横画面
//sdkConfig.orientationMask = UIInterfaceOrientationMaskLandscape;
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
// 強制横/縦画面は、presentUdeskInViewControllerメソッドのみ使用可能です
[sdkManager presentUdeskInViewController:self completion:nil];
3.7 カスタムボタンの設定
カスタムボタンを設定しても画面上に表示されない場合は、以下を確認してください:
- ロボットボタンのみ設定し、オペレーターボタンを設定していないか
- 「InMoreView」のみ設定し、「InInputTop」を設定していないか
- メッセージ待ち状態ではないか(メッセージ待ち状態ではカスタムボタンは表示されません)
// 入力欄の上部に配置されるボタン
UdeskCustomButtonConfig *customButton1 = [[UdeskCustomButtonConfig alloc] initWithTitle:@"カスタムボタン" image:nil type:UdeskCustomButtonConfigTypeInInputTop clickBlock:^(UdeskCustomButtonConfig *customButton, UdeskChatViewController *viewController) {
// 何らかの処理を実行
// UdeskChatViewController にはメッセージ送信メソッドがあります。
}];
// ロボット用カスタムボタンとして設定(ロボットページとオペレーターページのカスタムボタンは別々であり、ロボット用カスタムボタンはテキスト送信のみ許可されます)
customButton1.scenesType = UdeskCustomButtonConfigScenesRobot;
// 「もっと見る」内に配置されるボタン
UdeskCustomButtonConfig *customButton2 = [[UdeskCustomButtonConfig alloc] initWithTitle:@"カスタムボタン" image:[UIImage imageNamed:@"image.png"] type:UdeskCustomButtonConfigTypeInMoreView clickBlock:^(UdeskCustomButtonConfig *customButton, UdeskChatViewController *viewController) {
// 何らかの処理を実行
}];
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
// カスタムボタンを表示(デフォルトは非表示。このパラメータは入力欄上部のカスタムボタンのみを制御し、「もっと見る」内のボタンは制御しません)
sdkConfig.showCustomButtons = YES;
// 入力欄上部のツールバーに満足度評価を表示するかどうか(このパラメータは、バックエンド管理者が設定した満足度調査の有効化設定と組み合わせて判断され、両方がtrueの場合のみ表示されます。このパラメータのデフォルトはfalseです)
sdkConfig.showTopCustomButtonSurvey = YES;
sdkConfig.customButtons = @[customButton1,customButton2];
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.8 自動送信メッセージ
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
// UdeskGoodsModelの詳細パラメータについては、該当ファイルを参照してください
UdeskGoodsModel *goodsModel = [[UdeskGoodsModel alloc] init];
goodsModel.name = @"name";
// テキスト、画像、商品メッセージのみサポート
sdkConfig.preSendMessages = @[@"testPreMessage",[UIImage imageNamed:@"image"],goodsModel];
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.9 カスタム絵文字
UdeskEmojiPanelModel *model = [UdeskEmojiPanelModel new];
// 必須
model.emojiIcon = [UIImage imageNamed:@"likeSticker"];
model.stickerPaths = @[
[[NSBundle mainBundle] pathForResource:@"angry"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"cry"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"dead"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"embarrass"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"happy"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"joy"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"love"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"sad"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"shy"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"sleepy"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"surprise"ofType:@"png"],
[[NSBundle mainBundle] pathForResource:@"wink"ofType:@"png"],
];
// 任意
model.stickerTitles = @[@"憤怒",@"泣く",@"最悪",@"冷や汗",@"大笑い",@"可愛い",@"愛",@"汗",@"恥ずかしい",@"寝る",@"驚き",@"いたずら"];
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.customEmojis = @[model];
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.10 ショートビデオ機能
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
//ショートビデオ機能はデフォルトで有効
sdkConfig.smartVideoEnabled = YES;
//ショートビデオ解像度
sdkConfig.videoResolution = UDSmatrVideoResolution1280x720;
//ショートビデオ録画時間
sdkConfig.smartVideoDuration = 30;
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.11 問い合わせ対象の追加
NSDictionary *dict = @{
@"productImageUrl":@"http://test.url.com/image.jpg",
@"productTitle":@"テストテストテストテスト!",
@"productDetail":@"¥88888.0",
@"productURL":@"http://www.baidu.com"
};
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.productDictionary = dict;
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.12 商品メッセージ
UdeskSDKConfig *config = [UdeskSDKConfig customConfig];
config.showCustomButtons = YES;
UdeskCustomButtonConfig *customButton = [[UdeskCustomButtonConfig alloc] initWithTitle:@"カスタムボタン" image:nil type:UdeskCustomButtonConfigTypeInInputTop clickBlock:^(UdeskCustomButtonConfig *customButton, UdeskChatViewController *viewController) {
//商品メッセージを送信(例:ボタンクリックで直接商品メッセージを送信。ユーザーは自身の要件に応じて変更可能)
[viewController sendGoodsMessageWithModel:[self getGoodsModel] completion:nil];
}];
config.customButtons = @[customButton];
UdeskSDKActionConfig *action = [UdeskSDKActionConfig new];
action.goodsMessageClickBlock = ^(UdeskChatViewController *viewController, NSString *goodsURL, NSString *goodsId) {
//例:直接ブラウザに遷移。ユーザーは自身の要件に応じて変更可能
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:goodsURL]];
};
UdeskSDKStyle *style = [UdeskSDKStyle customStyle];
style.customerGoodsNameTextColor = [UIColor orangeColor];
//タイトル最大表示行数、デフォルトは全表示
style.goodsNameNumberOfLines = 2;
//SDKを初期化
UdeskSDKManager *chatViewManager = [[UdeskSDKManager alloc] initWithSDKStyle:style sdkConfig:config sdkActionConfig:action];
[chatViewManager pushUdeskInViewController:self completion:nil];
- (UdeskGoodsModel *)getGoodsModel {
UdeskGoodsModel *goodsModel = [[UdeskGoodsModel alloc] init];
goodsModel.name = @"Apple iPhone X (A1903) 64GB スペースグレー モバイル/ユニコム4G対応スマートフォン";
goodsModel.url = @"https://item.jd.com/6748052.html";
goodsModel.imgUrl = @"http://img12.360buyimg.com/n1/s450x450_jfs/t10675/253/1344769770/66891/92d54ca4/59df2e7fN86c99a27.jpg";
goodsModel.customParameters = @{
@"type":@"テストです",
@"order":@"123"
};
UdeskGoodsParamModel *paramModel1 = [UdeskGoodsParamModel new];
paramModel1.text = @"¥6999.00";
paramModel1.color = @"#FF0000";
paramModel1.fold = @(1);
paramModel1.udBreak = @(1);
paramModel1.size = @(14);
UdeskGoodsParamModel *paramModel2 = [UdeskGoodsParamModel new];
paramModel2.text = @"1999円以上購入で30円引き";
paramModel2.color = @"#c2fcc3";
paramModel2.fold = @(1);
paramModel2.size = @(12);
UdeskGoodsParamModel *paramModel3 = [UdeskGoodsParamModel new];
paramModel3.text = @"さらにクーポンあり";
paramModel3.color = @"#ffffff";
paramModel3.fold = @(1);
paramModel3.size = @(20);
goodsModel.params = @[paramModel1,paramModel2,paramModel3];
return goodsModel;
}
UdeskGoodsModel フィールド説明:
| パラメータ名 | 必須かどうか | 説明 |
|---|---|---|
| goodsId | 任意 | 商品メッセージID(任意。主に商品メッセージクリック時のコールバックで開発者に渡すために使用) |
| name | 必須 | 商品名タイトル |
| imgUrl | 必須 | 商品画像。未設定の場合UIが乱れる可能性があります |
| url | 任意 | 注文詳細へのリンク |
| customParameters | 任意 | カスタムパラメータ。商品メッセージクリック時に返されます |
UdeskGoodsParamModel フィールド説明:
| パラメータ名 | 必須かどうか | 説明 |
|---|---|---|
| text | 任意 | テキスト |
| color | 任意 | 色 |
| fold | 任意 | 太字 (1:太字 - 0:太字なし) デフォルトは太字なし |
| udBreak | 任意 | 改行(このテキストセグメントの終了後に改行、1:改行 - 0:改行なし)。最後の商品説明はなるべく改行しないでください |
| size | 任意 | フォントサイズ(単位px) |
| ### 3.13 画像選択ツール |
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
// 画像選択ツールを有効にするかどうか(デフォルトで有効)、無効の場合はシステムフォトライブラリを使用
sdkConfig.imagePickerEnabled = YES;
// 最大選択画像数(有効状態)
sdkConfig.maxImagesCount = 1;
// 動画の選択をサポートするかどうか(有効状態)
sdkConfig.allowPickingVideo = NO;
// 圧縮品質 0.1-1(有効状態)
sdkConfig.quality = 0.5f;
// SDKを初期化
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.14 位置情報送信機能を有効にする
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.showLocationEntry = YES;
// SDKを初期化
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
iOS8以降、開発者は位置情報機能を使用する前に、info.plistに以下を追加する必要があります(以下のいずれか一つを選択、両方追加した場合はデフォルトでNSLocationWhenInUseUsageDescriptionが使用されます):
NSLocationWhenInUseUsageDescription 、フォアグラウンド使用時にGPSを取得する許可の説明
NSLocationAlwaysUsageDescription 、永続的なGPS使用を許可する説明
3.15 未読メッセージ
SDKは未読メッセージを監視するマクロUD_RECEIVED_NEW_MESSAGES_NOTIFICATIONを提供しています。
ユーザーがオンラインで、かつSDKページにいない状態でカスタマーサポートがメッセージを送信すると、SDKは通知を送信します。
注意:この方法はユーザーがオンラインの場合のみ処理し、オフラインの場合はオフラインプッシュ機能を統合する必要があります。
[[NSNotificationCenter defaultCenter] addObserverForName:UD_RECEIVED_NEW_MESSAGES_NOTIFICATION object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
// SDKから送信された未読メッセージ通知の内容を取得
if ([note.object isKindOfClass:[UdeskMessage class]]) {
UdeskMessage *message = (UdeskMessage *)note.object;
NSLog(@"未読メッセージ内容:%@",message.content);
}
// SDKがDBに保存している未読メッセージを遅延取得
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"未読メッセージ数:%ld",[UdeskManager getLocalUnreadeMessagesCount]);
NSLog(@"未読メッセージ:%@",[UdeskManager getLocalUnreadeMessages]);
});
}];
3.16 SDKイベントコールバック
UdeskSDKActionConfig *actionConfig = [UdeskSDKActionConfig new];
// SDKページから完全に離れる際のコールバック
actionConfig.leaveUdeskSDKBlock = ^{
// 何らかの処理を実行
};
// 人工IMページから離れる際のコールバック
actionConfig.leaveChatViewControllerBlock = ^{
// 何らかの処理を実行
};
// ログイン成功時のコールバック
actionConfig.loginSuccessBlock = ^{
// 何らかの処理を実行
};
// ハイパーリンククリック時のコールバック
actionConfig.linkClickBlock = ^(UIViewController *viewController, NSURL *URL) {
// 何らかの処理を実行
};
// 構造化メッセージクリック時のコールバック
actionConfig.structMessageClickBlock = ^{
// 何らかの処理を実行
};
// オフラインメッセージボタンクリック時のコールバック(このコールバックを実装すると、SDKのネイティブオフラインメッセージ機能は使用されません)
actionConfig.leaveMessageClickBlock = ^(UIViewController *viewController) {
// 何らかの処理を実行
};
// 位置情報ボタンクリック時のコールバック(このコールバックを実装すると、SDKのネイティブ位置情報機能は使用されません)
actionConfig.locationButtonClickBlock = ^(UdeskChatViewController *viewController) {
// 何らかの処理を実行
};
// 位置情報メッセージクリック時のコールバック(このコールバックを実装すると、SDKのネイティブ位置情報機能は使用されません)
actionConfig.locationMessageClickBlock = ^(UdeskChatViewController *viewController, UdeskLocationModel *locationModel) {
// 何らかの処理を実行
};
// ログイン成功時のコールバック
actionConfig.loginSuccessBlock = ^{
// 何らかの処理を実行
};
// テキストリンククリック時のコールバック(このコールバックを実装すると、SDKのネイティブ機能は使用されません)
actionConfig.linkClickBlock = ^(UIViewController *viewController, NSURL *URL) {
// 何らかの処理を実行
};
// 商品メッセージクリック時のコールバック
actionConfig.goodsMessageClickBlock = ^(UdeskChatViewController *viewController, UdeskGoodsModel *goodsModel) {
// 何らかの処理を実行
};
// コンサルティングオブジェクト送信ボタンクリック時のコールバック(このコールバックを実装すると、SDKのネイティブ機能は使用されません)
actionConfig.productMessageSendLinkClickBlock = ^(UdeskChatViewController *viewController, NSDictionary *productMessage) {
// 何らかの処理を実行
};
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:[UdeskSDKConfig customConfig] sdkActionConfig:actionConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
3.17 ロボット音声認識
SDKはロボットの百度音声認識をサポートしています。百度音声SDKのファイルサイズが大きすぎるため、お客様自身がプロジェクトにインポートする必要があります。 UdeskSDKは、百度音声認識SDKがインポートされているかどうかを自動的に判断し、ロボット音声認識ボタンを表示します。
百度音声を使用する場合は、SDK内の「UD_API_KEY」、「UD_SECRET_KEY」、「UD_APP_ID」を自身で置き換えてください!
その他のカスタム設定については、コードファイル「UdeskSDKConfig」をご確認ください。
その他のUI設定については、コードファイル「UdeskSDKStyle」をご確認ください。
四、メッセージプッシュ
現在、1つのプッシュ方式のみをサポートしています。それは、Udeskサーバーが開発者のサーバーにメッセージを送信し、開発者がそのメッセージをAppにプッシュする方式です。
将来的には、Udesk iOS SDKがAppへの直接プッシュをサポートする予定です。つまり、開発者はAppのプッシュ証明書をUdeskにアップロードでき、UdeskがメッセージをApple APNSサーバーにプッシュします。
プッシュを受信するサーバーアドレスの設定
プッシュメッセージは開発者のサーバーに送信されます。
プッシュサーバーアドレスを設定するには、Udesk管理者アカウントでUdeskにログインし、「設定」 -> 「モバイルSDK」で設定を行ってください。

デバイスの deviceToken のアップロード
Appがバックグラウンドに入った後、Udeskが開発者のサーバーにプッシュするメッセージデータフォーマットには、deviceToken フィールドが含まれます。
以下のコードを AppDelegate.m 内のシステムコールバック didRegisterForRemoteNotificationsWithDeviceToken に追加してください:
注意:サードパーティのプッシュサービスを使用している場合は、サードパーティが生成したtokenを渡す必要があります。例:JPush(極光推送)が生成するregistrationID。
[UdeskManager registerDeviceToken:deviceToken];
Udeskサーバーに開発者のサーバーへのメッセージ送信を通知
現在、Udeskのプッシュは、開発者が提供するURLにメッセージをプッシュすることで実現されています。
Appがバックグラウンドに入るとき、Udeskサーバーに通知し、それ以降のメッセージを開発者が提供するサーバーアドレスにプッシュするようにする必要があります。
開発者は AppDelegate.m のシステムコールバック applicationDidEnterBackground で、以下のコードのようにプッシュサービス開始インターフェースを呼び出す必要があります:
- (void)applicationDidEnterBackground:(UIApplication *)application {
__block UIBackgroundTaskIdentifier background_task;
// バックグラウンドタスクを登録し、システムに時間を借りる必要があることを伝えます
background_task = [application beginBackgroundTaskWithExpirationHandler:^ {
// 完了したかどうかに関わらず、background_taskを終了します
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 必要に応じて通知を開始/停止します
[UdeskManager startUdeskPush];
});
}
Udeskプッシュを停止する
アプリがフォアグラウンドに入った時、Udeskサーバーに通知し、以降のメッセージをSDKに送信し、開発者が提供するサーバーへのプッシュを停止させる必要があります。
開発者は、AppDelegate.m のシステムコールバック applicationWillEnterForeground で、プッシュ停止とメッセージ取得のインターフェースを呼び出す必要があります。コード例は以下の通りです:
- (void)applicationWillEnterForeground:(UIApplication *)application {
// オンライン操作、オフラインメッセージを取得
[UdeskManager endUdeskPush];
}
オフラインプッシュインターフェース要件
基本要件
- リクエスト時に使用する 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'は満足度調査送信 |
パラメータ例
{
"message_id": "di121jdlasf82jfdasfklj39dfda",
"platform": "ios",
"device_token": "4312kjklfds2",
"app_id": "dafjidalledaf",
"content": "Hello world!",
"sent_at": "2016-11-21T10:40:38+08:00",
"from_id": 231,
"from_name": "Tom",
"to_id": 12,
"to_token": "dae121dccepm1",
"type": "message",
"event": "close"
}
注意:プッシュ通知を使用しない場合
アプリがバックグラウンドに切り替わった際に以下のインターフェースを呼び出してください
- (void)applicationDidEnterBackground:(UIApplication *)application {
// オフライン設定、カスタマーサポートがオフラインメッセージを送信
[UdeskManager setupCustomerOffline]
}
アプリがフォアグラウンドに切り替わった際に以下のインターフェースを呼び出してください
- (void)applicationWillEnterForeground:(UIApplication *)application {
// オンライン操作、オフラインメッセージを取得
[UdeskManager setupCustomerOnline];
}
五、API説明
5.1 Udeskサーバーとの接続を切断
ユーザーを切り替える際、このインターフェースを呼び出して前の顧客の接続を切断します。
[UdeskManager logoutUdesk];
5.2 顧客をオンラインに設定
Udeskサーバーに接続後、顧客はデフォルトでオンラインです。顧客をオフラインに設定した後、このインターフェースを呼び出すことで顧客を再度オンラインにすることができます。
[UdeskManager setupCustomerOnline];
5.3 顧客をオフラインに設定
顧客をオフラインに設定します。
[UdeskManager setupCustomerOffline];
5.4 顧客のローカルチャットデータを削除
[UdeskManager removeAllMessagesFromDatabase];
5.5 未読メッセージ数を取得
開発者は未読メッセージ数を表示する必要がある際にこのインターフェースを呼び出すことができます。ユーザーがチャット画面に入ると、未読メッセージ数はゼロにリセットされます。
[UdeskManager getLocalUnreadeMessagesCount];
5.6 未読メッセージを取得
開発者は未読メッセージを表示する必要がある際にこのインターフェースを呼び出すことができます。ユーザーがチャット画面に入ると、未読メッセージはクリアされます。
[UdeskManager getLocalUnreadeMessages];
5.7 すべての未読メッセージを既読に設定
顧客の未読メッセージをリセットすることができます。
[UdeskManager markAllMessagesAsRead];
5.8 未読メッセージ受信のブロードキャストを監視
開発者は適切な場所で、新着メッセージを顧客に通知するために、メッセージ受信のブロードキャストを監視できます。ブロードキャスト名は UD_RECEIVED_NEW_MESSAGES_NOTIFICATION で、UdeskManager.h で定義されています。
5.9 SDKは位置情報の送信をサポート
注:iOS8以降、開発者は位置情報機能を使用する前に、info.plistに以下を追加する必要があります(以下のいずれか一つを選択、両方追加した場合はデフォルトでNSLocationWhenInUseUsageDescriptionが使用されます):
NSLocationWhenInUseUsageDescription 、フォアグラウンド使用時にGPSを取得する許可の説明
NSLocationAlwaysUsageDescription 、常時GPS使用を許可する説明
SDKはデフォルトで位置情報の送信ができません。SDKで位置情報を送信する必要がある場合
ネイティブ(SDK内部で位置情報の取得、送信、検索、表示を実装、Appleのネイティブマップコントロールを使用)
API(APIコールバック方式で位置情報を連携する場合、開発者が対応する機能を実装する必要があります。SDKDemoには百度地図のサンプルを提供していますが、参考までにご利用ください。)
UdeskSDKActionConfig *actionConfig = [UdeskSDKActionConfig new];
// 位置情報ボタンクリックコールバック(このコールバックを実装すると、SDKのネイティブ位置情報機能は使用されません)
actionConfig.locationButtonClickBlock = ^(UdeskChatViewController *viewController) {
// 位置情報VCを開く
UdeskCustomLocationViewController *custom = [[UdeskCustomLocationViewController alloc] initWithHasSend:NO];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:custom];
[viewController presentViewController:nav animated:YES completion:nil];
// 位置情報VC 送信コールバック
custom.sendLocationBlock = ^(UdeskLocationModel *model) {
[viewController sendLoactionMessageWithModel:model completion:nil];
};
};
// 位置情報メッセージクリックコールバック(このコールバックを実装すると、SDKのネイティブ位置情報機能は使用されません)
actionConfig.locationMessageClickBlock = ^(UdeskChatViewController *viewController, UdeskLocationModel *locationModel) {
// 位置情報VCを開く
UdeskCustomLocationViewController *custom = [[UdeskCustomLocationViewController alloc] initWithHasSend:YES];
// 確認する必要があるmodelを渡す
custom.locationModel = locationModel;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:custom];
[viewController presentViewController:nav animated:YES completion:nil];
};
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.showLocationEntry = YES;
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle] sdkConfig:sdkConfig sdkActionConfig:actionConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
5.10 注文メッセージの送信
SDKユーザーが作成済みであれば、必要な場所で呼び出すことができます。送信後、管理画面で注文を確認できます。
UdeskOrder *order = [[UdeskOrder alloc] init];
order.number = @"1111";
order.name = @"商品注文";
order.url = @"http://www.qq.com";
order.price = 166.66;
order.orderAt = [dateFormatter stringFromDate:[NSDate date]];
order.payAt = [dateFormatter stringFromDate:[NSDate date]];
order.status = @"wait_pay";
order.remark = @"テスト注文";
[UdeskManager sendOrder:order];
5.11 トラッキングメッセージの送信
SDKユーザーが作成済みであれば、必要な場所で呼び出すことができます。送信後、IMカスタマーサポートワークステーションや会話履歴で確認できます。
UdeskTrack *track = [[UdeskTrack alloc] init];
track.type = @"product";
track.name = @"商品名";
track.url = @"http://www.baidu.com";
track.imageUrl = @"https://dn-udeskim.qbox.me/image_1559120464_721.png";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
track.date = [dateFormatter stringFromDate:[NSDate date]];
UdeskTrackParams *params1 = [[UdeskTrackParams alloc] init];
params1.text = @"商品パラメータ1";
params1.color = @"#FF0000";
params1.udBreak = @(1);
params1.size = @"20";
params1.fold = @(1);
UdeskTrackParams *params2 = [[UdeskTrackParams alloc] init];
params2.text = @"商品パラメータ2";
params2.color = @"#FF0111";
params2.udBreak = @(0);
params2.size = @"10";
params2.fold = @(0);
track.params = @[params1,params2];
[UdeskManager sendTrack:track];
六、よくある質問
キーボード表示後、入力フィールドとキーボードの間にずれが生じる
サードパーティ製のオープンソースライブラリIQKeyboardManagerを使用していないか確認してください。このライブラリは入力フィールド判定ロジックと競合する可能性があります。
- UdeskChatViewControllerのviewWillAppearメソッド内に
[[IQKeyboardManager sharedManager] setEnable:NO];を追加します。これにより、現在のページでIQKeyboardManagerを無効化します。 - UdeskChatViewControllerのviewWillDisappearメソッド内に
[[IQKeyboardManager sharedManager] setEnable:YES];を追加します。これにより、現在のページを離れる前にIQKeyboardManagerを再度有効化します。
指定したカスタマーサポートグループまたは担当者の割り当てが、指定したグループの担当者と一致しない場合
まず、担当者がセッションを閉じていないことを確認してください。
当社製品のロジック: 顧客AがカスタマーサポートグループBの担当者B1を選択してセッションを開始したとします。その後、顧客Aがセッション画面を終了し、別の画面に移動し、その後カスタマーサポートグループCの担当者C1を通じてセッションが割り当てられた場合: バックエンドは、B1とのセッションがまだ存在するかどうかを判断します。存在する場合は、担当者C1ではなく、直接B1に割り当てられます。B1のセッションが閉じられた場合のみ、担当者C1に割り当てられます。
異なる顧客に割り当てられたセッションが1つのセッション内に表示される
この状況は、担当者が渡したsdkTokenの値が同じである場合に発生します。 sdkTokenは身分証明書のように、ユーザーを一意に識別するものです。顧客が統合時に渡しているsdktokenの値を確認してください。
emailまたはcellphoneを設定している場合、同じ値が存在すると、1人の担当者のセッション内に表示されることもあります。
+[UDXMLElement elementWithName:xmlns:]: unrecognized selector sent to class 0x10112abb8 のような例外が発生する
この状況が発生した場合は、まず手動インポート時のXcodeプロジェクト内の設定が適切かどうかを確認してください(2.2と2.3を参照)。
設定に問題がないことを確認したら、Other Linker Flagsに -force_load が記述されているかどうかを確認してください。この設定がある場合は、その設定の下に当社SDKの.aファイルのパスを追加してください。
SDKページに入ると直接クラッシュし、スタックトレースにUDのネットワークリクエストが表示される
この状況が発生した場合は、頂象SDKを使用しているかどうかを確認し、最新バージョンにアップグレードしてください。
APPで百度地図を使用しており、SDKセッションページに入ると直接クラッシュし、クラッシュ情報に "xmlFreeDoc" が表示される
この状況が発生した場合は、使用している百度地図SDKのバージョンが3.4.2または6.0.0かどうかを確認してください。百度地図SDKを最新バージョンにアップグレードしてください。
APPで友盟共有を使用しており、正常に遷移できない
友盟SDKを最新バージョンにアップグレードしてください。
カスタマーサポートからのメッセージ送信がずっと回転し続ける(送信中状態)
SDKはバックグラウンドに移行した後、すぐにはオフラインになりません。これにより、カスタマーサポートがメッセージを送信してもずっと送信されない状態が続き、SDKがオフラインになった後にのみオフラインメッセージが送信されます。
APPがバックグラウンドに移行する際に、当社のオフラインメソッドを明示的に呼び出すことができます。
[UdeskManager setupCustomerOffline];
APPがフォアグラウンドに戻る際に、当社のオンラインメソッドを明示的に呼び出すことができます。
[UdeskManager setupCustomerOnline];
APPで画面を回転させると、SDK UIが適応しない問題
SDKは現時点では回転に対応したUI適応をサポートしていません。以下は解決方法です。
UdeskSDKManager *chatViewManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle customStyle]];
// 縦画面を強制
chatViewManager.orientationMask = UIInterfaceOrientationMaskPortrait;
// 横画面を強制
//chatViewManager.orientationMask = UIInterfaceOrientationMaskLandscape;
[chatViewManager presentUdeskInViewController:self completion:nil];
H5ページで添付ファイルをアップロードできず、クリックすると直接戻るかページがめくれる
-
presentViewController を使用してフィードバックページに遷移する
-
dismissViewControllerAnimated メソッドをオーバーライドする
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
if ( self.presentedViewController)
{
[super dismissViewControllerAnimated:flag completion:completion];
}
}
- dismissが必要なときに呼び出す:
[super dismissViewControllerAnimated:flag completion:completion];
ワークステーションの顧客情報表示アプリ名が正しくない
ワークステーションの顧客情報 - ソースに「不明」と表示される場合、お使いのアプリの info.plist に CFBundleDisplayName プロパティが設定されていない可能性があり、SDKがアプリ名を取得できません。
七、更新履歴
更新履歴:
SDK v5.2.10 バージョン更新内容:
- リッチテキスト埋め込み画像の開く動作を修正
- ビデオメッセージの送信ステータスがない問題を修正
- アプリが強制終了された際のキュー放棄を修正
SDK v5.2.9 バージョン更新内容:
- armv7 アーキテクチャへの互換性対応
SDK v5.2.8 バージョン更新内容:
- iOS 16 クラッシュの修正
- リッチテキスト日付コンテンツのジャンプ問題を修正
- NSMutableData カテゴリの問題を修正
- 一部の非推奨 API のアップグレード
SDK v5.2.7 バージョン更新内容:
- 履歴メッセージと最新メッセージの分割を新規追加
- シミュレータキーボードのデッドロック問題を修正
- リッチテキストグループ展開ページのスクロール問題を修正
- 一部機種でのカスタマーサポートグループ選択ページのデータ重複問題を修正
- チャット履歴の一部欠落問題を修正
- システム権限承認申請の最適化
SDK v5.2.5 バージョン更新内容:
- xmpp 再接続の最適化
SDK v5.2.4 バージョン更新内容:
- iOS15 への対応
SDK v5.2.3 バージョン更新内容:
- 新機種の識別
- 商品メッセージの最適化
- iOS15 への対応
SDK v5.1.9 バージョン更新内容:
- SDK が履歴対話の最適化をサポート
- xcode 14.5 コンパイル問題
SDK v5.1.8 バージョン更新内容:
- 推奨ガイド文のサポート
- 過去の履歴メッセージ記録の手動オペレーター転送ボタンロジックを修正
SDK v5.1.7 バージョン更新内容:
- リンクのエンコード問題を修正
- アルバムの色設定のサポート
- 既知のバグ修正
SDK v5.1.6 バージョン更新内容:
- ボットメッセージのジャンプをサポート
- 評価イベントメッセージをサポート
- iOS14 への対応
- 既知のバグ修正
SDK v5.1.5 バージョン更新内容:
- pod インポートのブランチ方式使用時のコンパイルエラー問題を修正
- 既知のバグ修正
SDK v5.1.4 バージョン更新内容:
- ボットリッチテキストメッセージの表示問題を修正
- キューイングメッセージセッションの問題を修正
- 既知のバグ修正
SDK v5.1.3 バージョン更新内容:
- ボット推奨メッセージのリッチテキスト表示問題を修正
- 自動メッセージに商品タイプを追加
- ボットメッセージに提案問題タイプを追加
- 既知のバグ修正
SDK v5.1.2 バージョン更新内容:
- 対話メッセージの最適化
- iOS13 deviceToken の問題を修正
- 既知のバグ修正
SDK v5.1.1 バージョン更新内容:
- 対話中のカスタマーサポートオフライン体験の最適化
- 既知のバグ修正
SDK v5.1.0 バージョン更新内容:
- テンプレートメッセージのサポート
- 注文、追跡メッセージの送信をサポート
- 既知のバグ修正
SDK v5.0.0 バージョン更新内容:
- ネイティブボットのサポート
- サードパーティセッションのサポート
- UI インタラクションの改訂
SDK v4.3.1 バージョン更新内容:
- ファイルアップロードポリシーの修正
- ダークモードでの表示問題を修正
SDK v4.3.0 バージョン更新内容:
- YYWebImage 競合問題を修正
- カスタマーサポートステータス問題を修正
- 多言語アプリ名取得問題を修正
- 満足度評価備考文字数の制限
- 既知の問題を修正
SDK v4.1.9 バージョン更新内容:
- YYWebImage 競合問題を修正
SDK v4.1.8 バージョン更新内容:
- タイ語メッセージが完全に表示されない問題を修正
SDK v4.1.7 バージョン更新内容:
- iOS13 への対応
- 既知の問題を修正
SDK v4.1.6 バージョン更新内容:
- 画像ピッカーの混乱問題を修正
- 空メッセージの最適化
- 既知の問題を修正
SDK v4.1.5 バージョン更新内容:
- 無メッセージ対話フィルターが特定のシナリオで無効になる問題を修正
- SDK 指定のカスタマーサポート/グループが特定のシナリオで無効になる問題を修正
SDK v4.1.4 バージョン更新内容:
- 多言語サポート
- 安定性の最適化
SDK v4.1.3 バージョン更新内容:
- メッセージの最適化
SDK v4.1.2 バージョン更新内容:
- カスタマーサポート接続ロジックの最適化
- ビデオメッセージダウンロードの最適化
- 安定性の最適化
SDK v4.1.1 バージョン更新内容:
- 無メッセージ対話フィルターインターフェースで絵文字を送信した際にコードが表示される問題を修正
- 英語設定時にも中国語ポップアップが表示される偶発的な問題を修正
SDK v4.1.0 バージョン更新内容:
- ボットが自動手動オペレーター転送イベントをサポート
- iPhone Xs、XR、Xs Max への対応
- グローバル顧客一意性 customer_token をサポート
- カスタムチャネルのサポート
- ボット名が管理者バックエンド設定をサポート
- 無メッセージ対話フィルターの最適化
- オフラインメッセージの表示時間を送信時間に最適化
- デフォルト絵文字の置き換え、新旧絵文字の互換性
- キューイング中のメッセージ送信をサポート
- 異なる携帯電話でのビデオメッセージ再生不能問題を修正
- カスタマーサポートの高速メッセージ送信による SDK 側メッセージ順序の乱れ問題を修正
- 複数画像選択送信による画像送信不正確問題を修正
- 既知の問題修正
SDK v4.0.6 バージョン更新内容:
- iOS12 への対応
SDK v4.0.5 バージョン更新内容:
- 顧客情報更新がコールバックをサポート
- 満足度調査 UI が iPhone X に対応
- ネットワークチェックコンポーネント「UdeskReachability」クラッシュの修正
SDK v4.0.4 バージョン更新内容:
- メッセージの最適化
- 評価結果エラー問題の修正
- 満足度評価サードパーティ入力法による送信ボタン隠れ問題の修正
- SDK カメラ権限プロンプトの最適化
- SDK 満足度タグ選択後、キーボード表示/非表示時にタグ選択マークが消える問題
SDK v4.0.3 バージョン更新内容:
- キューイングから直接メッセージに入る問題の修正
- 満足度評価備考必須問題の修正
SDK v4.0.2 バージョン更新内容:
- 接続の最適化
- 直接メッセージができない問題を修正
- 直接メッセージテキストが表示されて消える問題を修正
- 無メッセージ対話フィルターで自動メッセージが受信できない問題を修正
SDK v4.0.1 バージョン更新内容:
- 商品メッセージのサポート
- 既知の問題修正
SDK v4.0.0 バージョン更新内容:
- 新版満足度調査のサポート
- カスタムボタンのサポート
- 無メッセージ対話フィルターのサポート
- 強制画面回転のサポート
- バックエンド設定メッセージガイドテキストのサポート
- ショートビデオ撮影のサポート
- 画像選択の最適化
- カスタム絵文字パックのサポート
- ボット推奨問題の設定サポート
- ボットセッション x 件後に手動オペレーター転送ボタンを表示する設定サポート
- 自動メッセージ送信のサポート
SDK v3.9.2 バージョン更新内容:
- リッチテキストメッセージ受信時の偶発的クラッシュ問題を修正
SDK v3.9.1 バージョン更新内容:
- チケットページ、地理位置ページが iPhone X に対応
- チケットページ、地理位置ページの白線問題の処理
- カスタマーサポートグループ割り当て問題を修正
- インポートされたサードパーティフレームワークの列挙型競合を修正
SDK v3.9 バージョン更新内容:
- メッセージ到達率の最適化
- SDK がビデオセッションをサポート
SDK v3.8.7 バージョン更新内容:
- メッセージテキスト URL クリックコールバックインターフェースを追加
- .searchController 呼び出しによるクラッシュ問題を修正
- メッセージフォームに入った際のユーザーデフォルトデータ自動入力問題を修正
SDK v3.8.6 バージョン更新内容:
- ボットページが iPhone X に対応
- キュー放棄の最適化
- テキスト入力改行時の UI 問題を解決
- 撮影画像が大きすぎて画面が乱れる問題を修正
SDK v3.8.5 バージョン更新内容:
- 満足度調査ポップアップ表示されないバグを修正
SDK v3.8.4 バージョン更新内容:
- バックエンド設定取得失敗時の再試行メカニズムを追加
- iPhone X への対応
- システムアルバムキャンセルボタン色設定パラメータを追加
SDK v3.8.3 バージョン更新内容:
- SDK が非稼働時間に直接メッセージ失敗する問題を修正
- ビデオ再送信問題を修正
SDK v3.8.2 バージョン更新内容:
- iOS11 ナビゲーションバーボタンオフセット問題を修正
SDK v3.8.1 バージョン更新内容:
- sdk_token 特殊文字によるメッセージ保存不能問題を修正
SDK v3.8 バージョン更新内容:
- SDK が地理位置送信をサポート(ネイティブと API 形式)
- ウェルカムメッセージが電話番号・URL 認識をサポート
- pod インポート時の言語切り替え問題を解決
- アプリネットワーク切り替え時に SDK がカスタマーサポートに伝達されない問題を修正
SDK v3.7.1 バージョン更新内容:
- ウェルカムメッセージ空白バグを修正
- 時間表示バグを修正
- 指定カスタマーサポート・グループ割り当てバグを修正
- pod インポートと YYWebimage 競合の修正
- 入力フィールド機能ボタンの設定可能化
- iOS バージョンに基づく WKWebview または UIWebview の切り替え
SDK v3.7 バージョン更新内容:
- オフライン直接メッセージのサポート
- SDK が満足度調査の返却とスイッチ設定をサポート
- SDK が GIF の受信・送信をサポート
- SDK がビデオの受信・送信をサポート
- SDK がカスタマーサポートメッセージ取り消しをサポート
SDK v3.6.4 バージョン更新内容:
- カスタマーサポートセッション終了後のユーザーメッセージ送信再接続メカニズム
- メッセージポップアップテキストバグを修正
SDK v3.6.3 バージョン更新内容:
- カスタムフィールド呼び出し方法の最適化
- ウェルカムメッセージバグを修正
SDK v3.6.2 バージョン更新内容:
- IM ページ戻りコールバック API を追加
- 録音の最適化
SDK v3.6.1 バージョン更新内容:
- 満足度調査複数回ポップアップバグを修正
- カスタマーサポート繁忙からオンライン時の SDK ポップアップ自動非表示
SDK v3.6 バージョン更新内容:
- 構造化メッセージ表示のサポート
- 管理者側ブラックリストメッセージヒント文のカスタマイズサポート
SDK v3.5.8 バージョン更新内容:
- メッセージへの添付ファイル追加をサポート
- メッセージページジャンプ方式イベントロジックの修正
- プッシュ例
- バグ修正
SDK v3.5.7 バージョン更新内容:
- bitcode のサポート
SDK v3.5.6 バージョン更新内容:
- 入力フィールドへの大量テキストコピーによるクラッシュを修正
SDK v3.5.5 バージョン更新内容:
- 未読メッセージを既読にするサポート
- セッション終了後の満足度調査ポップアップ表示されない問題を修正
SDK v3.5.4 バージョン更新内容:
- iOS10.3 への対応
SDK v3.5.3 バージョン更新内容:
- 管理者側 SDK 設定のサポート
- キュー放棄のサポート
- 初期化でシングルサインオンキーをサポートせず、各アプリ作成時に生成される appid と appkey を統一使用
SDK v3.4 バ
八、機能スクリーンショット
