接続方法

原理:お客様のページ上で特定のリンクをクリックし、マルチマーチャントチャットページに遷移します。

リンクのアドレス:https://mchat.udesk.cn/web_client/index.html

この後ろにいくつかのパラメータを付ける必要があります。以下はパラメータのリストです。

パラメータ名 説明 必須かどうか
customer_euid 顧客euid、お客様が指定します。英数字とアンダースコアのみ使用可能です。 はい
customer_name 顧客名、お客様が指定します。 はい
merchant_euid マーチャントID はい
tenant_id プラットフォームID はい
language 多言語パラメータ、詳細は以下を参照してください。 いいえ
product_title 相談対象のタイトル いいえ
product_title_style 相談対象のタイトルのスタイル、例:color:rgb(0,0,255);font-weight:bold いいえ
product_url 相談対象のリンク いいえ
product_image 相談対象の画像 いいえ
product_その他 相談対象のその他の情報、「その他」の部分は任意の文字に置き換え可能です。 いいえ
product_その他_style 相談対象のその他の情報のスタイル、「その他」の部分は任意の文字に置き換え可能です。例:color:rgb(0,0,255);font-weight:bold いいえ
page 値がdetailの場合、チャットインターフェースが直接表示されます。 いいえ
show_back モバイルブラウザで戻るボタンを表示するかどうか。戻るボタンをクリックすると、チャットインターフェースからマーチャント一覧ページに遷移します。 いいえ
product_send リンク送信ボタンを表示します。値が true の場合に表示されます。 いいえ

また、カスタマー定義パラメータもサポートしています。サポートされているカスタムパラメータは以下の通りです。

パラメータ名 説明 必須かどうか
c_name 顧客名 いいえ
c_email 顧客メールアドレス、一意の値、異なる顧客間で重複は許可されません。 いいえ
c_phone 顧客電話番号、一意の値、異なる顧客間で重複は許可されません。 いいえ
c_tags 顧客タグ、顧客タグを渡します。カンマで区切ります。例:"ハンサム、きれい" いいえ
c_desc 顧客説明 いいえ
c_org 会社名 いいえ
カスタマーカスタムフィールドID カスタマーサポートシステムの顧客フィールドを参照してください。例:SelectField_1 いいえ
## > クライアント多言語設定 -詳細

多言語設定から既に設定されている多言語言語コードを検索

多言語機能はUdeskに個別にお問い合わせください

管理 -> アカウント設定 -> 多言語サポート

言語名 ファイル名 言語コード 更新日時 操作
English reocar_language_translation(en-us).xlsx en-us 2017/08/23 14:30 ファイルダウンロード ファイルアップロード 更新

設定された言語コード en-us を language パラメータとして選択します。フランス語を使用する場合は、まずフランス語の多言語を設定し、多言語サポートリストの 法语配置记录 の言語コードを使用してください。

zh-cn (簡体字中国語) はすでにシステムデフォルトであり、直接使用できます。多语言支持 で設定する必要はありません。

language に 多语言支持列表 で設定されていない言語コードパラメータが渡された場合、デフォルトの簡体字中国語が使用されます。

フロントエンドの静的リソース内の表示内容は現在、簡体字中国語とEnglishをサポートしており、カスタム言語翻訳はサポートしていません。より多くの言語をサポートする必要がある場合は、お問い合わせください。

多言語言語コード設定規定

言語コードは以下のリストから選択する必要があります:

設定したい多言語言語コードが以下のリストにない場合は、Udeskにお問い合わせください。

言語名 言語コード
アラビア語 ar
English en-us
スペイン語 es
フランス語 fr
日本語 ja
朝鮮語/韓国語 ko
タイ語 th
繁体字中国語 zh-TW
ポルトガル語 pt
ロシア語 ru

URL構築による接続

ページ上に <a> タグを作成します。

<a href="https://mchat.udesk.cn/web_client/index.html?language=zh-cn&customer_euid=xxx&customer_name=xxx&merchant_euid=xxx&tenant_id=xxx&product_title=xxx&product_url=http://xxx.com&product_image=http://xxx.com/xxx.jpg&product_%E4%BB%B7%E6%A0%BC=%EF%BF%A5100&product_%E5%85%B6%E4%BB%96=xxx" target="_blank">お問い合わせ</a>

提供されたJSによる接続

