iOS IM SDKドキュメント 4.x

お知らせ

SDKを組み込んでコンパイル時にエラーが発生する場合は、Xcodeを最新バージョンにアップグレードしてください

「master」ブランチに対応するSDKバージョンは5.0+です

「4.x_back」ブランチに対応するSDKバージョンは4.3.4です

問題が発生した場合は、まず最新バージョンのSDKにアップグレードするか、デモをダウンロードして検証することをお勧めします

SDKダウンロードURL

https://github.com/udesk/UdeskSDK-iOS

一、SDKの統合

ファイルの説明

Demo内のファイル 説明
UdeskSDK Udeskオンライン相談SDK
UdeskCall Udeskビデオ通話SDK(オンライン相談SDKに依存)
注意:UdeskSDKはUdeskCallに依存していません。この機能が必要ない場合は、このSDKをインポートしないでください。

互換性

カテゴリ 互換範囲
OS iOS 7.0以上をサポート
アーキテクチャ armv7、arm64、i386、x86_64
開発環境 最新バージョンのXcodeを使用することを推奨

SDKサイズに関する説明

  1. Bitcodeを有効にするとバイナリファイルのサイズが増加しますが、この部分はAppStoreで公開する際にさらにコンパイル最適化が行われ、最終的なファイルサイズの変化には影響しません。ここで計算しているのはBitcodeを無効にした場合のバイナリ増分です。
  2. .aファイルは複数のアーキテクチャをマージしたものであり、lipoを使用すると詳細を確認できます。したがって、.aライブラリファイル自体は大きく、パッケージ化されたipaファイルも比較的大きくなります。しかし、ユーザーが実際にダウンロードする際には、AppStoreによって最適化され、ユーザーのデバイスに必要なアーキテクチャのみがダウンロードされるため、実際にスマートフォンで占有される容量は小さくなります。Architectures in the fat file: libUdesk.a are: armv7 i386 x86_64 arm64
  3. UdeskSDKはiPhoneX 12.1において、実際の占有サイズは10MB未満です

プロジェクトへの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フォルダをプロジェクトにドラッグし、以下の設定を行います。

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に対応する権限を追加してください。

UdeskCallをプロジェクトにインポート

ダウンロードしたフォルダ内のUdeskCallフォルダをプロジェクトにドラッグし、以下の設定を行います。

システムフレームワークをインポートします:

libicucore.tbd
CFNetwork.framework
Security.framework

注意:UdeskCallはiOS 8.0以上をサポートし、bitcodeはサポートしていません。info.plistでバックグラウンド実行モードを設定してください。

二、SDKのクイックスタート

Udeskはオープンソースのチャットインターフェースを提供しており、開発者が迅速に対話ウィンドウとヘルプセンターを作成できるように支援します。また、カスタマイズ要件を実現するためのカスタムインターフェースも提供しています。

2.1 会社情報と顧客情報の初期化

// 会社の初期化(appKey、appID、domainはすべて必須フィールドです)
UdeskOrganization *organization = [[UdeskOrganization alloc] initWithDomain:"domain" appKey:"appKey" appId:"appId"];

// 注意:sdktokenは顧客の一意の識別子であり、身元を識別するために使用されます。これはあなた方が生成して私たちに渡すものです。
// sdk_token: 渡される文字は、英字/数字などの一般的な文字セットを使用してください。身分証のように、1つの身分証番号が複数の人に対応したり、1人が複数の身分証番号を持つことは許可されません。また、顧客にメールアドレスと携帯電話番号を設定する場合、異なる顧客が同じ携帯電話番号やメールアドレスに対応しないようにしてください。同じものが出現した場合、新しい顧客は作成されません。
UdeskCustomer *customer = [UdeskCustomer new];
// 必須(特殊文字は使用しないでください)
customer.sdkToken = @"sdkToken";
// オプション、主キー、一意の顧客外部識別子、一意識別子の競合を処理するために使用されます(適当な値を渡さないでください)
customer.customerToken = @"customerToken";
// オプション
customer.nickName = @"テスト名前";
// メールアドレスの規則に厳密に従ってください(ない場合は記入せず、空にすることはできません)
customer.email = @"test@udesk.cn";
// 番号の規則に厳密に従ってください(ない場合は記入せず、空にすることはできません)
customer.cellphone = @"18888888888";
customer.customerDescription = @"私はテストです";

