このユーザーガイドでは、ストーリーボードUIにAlli iOS SDKを統合する方法について説明します。 Alli SDKにはiOS 10以降が必要です。

Step 1. SDKをダウンロードして解凍します

  1. Alliダッシュボードにログインして、設定メニューに進みます。 下にスクロールしてiOS SDKのダウンロードを見つけ、SDKをダウンロードします。
  2. ファイルを解凍すると、フォルダー内に次のファイルが表示されます。

Step 2. SDKをプロジェクトに追加します

  1. XcodeのProject Navigatorでプロジェクトアイコンを右クリックします。
  2. [アプリにファイルを追加]ボタンをクリックします。 ダイアログが表示されます。
  3. AlliFrameworkフォルダーを選択します。
  4. ”Destination:[必要に応じてアイテムをコピー]"の✔をオンにします。
  5. ダイアログの内容が下記キャプチャーのようになっていることを確認し、[追加]ボタンをクリックします

Step 3.埋め込みバイナリ、フレームワーク、ライブラリを追加します

  1. Project Navigatorでプロジェクトアイコンをクリックします。
  2. 全般 > [フレームワーク、ライブラリ、および埋め込みコンテンツ]に移動し、Alli Framework.frameworkを[署名なしで埋め込み]に設定します。
  3. ビルドフェーズ > [ライブラリとバイナリをリンク]および[埋め込みフレームワーク]を確認します。 AlliFramwork.frameworkが追加されていることを確認してください。

Steps 4. Info.plistで権限を指定します

AlliFramework.frameworkフォルダーのinfo.plistファイルを開き、情報プロパティリストの横にある「+」記号をクリックします。 ドロップダウンリストを[プライバシー]オプションまでスクロールし、カメラにアクセスするための[プライバシーカメラ使用法の説明]またはフォトライブラリにアクセスするためのプライバシーフォトライブラリ使用法の説明を選択します。
これにより、ユーザーは領収書ファイルまたは製品画像をチャットにアップロードできます。

選択した後、右側の文字列値を入力して、警告ポップアップが許可を求めたときにユーザーに表示するテキストを含めます。

Step 5. Alli SDKを初期化する

1.アプリケーションのデリゲートクラスファイルViewController.swiftの先頭に「import AlliFramework」を追加します。 これにより、Alliフレームワークにプロジェクトからアクセスできるようになります。
2. ViewControllerに以下を追加して、APIキーでAlliライブラリを初期化します。

  var alli: Alli?
  override func viewDidLoad() {
    // showHeader - optional, default: true, If you want to remove the header, turn off this option.
    // showFooter - optional, default: true, If you want to remove the footer, turn off this option.
    // showBackButton - optional, default: true, If you want to remove the back button on the header, turn off this option.
    alli = Alli("YOUR_API_Key", eventHandler: self, showHeader: true, showFooter: true, showBackButton: false)
  }

You can find your API Key by selecting “Settings” (gear icon) from the left navigation:

APIキーは、左側のナビゲーションから[設定](歯車アイコン)をクリックし、プロジェクト設定ページより取得ができます。

Step 6. チャットウィンドウを作成する


チャットウィンドウを作成して顧客との会話を開始するには、次の呼び出しを行います。

alli!.event(userId:"YOUR_userId", placement:"YOUR_placement", view:parentView)

ビューコントローラーにAlliチャットウィンドウを実装し、親ビューコントローラーをデリゲートプロパティとして割り当てる必要があります。 この呼び出しに渡されるViewControllerが最上位のビューであり、他のビューに遮られないことが非常に重要です。
親ビューには、最小の高さと幅が必要です。

Step 7: Alliイベントを処理するデリゲートメソッド

次のデリゲートメソッドは、チャットの会話ステータスに関するフィードバックを提供します。

import WebKit

public protocol AlliEventHandler {
    // Called when initialized successfully. 
    // You may receive NOT_INITIALIZE_YET error if 
    // called before this event.
    func onInitialized(_ view:WKWebView!)

    // Called when chat started successfully.
    func onConversationStarted(_ view: WKWebView!, userId: String, placement: String, context: Any?)

    // Called when conversation did not start 
    // even when Alli.event was called.
    func onConversationNotStarted(_ view: WKWebView!, userId: String, placement: String, context: Any?)

    // Called when user has closed the chat 
    // window or Alli.close() is called.
    func onConversationStopped(_ view: WKWebView!, userId: String, placement: String, context: Any?)

    func onError(_ view: WKWebView!, errorCode: AlliErrorCode, userId:String?, placement:String?, context:Any?)
  }

Step 8: チャットインターフェースを表示する

デフォルトでは、会話が行われていない場合はチャットウィンドウを非表示に設定する必要があります。

  func onConversationStopped(_ view: WKWebView!, userId: String, placement: String, context: Any?) {
  	parentView.isHidden = true
  }

AlliEventHandler.onConversationStartedイベントを受け取ったら、チャットウィンドウを表示に変更します。

  func onConversationStarted(_ view: WKWebView!, userId: String, placement: String, context: Any?) {
    parentView.isHidden = false
  }

Step 9: 他のアプリへのリンク

Alliチャットでhttpまたはhttpsにリンクすると、顧客のデフォルトのブラウザーが起動します。 他のアプリケーションへのリンクを追加する場合は、AlliEventHandlerからhandleUrlLoadingメソッドを実装します。


func handleUrlLoading(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    let strUrl = navigationAction.request.url!.absoluteString
    if(<condition>) {
        UIApplication.shared.open(URL(string: strUrl)!, options: [:], completionHandler: nil)
        decisionHandler(.allow)
    }
    else {
        decisionHandler(.cancel)
    }
}

(例)Apple Mapを起動する場合

let strUrl = "http://maps.apple.com/?q=seoul"