以下のコードを </body> の前にコピーしてください。パラメータはパラメータリストの説明に従って正しい値に置き換えてください。

<script>
  window.udesk_config = {
    'customer_euid':'xxx',
    'customer_name':'xxx',
    'merchant_euid':'xxx',
    'tenant_id':'xxx',
    'product_title':'xxx',
    'product_url':'http://xxx.com',
    'product_image':'http://xxx.com/xxx.jpg',
    'product_価格':'¥100',
    'product_その他':'xxx',
    'page':'detail'  // このパラメータがあると直接チャット画面に入ります
  }

  (function(u, d) {
    var script = d.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', 'https://mchat.udesk.cn/web_client/client-entry.js');
    d.body.appendChild(script);
  })(window, window.document);
</script>

Android SDKの導入

1. multichatのインポート

  // ルートのbuild.gradleファイル(モジュールのbuild.gradleファイルではありません)に以下を追加します:

    allprojects {
  repositories {
        maven { url "https://jitpack.io" }
    }
   }

2. クイックスタート

1 初期化

セキュリティ上の理由から、テナントはキーを自社のサーバー側に保存し、アプリ側はテナントが提供するインターフェースを通じてSHA1で計算された暗号化文字列(sign)とタイムスタンプ(timestamp)を取得することをお勧めします。タイムスタンプは秒単位で正確にし、SDKに渡します。パスワードの有効期限はタイムスタンプの +/- 5分です。

SHA1("テナントuuid+テナントkey+タイムスタンプ") 暗号化文字列の形式

注意:

String uuid テナントID、Udeskバックエンドシステムから取得

String timestamp タイムスタンプ、お客様のバックエンドで生成

String sign 署名、お客様のバックエンドで生成

customer_euid ユーザーIDはユーザーの一意の識別子です。重複せず、数字、英字、数字+英字のみを使用してください。

UdeskSDKManager.getInstance().init(content, uuid, sign, time);

UdeskSDKManager.getInstance().setCustomerInfo(customer_euid, customer_name);

備考:署名生成ルール:お客様のサーバー側で署名を計算し、対応するパラメータを返すインターフェースを提供することをお勧めします。

データ名 説明
uuid Udeskバックエンドから提供
secret Udeskバックエンドから提供
timestamp 秒単位で正確なタイムスタンプを取得

sign = SHA1("uuid+secret+timestamp")

2 顧客が商品詳細ページから問い合わせボタンをクリックして直接カスタマーサポートとセッションを開始

  // セッションに入るときに問い合わせ対象を設定できます(オプション)
 // 問い合わせ商品を設定する例は以下の通り:
private void createProducts() {
    Products products = new Products();
    Products.ProductBean productBean = new Products.ProductBean();
    productBean.setImage("http://img14.360buyimg.com/n1/s450x450_jfs/t3157/63/1645131029/112074/f4f79169/57d0d44dN8cddf5c5.jpg?v=1483595726320");
    productBean.setTitle("Apple iPhone 7");
    productBean.setUrl("http://item.jd.com/3133829.html?cu=true&amp;utm_source…erm=9457752645_0_11333d2bdbd545f1839f020ae9b27f14");
    List<Products.ProductBean.ExtrasBean> extras = new ArrayList<>();

    Products.ProductBean.ExtrasBean extrasBean = new Products.ProductBean.ExtrasBean();
    extrasBean.setTitle("価格");
    extrasBean.setContent("¥6189.00");

    extras.add(extrasBean);
    productBean.setExtras(extras);
    products.setProduct(productBean);

    UdeskSDKManager.getInstance().setProducts(products);

}

// 問い合わせ対象の表示が不要な場合 UdeskSDKManager.getInstance().setProducts(null);

// 加盟店IDで、加盟店に問い合わせ // merchantId 加盟店ID UdeskSDKManager.getInstance().entryChat(content, merchantId);

// 過去の対話加盟店リストを提供し、ConversationFragmentを提供します。お客様のアプリに組み込むことができます。デモを参照してください。

3. 履歴会話の事業者リストを取得


 //履歴会話の事業者リストを提供します。ConversationFragmentを提供しており、アプリに組み込むことができます。デモを参照してください。

4. 指定された事業者の未読メッセージを取得


  UdeskSDKManager.getInstance().getMerchantUnReadMsg(merchant_euid,merchantUnreadMsgCnt)