// 顧客カスタムフィールド(オプション)
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];

2.2 チャットページへ遷移

//pushを使用
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:[UdeskSDKConfig customConfig]];
[sdkManager pushUdeskInViewController:self completion:nil];

//presentを使用
[sdkManager presentUdeskInViewController:self completion:nil];

2.3 ヘルプセンターへ遷移

//pushを使用
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:[UdeskSDKConfig customConfig]];
[sdkManager pushUdeskInViewController:self udeskType:UdeskFAQ completion:nil];

//presentを使用
[sdkManager presentUdeskInViewController:self udeskType:UdeskFAQ completion:nil];

三、Udesk SDK カスタム設定

3.1 SDK 提供の UI を使用

ネイティブ

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle]];
[sdkManager pushUdeskInViewController:self completion:nil];

クラシック

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle blueStyle]];
[sdkManager pushUdeskInViewController:self completion:nil];

3.2 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.3 指定エージェントID

注意:コード内でエージェントまたはエージェントグループを指定する場合、バックエンドのSDK設定でナビゲーションメニューを無効にし、両者の競合を防ぐ必要があります。
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.agentId = @"agentId";

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.4 指定エージェントグループID

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.groupId = @"groupId";

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.5 ユーザーアバターの設定

UdeskSDKStyle *sdkStyle = [UdeskSDKStyle customStyle];
//ローカル画像でアバターを設定
sdkStyle.customerImage = [UIImage imageNamed:@"avatar"];
//URLでアバターを設定
sdkStyle.customerImageURL = @"https://avatar....";

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:sdkStyle];
[sdkManager pushUdeskInViewController:self completion:nil];

3.6 SDK言語の設定

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
/*旧方法*/
//中国語
sdkConfig.languageType = UDLanguageTypeCN;
//英語
//sdkConfig.languageType = UDLanguageTypeEN;

/*新方法*/
/*
 言語タイプ。この方法を推奨します。

 注意:
 1. 使用する前に、対応する言語の言語パッケージを事前に作成してください。App側とサーバー側に分かれます。
 2. App側では、対応する名前のlprojパッケージを作成し、一部のローカル言語の切り替えに使用します。現在、中国語(zh-Hans.proj)と英語(en.lproj)が含まれています。デフォルトは簡体字中国語です。作成されていない場合は、対応するキー値が使用されます。
 3. サーバー側では、対応する言語パッケージを作成します。APIがデータを返す際、設定に基づいて対応する言語を選択します。ヘルプドキュメント:http://udesk.udesk.cn/hc/articles/46387。作成されていない場合、デフォルトで中国語が使用されます。
 4. サーバー側のデフォルト言語パッケージを設定できます。設定されていない場合は、このデフォルトが使用されます。

 ar:アラビア語;
 en-us:英語; // 注意:App側はen.lprojに対応 !!!!!!!!!
 es:スペイン語;
 fr:フランス語;
 ja:日本語;
 ko:朝鮮語/韓国語;
 th:タイ語;
 id:インドネシア語;
 zh-TW:繁体字中国語;
 pt:ポルトガル語;
 ru:ロシア語;
 zh-cn:簡体字中国語; // 注意:App側はzh-Hans.projに対応 !!!!!!!!!
 */
sdkConfig.language = @"en-us";

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.7 待機放棄タイプの設定

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
// 待機列から直接クリア
sdkConfig.quitQueueType = UdeskForceQuit;
// 放棄としてマーク
//sdkConfig.quitQueueType = UdeskMark;

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.8 強制横/縦画面表示

注意:iPadでは「Requires full screen」にチェックを入れる必要があります

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
// 強制縦画面
sdkConfig.orientationMask = UIInterfaceOrientationMaskPortrait;
// 強制横画面
//sdkConfig.orientationMask = UIInterfaceOrientationMaskLandscape;

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
// 強制横/縦画面表示には、presentUdeskInViewControllerメソッドのみ使用可能
[sdkManager presentUdeskInViewController:self completion:nil];

