# Android SDK 連携

Alli SDKにはAndroid 4.4（APIレベル19）以上が必要です。<br>

## Step 1. SDKをダウンロードしてインポートする <a href="#step-1-download-and-import-the-sdk" id="step-1-download-and-import-the-sdk"></a>

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

<figure><img src="https://i0.wp.com/guide.allganize.ai/wp-content/uploads/2022/01/image-48-2.png?fit=1000%2C360&#x26;ssl=1" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://i0.wp.com/guide.allganize.ai/wp-content/uploads/2022/01/image2-2-1.png?fit=788%2C587&#x26;ssl=1" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://i0.wp.com/guide.allganize.ai/wp-content/uploads/2022/01/image3-1.png?fit=823%2C688&#x26;ssl=1" alt=""><figcaption></figcaption></figure>

## Step 2. Alli SDKを依存関係として追加 <a href="#step-2-download-and-import-the-sdk" id="step-2-download-and-import-the-sdk"></a>

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

{% code lineNumbers="true" %}

```javascript
dependencies {
  implementation project(":allisdk")
}
```

{% endcode %}

## Step 3. アプリの権限を追加する <a href="#step-3-add-app-permissions" id="step-3-add-app-permissions"></a>

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

{% code lineNumbers="true" %}

```javascript
<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"/>
  <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
　<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
　<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
</manifest>
```

{% endcode %}

## Step 4. Java 8言語機能を構成する <a href="#step-4-configure-8-languages" id="step-4-configure-8-languages"></a>

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

{% code lineNumbers="true" %}

```javascript
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
  }
}
```

{% endcode %}

## Step 5. Alli SDKを初期化する <a href="#step-5-reset-sdk" id="step-5-reset-sdk"></a>

1. Alli SDKがメインファイルにインポートされていることを確認します。

{% code lineNumbers="true" %}

```javascript
import ai.allganize.allisdk.Alli;
import ai.allganize.allisdk.AlliErrorCode;
import ai.allganize.allisdk.AlliEventHandler;
```

{% endcode %}

2. プリケーションの最初のActivityクラスの onCreate() メソッドに以下を追加して、SDKキーでAlliライブラリを初期化します。\
   ※以下の画像には”YOUR\_API\_KEY”と記載がありますが、こちらにSDKキーを記載ください。

{% code lineNumbers="true" %}

```javascript
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();
  ...
}
```

{% endcode %}

### アップデート June 2021

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

{% code lineNumbers="true" %}

```javascript
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);
                  }}
                }}
              }});
```

{% endcode %}

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

<figure><img src="https://i0.wp.com/guide.allganize.ai/wp-content/uploads/2022/01/android.png?fit=3740%2C1475&#x26;ssl=1" alt=""><figcaption></figcaption></figure>

3. 権限の同じActivityクラスにこれを追加します。

{% code lineNumbers="true" %}

```javascript
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);
}
```

{% endcode %}

## Step 6. ダイアログを作成する <a href="#step-6-create-dialog" id="step-6-create-dialog"></a>

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

{% code lineNumbers="true" %}

```javascript
alli.event();
```

{% endcode %}

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

{% code lineNumbers="true" %}

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

{% endcode %}

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

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

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

### アップデート June 2021

event 関数を使用することで、使用可能なすべてのJavascriptパラメーターを利用することも可能です。

{% code lineNumbers="true" %}

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

{% endcode %}

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

## Step 7. Alliイベントを処理するデリゲートメソッド <a href="#step-7-handle-alli-event" id="step-7-handle-alli-event"></a>

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

{% code lineNumbers="true" %}

```javascript
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)
}
```

{% endcode %}

## Step 8. 他のアプリと接続 <a href="#step-8-connect-other-apps" id="step-8-connect-other-apps"></a>

他のアプリに接続するには、次のように入力します。以下は、Googleマップにリンクする例です。

{% code lineNumbers="true" %}

```javascript
@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;
```

{% endcode %}

## &#x20;<a href="#tips-of-android" id="tips-of-android"></a>
