# \[Cordova]アプリ内メッセージを表示する

アプリケーション内にメッセージ（ダイアログ等）を表示したい場合は、アプリ内メッセージ機能を利用することで実現可能です。

アクションは、SDKから送信したイベントをトリガーに配信され、その後SDKにより自動的にアプリケーション上に表示されます。

## 動作確認

1. イベントを送信処理を実装\
   接客サービスの配信トリガーとして機能するイベントを実装します。\
   イベントの送信については、 [イベントを送信する](https://app.developers.karte.io/cordova-sdk/tracking-cordova-sdk) をご覧ください。
2. 接客サービスを作成\
   管理画面上で接客サービスを作成します。\
   接客サービスの作成方法については、[接客サービス作成の流れ](https://support.karte.io/post/4yOwCoZkdoPZwpFRvSrkwP) をご覧ください。
3. アプリケーションで確認\
   アプリケーションを起動し、1. で実装したイベントの送信が行われる操作を行い、2. で設定した接客サービスが配信・表示されることを確認します。

## アクション表示の仕組み

アクションの表示には WebView を利用しています。\
このため管理画面上で、HTML / CSS / JavaScript をカスタマイズすることでアプリケーションのコードを変更することなく、アクションの見た目を変更することが可能となっています。

## アクションのリンクの制御について

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

リンククリック時のハンドリングをアプリケーション側で行いたい場合は、こちらをご覧ください。

* [アクションのリンクの制御について - Android](https://app.developers.karte.io/android-sdk/iam-android-sdk#section-アクションのリンクの制御について)
* [アクションのリンクの制御について - iOS](https://app.developers.karte.io/ios-sdk/iam-ios-sdk#section-アクションのリンクの制御について)

## アクションの表示制御機能について

## アクションを非表示にする

通常アクションの非表示はユーザーの操作によって行われることが一般的ですが、プログラムから非表示にすることも可能です。

プログラムから非表示にする場合は、`InAppMessaging` クラスの `dismiss()` メソッドを呼び出すことで非表示にすることが可能です。\
また同クラスの `isPresenting` メソッドを呼び出すことで、アクションが表示中であるか確認することが可能です。

{% code overflow="wrap" %}

```javascript
KarteInAppMessaging.isPresenting().then(function(isPresenting) {
  if (isPresenting) {
    KarteInAppMessaging.dismiss();
  }
});
```

{% endcode %}

## アクションを表示を抑制する

特定画面群では接客を表示したくないの場合、プログラムからアクションの表示を抑制することが可能です。

`KarteInAppMessaging` クラスの `suppress()` メソッドを呼び出すことで表示抑制モードとなり、抑制が有効となります。

{% code overflow="wrap" %}

```javascript
KarteInAppMessaging.suppress()
```

{% endcode %}

また同クラスの `unsuppress()` メソッドを呼び出すことで表示抑制モードを解除できます。

{% code overflow="wrap" %}

```javascript
KarteInAppMessaging.unsuppress()
```

{% endcode %}

## アクションを表示する画面を限定する

特定画面のコンテキストに合わせたアクションを配信する場合に、ユーザーの操作などで特定画面外に遷移した後にアクションが表示されてしまう場合があります。\
これを抑制するために、接客サービスのオプションとして「ネイティブアプリにおける接客表示制限」を用意しています。

特定の画面に限定して表示したい接客サービスの場合は、このオプションをONにしてください。

本機能は、SDKが画面の境界を正しく認識できる場合にのみ機能します。\
なお画面の境界を認識するパターンは、以下の通りです。

* Viewイベントの送信

## アクションの状態変化を検知する

`InAppMessagingDelegate` プロトコルを実装することにより、アクションの表示状態の変化などを検知することが可能です。

現在のところ、以下の状態変化を検知することが可能です。

* Windowの表示/非表示状態の変化
* アクションの表示/非表示状態の変化
* リンククリックの検知

アクションの状態変化を検知する場合は、こちらをご覧ください。

* [アクションの状態変化を検知する - Android](https://app.developers.karte.io/android-sdk/iam-android-sdk#section-アクションの状態変化を検知する)
* [アクションの状態変化を検知する - iOS](https://app.developers.karte.io/ios-sdk/iam-ios-sdk#section-アクションの状態変化を検知する)

##