3.9 カスタムボタンの設定

// 入力欄の上部に配置されるボタン
UdeskCustomButtonConfig *customButton1 = [[UdeskCustomButtonConfig alloc] initWithTitle:@"カスタムボタン" image:nil type:UdeskCustomButtonConfigTypeInInputTop clickBlock:^(UdeskCustomButtonConfig *customButton, UdeskChatViewController *viewController) {
    // 何らかの処理を実行
    // UdeskChatViewController にはメッセージ送信メソッドがあります。
}];

// 「もっと見る」内に配置されるボタン
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 defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.10 自動送信メッセージ

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.preSendMessages = @[@"testPreMessage",[UIImage imageNamed:@"image"]];

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.11 カスタム絵文字

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 defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.12 ショートビデオ機能

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
//ショートビデオ機能はデフォルトで有効
sdkConfig.smartVideoEnabled = YES;
//ショートビデオ解像度
sdkConfig.videoResolution = UDSmatrVideoResolution1280x720;
//ショートビデオ録画時間
sdkConfig.smartVideoDuration = 30;

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.13 ロボット推奨質問の設定

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
//robotModelKeyはUdesk管理者バックエンドで設定・取得します
sdkConfig.robotModelKey = @"TestKey";

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.14 ロボット顧客情報の設定

注意:渡す顧客情報は、SDKを初期化する際に渡した顧客情報と一致している必要があります。
UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
//robotCustomerInfoの設定ルールは、Demo内のUdeskRobotCustomInfoViewController.mファイルを参照してください
sdkConfig.robotCustomerInfo = @"robotCustomerInfo";

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

顧客パラメータ

パラメータ名 タイプ 必須かどうか 説明
c_name String 顧客名
c_email String 顧客メールアドレス唯一
c_phone String 顧客電話番号唯一
c_desc String 顧客説明
c_org String 会社名
c_tags String 顧客タグ 顧客タグを渡します。カンマ区切り 例:"ハンサム,綺麗"
c_owner String 顧客担当者ID
c_vip String 'vip'(VIP顧客) または 'normal'(一般顧客) 顧客VIP識別
c_owner_group String 顧客担当グループID
c_other_emails String 顧客その他のメールアドレスリスト カンマ区切り 例:"a@xxx.cn,b@xxx.cn"
c_cf_<カスタムフィールド名> String 顧客カスタムフィールド 顧客カスタムフィールド 例: c_cf_名前、c_cf_age、...
### 3.15 コンサルティング対象の追加
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 defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.16 商品メッセージ

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]];
}];

config.customButtons = @[customButton];

UdeskSDKActionConfig *action = [UdeskSDKActionConfig new];
action.goodsMessageClickBlock = ^(UdeskChatViewController *viewController, NSString *goodsURL, NSString *goodsId) {
    // 例:直接ブラウザに遷移。ユーザーは自身の要件に応じて変更可能
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:goodsURL]];
};

// SDKを初期化
UdeskSDKManager *chatViewManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] 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";

    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;
}

3.17 画像選択ツール

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 defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

3.18 位置情報送信機能を有効にする

UdeskSDKConfig *sdkConfig = [UdeskSDKConfig customConfig];
sdkConfig.showLocationEntry = YES;

// SDKを初期化
UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:sdkConfig];
[sdkManager pushUdeskInViewController:self completion:nil];
iOS8以降、開発者は位置情報機能を使用する前に、info.plistに以下を追加する必要があります(以下のいずれか一つを選択、両方追加した場合はデフォルトでNSLocationWhenInUseUsageDescriptionが使用されます):
NSLocationWhenInUseUsageDescription 、フォアグラウンド使用時にGPSを取得する許可の説明
NSLocationAlwaysUsageDescription 、永続的なGPS使用を許可する説明

3.19 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 = ^{
    // 何らかの処理
};
// テキストリンククリック時のコールバック
actionConfig.linkClickBlock = ^(UIViewController *viewController, NSURL *URL) {
    // 何らかの処理
};
// 商品メッセージコールバック
actionConfig.goodsMessageClickBlock = ^(UdeskChatViewController *viewController, UdeskGoodsModel *goodsModel) {
    // 何らかの処理
};
// 問い合わせオブジェクト送信ボタンコールバック
actionConfig.productMessageSendLinkClickBlock = ^(UdeskChatViewController *viewController, NSDictionary *productMessage) {
    // 何らかの処理
};

