# \[iOS]アプリ内メッセージの表示を制御する

## アプリ内メッセージを非表示にする

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

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

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

```swift
if InAppMessaging.shared.isPresenting {
  InAppMessaging.shared.dismiss()
}
```

{% endcode %}
{% endtab %}

{% tab title="Objective-C" %}
{% code overflow="wrap" %}

```objc
if ([[KRTInAppMessaging shared] isPresenting]) {
  [[KRTInAppMessaging shared] dismiss];
}
```

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

## アプリ内メッセージの表示を抑制する

特定画面群では接客を表示したくないの場合、プログラムからアプリ内メッセージの表示を抑制することが可能です。

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

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

```swift
InAppMessaging.shared.suppress()
```

{% endcode %}
{% endtab %}

{% tab title="Objective-C" %}
{% code overflow="wrap" %}

```objc
[[KRTInAppMessaging shared] suppress];
```

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

また同クラスの `unsuppress()` メソッドを呼び出すことで表示抑制モードを解除できます。\
※表示抑制モードの解除には、明示的に`unsuppress()`メソッドを呼ぶ必要があります。

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

```swift
InAppMessaging.shared.unsuppress()
```

{% endcode %}
{% endtab %}

{% tab title="Objective-C" %}
{% code overflow="wrap" %}

```objc
[[KRTInAppMessaging shared] unsuppress];
```

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

なお、表示抑制が有効な時に接客が配信され、表示が抑制された場合には `_message_suppressed` イベントが発生します。

※表示抑制モードの設定はメモリ上に保持されるため、アプリ起動中に限り設定が有効です。アプリがkillされた場合は、表示抑制モードが解除されます。

※表示抑制された場合に発生する\_message\_suppressedイベントは、reasonが"The display is suppressed by suppress mode."として記録されます。

## アプリ内メッセージを表示する画面を限定する

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

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

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

* Viewイベントの送信
* 画面遷移

{% hint style="info" %}
**画面境界の認識について**

画面境界の認識条件については、[こちら](/ios-sdk-appendix/concepts-boundary-transition-ios-sdk.md) をご覧ください。
{% endhint %}

## アプリ内メッセージを常駐させる

通常の画面遷移またはviewイベント発生時に接客がリセットされます。トリガーとするイベントによってはイベント発生後にviewイベントが発生してしまい、接客が表示されないことがあります。それを避けるために接客サービスのオプションとして、ネイティブアプリにおける接客表示制御から「表示制御をしない、かつ常に表示する」を用意しています。\
また、画面を跨いで常駐させたい場合にも本オプションは有効です。

オプションを有効にした接客を非表示にする方法は以下の通りです。

* `InAppMessaging.shared.dismiss()` または `InAppMessaging.shared.suppress()` を呼び出し明示的に非表示にする
* アプリ内メッセージ側で接客を非表示にする実装をする

{% hint style="info" %}
**常駐接客の表示イベントについて**

常駐接客表示中は画面遷移またはviewイベント発生時に、接客表示イベント(message\_open)が発生します。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://app.developers.karte.io/ios-sdk-appendix/appendix-iam-control-ios-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