5. すべての事業者の未読メッセージを照会


    UdeskSDKManager.getInstance().setItotalCount(new ItotalUnreadMsgCnt() {
                @Override
                public void totalcount(final int count) {

                }
            });
    UdeskSDKManager.getInstance().getUnReadMessages();

6. オンライン状態でのメッセージ受信リスナーイベントを設定


       UdeskSDKManager.getInstance().setMessageArrived(new IMessageArrived() {
                @Override
                public void onNewMessage(final ReceiveMessage receiveMessage) {

                }
            });

7. 商品オブジェクトのコールバックを設定


        UdeskSDKManager.getInstance().setCommodityCallBack(new ICommodityCallBack() {
                @Override
                public void callBackProduct(Products products) {


                }
            });

8. 商品情報を設定

商品情報の属性は ProductMessage クラスに格納されています。


public class ProductMessage implements Serializable {


    /**
     * name :  Apple iPhone X (A1903) 64GB 深空灰色 移動通信4G携帯電話
     * url : https://item.jd.com/6748052.html
     * imgUrl : http://img12.360buyimg.com/n1/s450x450_jfs/t10675/253/1344769770/66891/92d54ca4/59df2e7fN86c99a27.jpg
     * params : [{"text":"¥6999.00","color":"#FF0000","fold":false,"break":false,"size":12},{"text":"1999元以上購入で30円追加"}]
     */

    /**
     * 商品名
     */
    private String name;
    /**
     * 商品リンク(新しいページで表示)、値が空の場合はクリックできません
     */
    private String url;
    /**
     * 商品画像を表示するURL
     */
    private String imgUrl;

    /**
     * パラメータリスト
     */
    private List<ParamsBean> params;


  public static class ParamsBean {
        /**
         * text : ¥6999.00
         * color : #FF0000
         * fold : false
         * break : false
         * size : 12
         */

        /**
         * パラメータテキスト
         */
        private String text;
        /**
         * パラメータの色値、16進数値の色として指定します
         */
        private String color;

        /**
         * 太字にするかどうか
         */
        private boolean fold;
        /**
         * 改行するかどうか
         */
        @SerializedName("break")
        private boolean breakX;
        /**
         * フォントサイズ
         */
        private int size;



    使用方法はデモを参照できます :
    1 会話画面に直接入った後、商品情報を設定して渡します :
     // 会話画面に直接入った後、商品情報を設定して渡します
         UdeskSDKManager.getInstance().setProducts(products);


    2 ナビゲーションバーを使用して商品メッセージを送信します:
      UdeskConfig.isUseNavigationView = true;
            UdeskSDKManager.getInstance().setNavigationModes(getNavigations());
            UdeskSDKManager.getInstance().setNavigationItemClickCallBack(new INavigationItemClickCallBack() {
                @Override
                public void callBack(Context context, ChatActivityPresenter mPresenter, NavigationMode navigationMode) {
                    if (navigationMode.getId() == 1) {
                        mPresenter.sendProductMessage(createProduct());
                    }
                }
            });

    private List<NavigationMode> getNavigations() {
      List<NavigationMode> modes = new ArrayList<>();
      NavigationMode navigationMode1 = new NavigationMode("商品メッセージを送信", 1);
      modes.add(navigationMode1);
      return modes;
    }

9. オフラインプッシュ通知


// アプリがバックグラウンドに入った時、Udeskのプッシュ通知を有効にする

UdeskSDKManager.getInstance().setCustomerOffline(false) を呼び出す。

application で registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks activityLifecycleCallbacks)を使用して、すべてのフォアグラウンド/バックグラウンドのロジックを制御することを推奨します。

10. ログアウト時にxmpp接続を切断


// ログアウト時に xmpp 接続を切断する

UdeskSDKManager.getInstance().logout();

11. 画像アップロード圧縮設定


     UdeskConfig クラス内で
    // 画像アップロード時にオリジナル画像を使用するか、サムネイルを使用するか
    public static  boolean isScaleImg = true;