UdeskSDKManager *sdkManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle] sdkConfig:[UdeskSDKConfig customConfig] sdkActionConfig:actionConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

その他のカスタム設定については、コードファイル「UdeskSDKConfig」をご確認ください

その他のUI設定については、コードファイル「UdeskSDKStyle」をご確認ください

四、メッセージプッシュ

現在サポートされているプッシュ方式は1つのみです。すなわち、Udeskサーバーが開発者のサーバーにメッセージを送信し、開発者がそのメッセージをAppにプッシュする方式です。

将来的には、Udesk iOS SDKがAppへの直接プッシュをサポートする予定です。開発者がAppのプッシュ証明書をUdeskにアップロードし、UdeskがメッセージをApple APNSサーバーにプッシュする方式になります。

プッシュ受信用サーバーアドレスの設定

プッシュメッセージは開発者のサーバーに送信されます。

プッシュサーバーアドレスを設定するには、Udesk管理者アカウントでUdeskにログインし、「設定」 -> 「モバイルSDK」で設定を行ってください。

udesk

デバイスの 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プッシュの停止

Appがフォアグラウンドに移行する際、Udeskサーバーに通知し、以降のメッセージを開発者が提供するサーバーではなくSDKに送信するように依頼する必要があります。

開発者は AppDelegate.m のシステムコールバック applicationWillEnterForeground で、以下のコードのようにプッシュ停止およびメッセージ取得インターフェースを呼び出す必要があります:

- (void)applicationWillEnterForeground:(UIApplication *)application {

    // オンライン操作、オフラインメッセージの取得
    [UdeskManager setupCustomerOnline];
}

オフラインプッシュインターフェース要件

基本要件

パラメータ

メッセージまたはイベントが発生した場合、以下のデータがプッシュインターフェースに送信されます。

パラメータ名 タイプ 説明
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];
}

五、Udesk SDK API説明

注意:以下のインターフェースはUdeskオープンソースUIですべて呼び出されています。UdeskのオープンソースUIを使用する場合は、以下のいずれのインターフェースも呼び出す必要はありません。

5.1 ユーザー情報の更新

必要に応じてカスタマイズしてください。呼び出さなくてもメインプロセスには影響しません。

注意:

 UdeskCustomer *customer = [UdeskCustomer new];
 customer.sdkToken = sdk_token;
 customer.nickName = @"私はudeskテストです(いつでも私を閉じることができます)";
 customer.email = @"test@udesk.cn";
 customer.cellphone = @"18888888888";
 customer.customerDescription = @"私はテストです";

 UdeskCustomerCustomField *textField = [UdeskCustomerCustomField new];
 textField.fieldKey = @"TextField_390";
 textField.fieldValue = @"テスト";

 UdeskCustomerCustomField *selectField = [UdeskCustomerCustomField new];
 selectField.fieldKey = @"SelectField_455";
 selectField.fieldValue = @[@"1"];

 customer.customField = @[textField,selectField];

 [UdeskManager updateCustomer:customer];

5.2 Udeskサーバーとの接続を切断

ユーザーを切り替える際に、このインターフェースを呼び出して前の顧客の接続を切断します。

[UdeskManager logoutUdesk];

5.3 顧客をオンラインに設定

Udeskサーバーに接続した後、顧客はデフォルトでオンラインです。顧客をオフラインに設定した後、このインターフェースを呼び出すことで顧客を再度オンラインにすることができます。

[UdeskManager setupCustomerOnline];

5.4 顧客をオフラインに設定

顧客をオフラインに設定します。

[UdeskManager setupCustomerOffline];

5.5 顧客のローカルチャットデータを取得

[UdeskManager getHistoryMessagesFromDatabaseWithMessageDate:[NSDate date] messagesNumber:20 result:^(NSArray *messagesArray) {

}];

5.6 顧客のローカルチャットデータを削除

[UdeskManager removeAllMessagesFromDatabase];

