Android SDK 連携

Alli SDKにはAndroid 4.4(APIレベル19)以上が必要です。

Step 1. SDKをダウンロードしてインポートする

1. Alliダッシュボードにログインして「設定」メニューに移動します。下にスクロールし、Android SDKを確認し、[ダウンロードボタン]を押して、SDKをダウンロードします。

2. Android Studioで、[ファイル] > [新規]> [新しいモジュール]に移動し、Alli SDKをプロジェクトにインポートします。

3. 「ファイル」 >「プロジェクト構造」> 「依存関係」でファイルの依存関係として「allisdk」を追加します。 

Step 2. Alli SDKを依存関係として追加

アプリモジュールの build.gradle ファイルに移動し、Alli SDKを依存関係として追加します。

				
					  dependencies {
    implementation project(":allisdk")
  }
				
			

Step 3. アプリの権限を追加する

以下を AndroidManifest.xmlに追加します。

				
					  <manifest>
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <!-- file upload permission for v5.0 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
    <!-- external storage use permission -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET"/>
  </manifest>
				
			

Step 4. ava 8言語機能を構成する

Androidプラグインが3.0.0以上であることを確認し、対応する build.gradle ファイルで次のように設定します。

				
					  android {
    ...
    // Configure only for each module that uses Java 8
    // language features (either in its source code or
    // through dependencies).
    compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_8
      targetCompatibility JavaVersion.VERSION_1_8
    }
  }
				
			

Step 5. Alli SDKを初期化する

  1. Alli SDKがメインファイルにインポートされていることを確認します。
				
					  import ai.allganize.allisdk.Alli;
  import ai.allganize.allisdk.AlliErrorCode;
  import ai.allganize.allisdk.AlliEventHandler;
				
			
  1. プリケーションの最初のActivityクラスの onCreate() メソッドに以下を追加して、SDKキーでAlliライブラリを初期化します。
    ※以下の画像には”YOUR_API_KEY”と記載がありますが、こちらにSDKキーを記載ください。
				
					  protected void onCreate(Bundle savedInstanceState) {
    ...  
    // new Alli(String apiKey, WebView webView, AlliEventHandler eventHandler, boolean showHeader, boolean showFooter, boolean showBackButton)
    // 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 = new Alli("YOUR_API_KEY", webView, this, true, true, false);
    alli.initialize();
    ...
  }
				
			

アップデート June 2021

AndroidSDKにてJavascripSDKで使用可能なすべてのパラメーターを使用できます。
HashMap<String, Object> タイプを使用して、JavascriptSDKの初期化に使用されるパラメーターをAlliの引数に送信します。

				
					  dependencies {
    implementation project(":allisdk")
  }alli = new Alli(this, apikey, webView, this,
                new HashMap<String, Object>(){{
                  put("header", true);
                  put("footer", false);
                  put("backButton", true);
                  put("styleOptions", new HashMap<String, Object>(){{
                    put("conversationContainer", new HashMap<String, Object>(){{
                      put("right", 50);
                      put("left": 50);
                      put("bottom": 50);
                    }}
                  }}
                }});
				
			

SDKキーはAlliダッシュボード > [設定]を選択し、プロジェクト設定ページに記載されています。

  1. 権限の同じActivityクラスにこれを追加します。
				
					Add this in the same Activity class for permissions:
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        alli.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        alli.onActivityResult(this, requestCode, resultCode, data);
    }
				
			

>Step 6. ダイアログを作成する

ユーザーとAlliが会話することができるダイアログを作成するには、下記を呼び出します。

				
					alli.event();
				
			

ユーザIDとPlacementを特定したい場合は以下のように呼び出します。

				
					// user id: "USER-123"
// placement: "LANDING"
alli.event("USER-123", "LANDING", context);
				
			

サービスにログインして、ユーザが特定されている場合、上記のようにAlliに情報を渡すことができます。 あるいはログインしていないユーザーのために、一時的なIDを生成することもできます。

Placement情報は、ユーザーにスキルを表示したいアプリ内の場所を決定するために使用されます。Placementを作成した後、Alliダッシュボードで必要なスキルにPlacementを指定することができます。この機能の利点は、プレースメントに表示するスキルをいつでも決定できることです。

Alliダイアログは、親ビューコントローラで実装する必要があります。このとき、親ビューコントローラを委任属性に割り当てる必要があります。この呼び出しに渡されたViewControllerが最上位のビューであり、他のビューに隠れないようにしてください。 そして親ビューは、最小の高さと幅が必要です。

アップデート June 2021
event 関数を使用することで、使用可能なすべてのJavascriptパラメーターを利用することも可能です。

				
					alli.event(new HashMap<String, Object>(){{
            put("user", new HashMap<String, Object>(){{
                put("id", userId.getText().toString());
            }});
            put("placement", placement.getText().toString());
            put("variables", new HashMap<String, Object>(){{
                put("test", "test value");
                put("AGE", 31);
                put("BIRTHDAY", "2021-06-30");
                put("boolean", true);
            }});
        }});
				
			

※上記のuserIdの形式にご注意ください。

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

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

				
					  public protocol AlliEventHandler {
    // Called when initialized successfully. 
    // You may receive NOT_INITIALIZE_YET error if 
    // called before this event.
    void onInitialized(WebView view);

    // Called when chat started successfully.
    void onConversationStarted(WebView view, String userId, String placement, Object context);


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


    // Called when user has closed the chat 
    // window or Alli.close() is called.
    void onConversationClosed(WebView view, String userId, String placement, Objective context)

    void onError(WebView view, AlliErrorCode errorCode, String userId, String placement, Object context)
  }
				
			

Step 8. 他のアプリと接続

他のアプリに接続するには、次のように入力します。以下は、Googleマップにリンクする例です。
				
					    @Override
    public boolean handleUrlLoading(String url) {
        Uri gmmIntentUri = Uri.parse("geo:37.4919653,127.0330243");
        Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
        mapIntent.setPackage("com.google.android.apps.maps");
        startActivity(mapIntent);
        return true;
				
			

Tip: Android WebView利用時のAlli SDK最適化

Android WebViewのパフォーマンスはそれほど優れていないため、AlliSDKを利用時に推奨するオープンソースのAdvancedWebViewを次に示します。ライブラリはこちらで確認できます。 このライブラリは、Androidの基本的なWebViewを拡張したバージョンであるため、既存のインターフェースを利用することができ、WebView宣言部分のみを書き換えるするだけで完了します。  

Step 1. ライブラリのインストール

Projectのbuild.gradleに次のように入力します。
				
					allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}
				
			

Appのbuild.gradleに次のように入力します。

				
					dependencies {
    implementation 'com.github.delight-im:Android-AdvancedWebView:v3.2.1'
}
				
			

Step 2. ebViewの書き換え

「webview”を” im.delight.android.webview.AdvancedWebView”に置き換えます。

				
					<im.delight.android.webview.AdvancedWebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
				
			

コードの基本的なWebViewは以下のように宣言されますが、

				
					WebView myWebView = new WebView(activityContext);
				
			

下記のようにAdvancedWebViewに置き換えします。

				
					WebView myWebView = new AdvancedWebView(activityContext);
				
			

Step 3. Build

Gradle同期後、ライブラリをインストールすることでビルドできます。