    // サムネイルの最大幅・高さを設定。この値を超える場合は圧縮し、超えない場合は圧縮しない
    public static  int ScaleMax = 1024;

12. 難読化設定

// udesk
-keep class udesk.** {*;}
-keep class cn.udesk.**{*; }

// oss
-keep com.alibaba.sdk.**{*; }
-keep com.google.gson.**{*; }
-keep org.jxmpp.**{*; }
-keep  de.measite.minidns.**{*; }

// eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# AsyncExecutor を使用する場合のみ必要
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

// smack
-keep class org.jxmpp.** {*;}
-keep class de.measite.** {*;}
-keep class org.jivesoftware.** {*;}
-keep class org.xmlpull.** {*;}
-dontwarn org.xbill.**
-keep class org.xbill.** {*;}

// retrofit2

# プラットフォームは、Android上に存在しない型に対してClass.forNameを呼び出し、プラットフォームを決定します。
-dontnote retrofit2.Platform
# Java 8 VMで実行する場合に使用されます。実行時には使用されません。
-dontwarn retrofit2.Platform$Java8
# コンバータとアダプタによるリフレクションで使用するために、ジェネリック型情報を保持します。
-keepattributes Signature
# Proxyインスタンスで使用するために、宣言されたチェック例外を保持します。
-keepattributes Exceptions



// eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# AsyncExecutor を使用する場合のみ必要
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

// glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}

# DexGuard のみ
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule

-keep class com.github.chrisbanes.** {*;}

-dontwarn okio.**
-dontwarn com.squareup.okhttp.**
-dontwarn okhttp3.**
-dontwarn javax.annotation.**
-dontwarn com.android.volley.toolbox.**
-dontwarn com.facebook.infer.**