5.7 未読メッセージ数を取得

開発者は、未読メッセージ数を表示する必要がある場合にこのインターフェースを呼び出すことができます。ユーザーがチャット画面に入ると、未読メッセージはゼロにリセットされます。

[UdeskManager getLocalUnreadeMessagesCount];

5.8 未読メッセージを取得

開発者は、未読メッセージを表示する必要がある場合にこのインターフェースを呼び出すことができます。ユーザーがチャット画面に入ると、未読メッセージはクリアされます。

[UdeskManager getLocalUnreadeMessages];

5.9 すべての未読メッセージを既読に設定

顧客の未読メッセージをリセットできます。

[UdeskManager markAllMessagesAsRead];

5.10 未読メッセージ受信のブロードキャストを監視

開発者は、適切な場所でメッセージ受信のブロードキャストを監視し、顧客に新しいメッセージがあることを通知するために使用できます。ブロードキャスト名は UD_RECEIVED_NEW_MESSAGES_NOTIFICATION で、UdeskManager.h で定義されています。

5.11 顧客がセッション中かどうかを判断

YES/NO を返します。NO が返された場合、ユーザーはセッション中ではありません。YES が返された場合、顧客はカスタマーサポートのチャットリストにいます。

BOOL isSession = [UdeskManager customersAreSession];

5.12 SDKは位置情報の送信をサポート

注:iOS8以降、開発者は位置情報機能を使用する前に、info.plist に以下を追加する必要があります(以下のいずれか1つを選択、両方追加した場合はデフォルトで NSLocationWhenInUseUsageDescription が使用されます):

NSLocationWhenInUseUsageDescription 、フォアグラウンド使用時にGPSを取得する許可の説明

NSLocationAlwaysUsageDescription 、永続的にGPSを使用する許可の説明

SDKはデフォルトで位置情報を送信できません。SDKに位置情報を送信させる必要がある場合

ネイティブ(SDK内部で位置情報の取得、送信、検索、表示を実装。Appleのネイティブマップコントロールを使用)

3.15を参照

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];
   };
};
//位置情報メッセージクリックコールバック(このコールバックを実装すると、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 defaultStyle] sdkConfig:sdkConfig sdkActionConfig:actionConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

六、よくある質問

キーボード表示後に入力フィールドとキーボードの間にずれが生じる

サードパーティ製のオープンソースライブラリIQKeyboardManagerを使用していないか確認してください。このライブラリは入力フィールド判定ロジックと競合する可能性があります。

指定したカスタマーサポートグループまたは担当者が、指定したグループの担当者と一致しない場合

まず、担当者がセッションを閉じていないことを確認してください。

当製品のロジックは以下の通りです: 顧客Aが、カスタマーサポートグループBに属する担当者B1を選択してセッションを開始したとします。その後、顧客Aがセッション画面を終了し、別の画面に移動し、その後カスタマーサポートグループCに属する担当者C1を通じてセッションが割り当てられた場合: バックエンドは、B1とのセッションがまだ存在するかどうかを判断します。存在する場合は、担当者C1ではなくB1に直接割り当てます。B1とのセッションが閉じられている場合にのみ、担当者C1に割り当てられます。

異なる顧客に割り当てられたセッションが1つのセッション内に表示される

この状況は、カスタマーサポートが渡すsdktokenの値が同じである場合に発生します。sdktokenは身分証明書のように、ユーザーを一意に識別するものです。顧客がSDK統合時に渡している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セッションページに入るとクラッシュし、クラッシュ情報に "xmlFreeDoc" と表示される

この状況が発生した場合は、使用している百度地図SDKのバージョンが3.4.2または6.0.0かどうかを確認してください。百度地図SDKを最新バージョンにアップグレードしてください。

アプリで友盟共有を使用しており、正常に遷移できない

友盟SDKを最新バージョンにアップグレードしてください。

カスタマーサポートからのメッセージ送信がずっと回転し続ける(送信できない)

SDKはバックグラウンドに移行した後、すぐにはオフラインにならないため、カスタマーサポートがメッセージを送信しても送信されず、SDKがオフラインになった後にのみオフラインメッセージとして送信されます。

