> For the complete documentation index, see [llms.txt](https://app.developers.karte.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://app.developers.karte.io/android-sdk-appendix/appendix-iam-link-control-android-sdk.md).

# \[Android]アプリ内メッセージのリンクを制御する

## リンクの制御について

### リンククリック時の挙動

ユーザーがアクション内のリンク（aタグ）をクリックすると、SDKは自動でリンクに指定されているURLを開きます。

この時SDKは、暗黙的インテントを生成し `startActivity` メソッドを呼び出します。\
インテントのアクションは `ACTION_VIEW`、データにはリンクに指定されているURLが設定されます。\
そのため基本的には、`http` または `https` から始まるリンクの場合は Chrome等のブラウザが起動し、それ以外のスキームの場合は、スキームに対応するアプリケーションが起動する形となります。

### リンククリック時にアプリケーション側で処理を行う

リンククリック後、アプリケーション側で処理を行いたい場合は、`InAppMessagingDelegate` クラスの `shouldOpenURL()` メソッドを実装する必要があります。

`InAppMessagingDelegate`クラスは抽象クラスで実装されています。

{% code title="InAppMessagingDelegate.kt" overflow="wrap" %}

```kotlin
/**
 * アプリ内メッセージで発生するイベントを委譲するためのクラスです。
 */
abstract class InAppMessagingDelegate {
    /* 実装省略 */

    /**
     * 接客サービスアクション中のボタンがクリックされた際に、リンクをSDK側で自動的に処理するかどうか問い合わせます。
     *
     * @param[url] リンクURL
     * @return `true` を返した場合はSDK側でリンクを自動で開きます。`false` を返した場合はSDK側では何もしません。
     */
    open fun shouldOpenURL(url: Uri): Boolean {
        return true
    }
}
```

{% endcode %}

アプリ内メッセージ経由のリンク遷移持に独自の処理を追加したい場合は`InAppMessagingDelegate`クラスを継承の後にオーバーライドすることにより挙動を変更することができます。

{% tabs %}
{% tab title="Kotlin" %}
{% code overflow="wrap" %}

```kotlin
override fun shouldOpenURL(url: Uri): Boolean {
  // アプリケーション側で独自の処理を行う

  // SDKデフォルトの処理を行わない場合は `false` を返す
  return false
}
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

```java
@Override
public boolean shouldOpenURL(Uri url) {
  // アプリケーション側で独自の処理を行う

  // SDKデフォルトの処理を行わない場合は `false` を返す
  return false;
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

また委譲先のインスタンスの登録は、以下のように実装します。

{% tabs %}
{% tab title="Kotlin" %}
{% code overflow="wrap" %}

```kotlin
InAppMessaging.delegate = instance
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

```java
InAppMessaging.setDelegate(instance);
```

{% endcode %}
{% endtab %}
{% endtabs %}

全体のサンプルコードとしては以下のような形でリンクの制御できます。

{% code title="MainActivity.kt" overflow="wrap" %}

```kotlin
  InAppMessaging.delegate = object : InAppMessagingDelegate() {
      override fun shouldOpenURL(url: Uri): Boolean {
          /* アプリケーション独自の実装を追加　*/
          return super.shouldOpenURL(url)
      }
  }
```

{% endcode %}

## アプリケーション内の特定画面に遷移させる

アプリ内メッセージのリンククリックをトリガーにアプリケーション内の特定画面に遷移させるには、リンクURLとしてディープリンクURLを設定する必要があります。

この時アプリ側の AndroidManifest.xml にもインテント呼び出しに応じて起動する Activity の設定を行っておく必要があります。