 // その他
-keep class com.tencent.bugly.** {*; }

iOS SDK導入

SDKダウンロード先

https://github.com/udesk/udesk_mchat_ios

一、SDKの統合

互換性

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

SDKのインポート

1.1 依存ライブラリの導入
1.2 注意事項
<key>NSCameraUsageDescription</key>

<string>Appがカメラへのアクセスを必要としています</string>

<key>NSMicrophoneUsageDescription</key>

<string>Appがマイクへのアクセスを必要としています</string>

<key>NSPhotoLibraryAddUsageDescription</key>

<string>Appが画像を追加するためにアルバムへのアクセスを必要としています</string>

<key>NSPhotoLibraryUsageDescription</key>

<string>Appがアルバムへのアクセスを必要としています</string>

二、クイックスタート

‘ #import ’ をインポートします。

AppDelegate、またはログイン成功後にSDKを初期化します。

署名生成ルール:
セキュリティ上の理由から、テナントはキーを自社のサーバー側で保存し、App側はテナントが提供するインターフェースを介してSHA1で計算された暗号化文字列(sign)とタイムスタンプ(timestamp)を取得することをお勧めします。タイムスタンプは秒単位の精度とし、それをSDKに渡します。パスワードの有効期限はタイムスタンプ +/- 5分です。 SHA1("テナントuuid+テナントkey+タイムスタンプ") 暗号化文字列の形式
データ名 説明
uuid Udesk管理画面で提供
secret Udesk管理画面で提供
timestamp 秒単位の精度のタイムスタンプを取得
sign = SHA1("uuid+secret+timestamp")
// SDKの初期化(UUID、timestamp、sign はすべて必須フィールドです!!!)
UMCSystem *system = [UMCSystem new];
system.UUID = @"a04d138d-98fb-4b9d-b2a7-478b7c0c1ce9";
system.timestamp = @"timestamp";
system.sign = @"sign";

UMCCustomer *customer = [UMCCustomer new];
customer.euid = @"euid"; // 必須フィールド!!!
customer.name = @"name"; // 必須フィールド!!!

// 任意フィールド
customer.cellphone = @"13888888888";
customer.email = @"test@udesk.cn";
customer.org = @"org";
customer.tags = @"テスト1,テスト2";
customer.customerDescription = @"ユーザー説明";
customer.customField = @{
  @"TextField_34012":@"テスト",
  @"SelectField_533":@[@(1)],
};

[UMCManager initWithSystem:system customer:customer completion:^(NSError *error) {
    NSLog(@"%@",error);
}];
パラメータ名 必須かどうか 説明
UUID NSString はい 貴社がUdeskマルチテナントシステムに登録した際、管理画面で割り当てられたID
timestamp、sign NSString はい タイムスタンプ、署名。お客様のバックエンドから返却されます。
euid NSString はい ユーザーの一意の識別子。身元を識別するために使用されます。お客様が生成して当社に渡すものです。渡す文字は、英字/数字などの一般的な文字セットを使用してください。ちょうど身分証のように、1つの身分証番号が複数の人に対応したり、1人が複数の身分証番号を持ったりすることは許可されません。また、顧客にメールアドレスや携帯電話番号を設定する場合、異なる顧客に対応する電話番号やメールアドレスが同じにならないようにしてください。同じものが出現した場合、新しい顧客は作成されません。
name NSString はい ユーザーニックネーム
email NSString いいえ ユーザーのメールアドレス。メールアドレスのルールに厳密に従ってください。ない場合は記入しないでください!空にしないでください!固定値にしないでください!適当に入力しないでください!
cellphone NSString いいえ ユーザーの電話番号。電話番号のルールに厳密に従ってください。ない場合は記入しないでください!空にしないでください!固定値にしないでください!適当に入力しないでください!
org NSString いいえ 会社名
tags NSString いいえ ユーザータグ。カンマで区切ります。例:"ハンサム,きれい"
customerDescription NSString いいえ ユーザー説明
customField NSDictionary いいえ ユーザー定義フィールド

適切な場所に加盟店リストViewを追加します。

UMCMerchantsView *merchats = [[UMCMerchantsView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) sdkConfig:[self getConfig]];
[self.view addSubview:merchats];

- (UMCSDKConfig *)getConfig {

    UMCSDKConfig *config = [UMCSDKConfig sharedConfig];

    UMCSDKStyle *styly = [UMCSDKStyle defaultStyle];
    config.sdkStyle = styly;

    return config;
}

チャットページに移動します。

UMCSDKManager *sdkManager = [[UMCSDKManager alloc] initWithMerchantId:@"加盟店ID"];
sdkManager.sdkConfig = [UMCSDKConfig sharedConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

三、カスタム設定

3.1 問い合わせ対象

顧客が商品詳細ページから問い合わせボタンをクリックして、直接カスタマーサポートとセッションを開始します。

UMCSDKManager *sdkManager = [[UMCSDKManager alloc] initWithMerchantId:@"マーチャントID"];
sdkManager.sdkConfig = [self getConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

- (UMCSDKConfig *)getConfig {

    UMCSDKConfig *config = [UMCSDKConfig sharedConfig];

#warning ここでは単一商品の問い合わせ対象を固定値で設定しています。実際の開発では要件に応じてカスタマイズしてください。
    UMCProduct *product = [[UMCProduct alloc] init];
    product.title = @"iPhone X";
    product.image = @"https://g-search3.alicdn.com/img/bao/uploaded/i4/i3/1917047079/TB1IfFybl_85uJjSZPfXXcp0FXa_!!0-item_pic.jpg_460x460Q90.jpg";
    product.url = @"http://www.apple.com/cn";

    UMCProductExtras *extras = [[UMCProductExtras alloc] init];
    extras.title = @"タイトル";
    extras.content = @"¥9999";

    product.extras = @[extras];

    config.product = product;

    UMCSDKStyle *styly = [UMCSDKStyle defaultStyle];
    config.sdkStyle = styly;

    return config;
}

3.2 商品メッセージ

UMCSDKManager *sdkManager = [[UMCSDKManager alloc] initWithMerchantId:@"マーチャントID"];
sdkManager.sdkConfig = [self getConfig];
[sdkManager pushUdeskInViewController:self completion:nil];

- (UMCSDKConfig *)getConfig {

    UMCSDKConfig *config = [UMCSDKConfig sharedConfig];

    UMCCustomButtonConfig *customButton = [[UMCCustomButtonConfig alloc] initWithTitle:@"カスタムボタン" clickBlock:^(UMCCustomButtonConfig *customButton, UMCIMViewController *viewController){

        //カスタムボタンクリック時のコールバック
        //この例では、コールバック内で直接商品メッセージを送信しています。開発者は自身の要件に応じて変更できます。
        [viewController sendGoodsMessageWithModel:[self getGoodsModel]];
    }];

    config.showCustomButtons = YES;
    config.customButtons = @[customButton];

    UMCSDKStyle *styly = [UMCSDKStyle defaultStyle];
    config.sdkStyle = styly;

    return config;
}

- (UMCGoodsModel *)getGoodsModel {

    UMCGoodsModel *goodsModel = [[UMCGoodsModel alloc] init];
    goodsModel.goodsId = @"12";
    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";

    UMCGoodsParamModel *paramModel1 = [UMCGoodsParamModel new];
    paramModel1.text = @"¥6999.00";
    paramModel1.color = @"#FF0000";
    paramModel1.fold = @(1);
    paramModel1.udBreak = @(1);
    paramModel1.size = @(14);

    UMCGoodsParamModel *paramModel2 = [UMCGoodsParamModel new];
    paramModel2.text = @"1999元以上購入で30円追加";
    paramModel2.color = @"#c2fcc3";
    paramModel2.fold = @(1);
    paramModel2.size = @(12);

    UMCGoodsParamModel *paramModel3 = [UMCGoodsParamModel new];
    paramModel3.text = @"ただし、最初に100円値上げします";
    paramModel3.color = @"#ffffff";
    paramModel3.fold = @(1);
    paramModel3.size = @(20);

    goodsModel.params = @[paramModel1,paramModel2,paramModel3];

    return goodsModel;
}

3.3 カスタムボタン

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

//ボタンは「その他」メニュー内に配置
UMCCustomButtonConfig *buttonConfig2 = [[UMCCustomButtonConfig alloc] initWithTitle:@"カスタムボタン2" clickBlock:^(UMCCustomButtonConfig *customButton, UMCIMViewController *viewController) {
        //何らかの処理を実行
      //UdeskChatViewController にはメッセージを送信するメソッドがあります。
}];
buttonConfig2.type = UMCCustomButtonTypeInMoreView;

UMCSDKConfig *config = [UMCSDKConfig sharedConfig];
config.showCustomButtons = YES;
config.customButtons = @[buttonConfig1,buttonConfig2];

UMCSDKStyle *style = [UMCSDKStyle defaultStyle];
config.sdkStyle = style;

//直接チャットページに遷移
UMCSDKManager *sdkManager = [[UMCSDKManager alloc] initWithMerchantEuid:@"merchantEuid"];
sdkManager.sdkConfig = config;
[sdkManager pushUdeskInViewController:self completion:nil];

//マーチャントリストページに遷移
//UMCMerchantsView *merchats = [[UMCMerchantsView alloc] initWithFrame:self.view.bounds sdkConfig:config];
//[self.view addSubview:merchats];

四、オフラインプッシュ通知

//deviceTokenを取得(注意:サードパーティのプッシュサービスを使用している場合は、サードパーティ独自のIDを渡す必要があります)
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [UMCManager registerDeviceToken:deviceToken];
}

//アプリがバックグラウンドに入った時、Udeskプッシュを停止
- (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), ^{

        //要件に応じて 通知を 開始/停止
        [UMCManager startUdeskMChatPush];
    });
}