アプリがバックグラウンドに移行する際に、以下のオフラインメソッドを明示的に呼び出すことができます。

[UdeskManager setupCustomerOffline];

アプリがフォアグラウンドに戻る際に、以下のオンラインメソッドを明示的に呼び出すことができます。

[UdeskManager setupCustomerOnline];

アプリで画面を回転させると、SDKのUIが適応しない問題

SDKは現時点で画面回転に対応したUI適応をサポートしていません。以下が解決策です。

UdeskSDKManager *chatViewManager = [[UdeskSDKManager alloc] initWithSDKStyle:[UdeskSDKStyle defaultStyle]];
// 縦画面を強制
chatViewManager.orientationMask = UIInterfaceOrientationMaskPortrait;
// 横画面を強制
//chatViewManager.orientationMask = UIInterfaceOrientationMaskLandscape;
[chatViewManager presentUdeskInViewController:self completion:nil];

H5ページで添付ファイルをアップロードできず、クリックすると直接前のページに戻る

  1. presentViewControllerを使用してメッセージページに遷移する

  2. dismissViewControllerAnimatedメソッドをオーバーライドする

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
    if ( self.presentedViewController)
    {
        [super dismissViewControllerAnimated:flag completion:completion];
    }
}
  1. dismissが必要なときに以下を呼び出す:
[super dismissViewControllerAnimated:flag completion:completion];

ワークベンチの顧客情報に表示されるアプリケーション名が正しくない

ワークベンチの顧客情報 - ソースに「不明」と表示される場合、Appのinfo.plistにCFBundleDisplayNameプロパティが設定されていないため、SDKがApp名を取得できない可能性があります。

SDKページに入れない

コンソールでUdeskを検索し、以下のような関連ログが見つかった場合

UdeskSDK.... One of the two will be used. Which one is undefined.....

以下のいずれかの方法を実行してください:

  1. cocoapodsのバージョンを1.5にダウングレードし、再度updateを実行する。

  2. プロジェクトのTargets->Build Settingsで「other linker flags」を検索する

「UdeskSDK」が2つ存在するか確認する

例:

-l"UdeskSDK"

-framework "UdeskSDK"

最初のものを削除し、再コンパイルする。

七、更新履歴

更新履歴:

SDK v4.3.3バージョンの更新内容:

  1. iOS14への対応

SDK v4.3.2バージョンの更新内容:

  1. UIWebViewの置き換え

SDK v4.3.1バージョンの更新内容:

  1. ファイルアップロードポリシーの修正

  2. ダークモードでの表示問題の修正


SDK v4.3.0バージョンの更新内容:

  1. YYWebImageの競合問題の修正

  2. カスタマーサポートのステータス問題の修正

  3. 多言語アプリケーション名の取得問題の修正

  4. 満足度評価の備考文字数の制限

  5. 既知の問題の修正


SDK v4.1.9バージョンの更新内容:

  1. YYWebImageの競合問題の修正

SDK v4.1.8バージョンの更新内容:

  1. タイ語メッセージが完全に表示されない問題の修正

SDK v4.1.7バージョンの更新内容:

  1. iOS13への対応

  2. 既知の問題の修正


SDK v4.1.6バージョンの更新内容:

  1. 画像ピッカーの混乱問題の修正

  2. 空メッセージの最適化

  3. 既知の問題の修正


SDK v4.1.5バージョンの更新内容:

  1. 無メッセージ会話フィルタが特定のシナリオで機能しない問題の修正

  2. SDKを使用した特定のカスタマーサポート/グループの指定が特定のシナリオで機能しない問題の修正


SDK v4.1.4バージョンの更新内容:

  1. 多言語サポート

  2. 安定性の最適化


SDK v4.1.3バージョンの更新内容:

  1. メッセージの最適化

SDK v4.1.2バージョンの更新内容:

  1. カスタマーサポート接続ロジックの最適化

  2. ビデオメッセージダウンロードの最適化

  3. 安定性の最適化


SDK v4.1.1バージョンの更新内容:

  1. 無メッセージ会話フィルタ画面で絵文字を送信した際にコードが表示される問題の修正

  2. 英語設定時にも中国語ポップアップが表示されることがある問題の修正


SDK v4.1.0バージョンの更新内容:

  1. ロボットの自動人間対応転送イベントのサポート

  2. iPhone Xs、XR、Xs Maxへの対応

  3. グローバル顧客一意性customer_tokenのサポート

  4. カスタムチャネルのサポート

  5. ロボット名の管理者バックエンド設定サポート

  6. 無メッセージ会話フィルタの最適化

  7. オフラインメッセージの表示時間を送信時間に最適化

  8. デフォルト絵文字の置き換え、新旧絵文字の互換性

  9. キューイングメッセージ送信のサポート

  10. 異なる端末間でのビデオメッセージ再生問題の修正

  11. カスタマーサポートの高速メッセージ送信によるSDK側メッセージ順序の乱れ問題の修正

  12. 複数画像選択送信による画像送信の不正確さ問題の修正

  13. 既知の問題の修正


SDK v4.0.6バージョンの更新内容:

  1. iOS12への対応

SDK v4.0.5バージョンの更新内容:

  1. 顧客情報更新のコールバックサポート

  2. 満足度調査UIのiPhone X対応

  3. ネットワークチェックコンポーネント「UdeskReachability」のクラッシュ修正


SDK v4.0.4バージョンの更新内容:

  1. メッセージの最適化

  2. 評価結果エラー問題の修正

  3. 満足度評価でのサードパーティ入力法による送信ボタン隠れ問題の修正

  4. SDKカメラ権限プロンプトの最適化

  5. SDK満足度タグ選択後、キーボード表示/非表示時にタグ選択マークが消える問題の修正


SDK v4.0.3バージョンの更新内容:

  1. キューイングから直接メッセージページに入る問題の修正

  2. 満足度評価備考必須入力問題の修正


SDK v4.0.2バージョンの更新内容:

  1. 接続の最適化

  2. 直接メッセージができない問題の修正

  3. 直接メッセージのテキストが表示されてすぐ消える問題の修正

  4. 無メッセージ会話フィルタで自動メッセージが受信できない問題の修正


SDK v4.0.1バージョンの更新内容:

  1. 商品メッセージのサポート

  2. 既知の問題の修正


SDK v4.0.0バージョンの更新内容:

  1. 新版満足度調査のサポート

  2. カスタムボタンのサポート

  3. 無メッセージ会話フィルタのサポート

  4. 強制画面回転のサポート

  5. バックエンド設定によるメッセージガイドテキストのサポート

  6. ショートビデオ撮影のサポート

  7. 画像選択の最適化

  8. カスタム絵文字パックのサポート

  9. ロボット推奨問題設定のサポート

  10. ロボット会話x件後に転送ボタンを表示する設定のサポート

  11. 自動メッセージ送信のサポート


SDK v3.9.2バージョンの更新内容:

  1. リッチテキストメッセージ受信時にクラッシュする可能性がある問題の修正

SDK v3.9.1バージョンの更新内容:

  1. チケットページ、位置情報ページのiPhone X対応

  2. チケットページ、位置情報ページの白線問題の処理

  3. カスタマーサポートグループ割り当て問題の修正

  4. 導入されたサードパーティフレームワークの列挙型競合の修正


SDK v3.9バージョンの更新内容:

  1. メッセージ到達率の最適化

  2. SDKでのビデオ通話のサポート


SDK v3.8.7バージョンの更新内容:

  1. メッセージテキストURLクリックコールバックインターフェースの追加

  2. .searchController呼び出しによるクラッシュ問題の修正

  3. メッセージフォームに入った際のユーザーデフォルトデータ自動入力問題の修正


SDK v3.8.6バージョンの更新内容:

  1. ロボットページのiPhone X対応

  2. キュー放棄の最適化

  3. テキスト入力改行時のUI問題の解決

  4. 撮影画像が大きすぎて表示が乱れる問題の修正


SDK v3.8.5バージョンの更新内容:

  1. 満足度調査ポップアップ表示バグの修正

SDK v3.8.4バージョンの更新内容:

  1. バックエンド設定取得失敗時のリトライメカニズムの追加

  2. iPhone Xへの対応

  3. システムアルバムキャンセルボタン色設定パラメータの追加