//アプリがフォアグラウンドに入った時、Udeskプッシュを開始
- (void)applicationWillEnterForeground:(UIApplication *)application {
        [UMCManager endUdeskMChatPush];
}

五、インターフェース説明

5.1 メッセージ受信デリゲート

// 現在のクラスをデリゲートとして追加
[[UMCDelegate shareInstance] addDelegate:self];
// メッセージ受信メソッドを実装
- (void)didReceiveMessage:(UMCMessage *)message {
    NSLog(@"%@",message);
}

// デリゲートを削除
[[UMCDelegate shareInstance] removeDelegate:self];

5.2 未読メッセージコールバック

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(msgUnreadCountHasChange:) name:UMC_UNREAD_MSG_HAS_CHANED_NOTIFICATION object:nil];

- (void)msgUnreadCountHasChange:(NSNotification *)notif {
    [UMCManager merchantsUnreadCountWithEuid:nil completion:^(NSInteger unreadCount) {

        UINavigationController *nav = self.tabBarController.viewControllers[1];
        nav.tabBarItem.badgeValue = [NSString stringWithFormat:@"%ld",unreadCount];
        if (unreadCount == 0) {
            nav.tabBarItem.badgeValue = nil;
        }
    }];
}

その他のAPIはUMCManager.hを参照してください

六、更新履歴

更新履歴:

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

  1. ナビゲーションメニューをサポート

  2. より多くの顧客情報をサポート

  3. ファイル送信をサポート


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

  1. サードパーティフレームワークのプライベート化

  2. プッシュ通知をサポート

  3. カスタムボタンをサポート

  4. 複数店舗のキュー放棄およびオフライン顧客検出メカニズム


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

  1. 一部の絵文字をサポート