SDK v3.8.3バージョンの更新内容:

  1. 非稼働時間にSDKで直接メッセージが失敗する問題の修正

  2. ビデオ再送信問題の修正


SDK v3.8.2バージョンの更新内容:

  1. iOS11ナビゲーションバーボタン位置ずれ問題の修正

SDK v3.8.1バージョンの更新内容:

  1. sdk_tokenの特殊文字によるメッセージ保存不能問題の修正

SDK v3.8バージョンの更新内容:

  1. SDKでの位置情報送信のサポート(ネイティブとAPI形式)

  2. ウェルカムメッセージでの電話番号・URL認識サポート

  3. podインポート時の言語切り替え問題の解決

  4. APPネットワーク切り替え時にSDKがカスタマーサポートに伝わらない問題の修正


SDK v3.7.1バージョンの更新内容:

  1. ウェルカムメッセージ空白バグの修正

  2. 時間表示バグの修正

  3. 特定カスタマーサポート・グループ割り当てバグの修正

  4. podインポートとYYWebimage競合の修正

  5. 入力欄機能ボタンの設定可能化

  6. iOSバージョンに応じたWKWebview/UIWebview切り替え


SDK v3.7バージョンの更新内容:

  1. オフライン直接メッセージのサポート

  2. SDKでの満足度調査返却と設定スイッチのサポート

  3. SDKでのGIF送受信のサポート

  4. SDKでのビデオ送受信のサポート

  5. SDKでのカスタマーサポートメッセージ取り消しのサポート


SDK v3.6.4バージョンの更新内容:

  1. カスタマーサポートセッション終了後のユーザーメッセージ送信再接続メカニズム

  2. メッセージポップアップテキストバグの修正


SDK v3.6.3バージョンの更新内容:

  1. カスタムフィールド呼び出し方法の最適化

  2. ウェルカムメッセージバグの修正


SDK v3.6.2バージョンの更新内容:

  1. IMページ戻りコールバックAPIの追加

  2. 録音の最適化


SDK v3.6.1バージョンの更新内容:

  1. 満足度調査複数回ポップアップバグの修正

  2. カスタマーサポート繁忙時からオンライン時のSDKポップアップ自動非表示


SDK v3.6バージョンの更新内容:

  1. 構造化メッセージ表示のサポート

  2. 管理者側ブラックリストメッセージプロンプトテキストのカスタマイズサポート


SDK v3.5.8バージョンの更新内容:

  1. メッセージへの添付ファイル追加サポート

  2. メッセージページ遷移方式イベントロジックの修正

  3. プッシュ例

  4. バグ修正


SDK v3.5.7バージョンの更新内容:

  1. bitcodeのサポート

SDK v3.5.6バージョンの更新内容:

  1. 入力欄への大量テキストコピーによるクラッシュの修正

SDK v3.5.5バージョンの更新内容:

  1. 未読メッセージを既読にするサポート

  2. セッション終了後満足度調査が表示されない可能性がある問題の修正


SDK v3.5.4バージョンの更新内容:

  1. iOS10.3への対応

SDK v3.5.3バージョンの更新内容:

  1. 管理者側SDK設定のサポート

  2. キュー放棄のサポート

  3. 初期化でシングルサインオンキーをサポートせず、各アプリ作成時に生成されるappidとappkeyに統一。


SDK v3.4バージョンの更新内容:

  1. プッシュのサポート

  2. マルチアプリのサポート

  3. 顧客がセッション中か確認するAPIの追加

  4. 満足度調査バグの修正


SDK v3.3.4バージョンの更新内容:

  1. アルバム、音声権限フローの最適化

  2. 転送の最適化


SDK v3.3.3バージョンの更新内容:

  1. アクティブ満足度調査のサポート

  2. pushインターフェース完了コールバックの追加

  3. テキストが多い場合の計算バグ修正

  4. httpsのサポート

八、機能スクリーンショット

以下はSDKの一部機能のスクリーンショットです

商品メッセージ

udesk

相談対象

udesk

カスタム絵文字

udesk

カスタムボタン

udesk

位置情報とビデオメッセージ

udesk