— 画面の境界を認識する条件

Specification

KARTE SDKでは画面の境界を認識することで、アプリ内メッセージの表示制御を行う機能があります。
本ドキュメントでは画面の境界を認識する条件について記載します。

画面の境界を認識する条件

画面の境界を認識する条件は2つあります。

  • 画面遷移の発生
  • Viewイベントの発火時(KARTEのサーバーにイベントが到達したかは問わない)

🚧

ブリッジSDK利用時の注意点

FlutterやReact Nativeなどを対象としたブリッジSDKをご利用中の場合。
画面遷移により画面境界を認識するかどうかはフレームワークやライブラリ等に依存します。
確実に画面境界を認識するために全ての画面でviewイベントを実装することを推奨します。

画面遷移の発生

利用頻度が高い下記コントローラで画面遷移処理が呼び出された場合に、SDKは画面境界を認識します。

コントローラ名メソッド名・プロパティ名
UIViewControllerpresent(_:animated:completion:)
UIViewControllerdismiss(animated:completion:)
UINavigationControllersetViewControllers(_:animated:)
UINavigationControllerpushViewController(_:animated:)
UINavigationControllerpopViewController(animated:)
UINavigationControllerpopToViewController(_:animated:)
UINavigationControllerpopToRootViewController(animated:)
UITabBarControllerselectedIndex
UITabBarControllerselectedViewController

ただし画面境界の判断は modalPresentationStyle の値に影響を受けます。
custom overFullScreen overCurrentContext およびpopover の場合は画面境界として判定しません。
popoverの場合は UIAdaptivePresentationControllerDelegate により提供される adaptivePresentationStyle の値がこの判定に採用されます。
これは半モーダルなどの表現は画面コンテキストが継続していると定義しているためです。

※SwiftUIを利用している場合でも、importされたUIKit上で上記の画面遷移処理が呼び出された際にはSDKが画面境界を認識します。

Viewイベントの発火

Viewイベントの発火(viewメソッドの呼び出し)が行われた時点で画面の境界を認識します。

🚧

Viewイベントを送信しても画面境界として認識されないパターンについて

WebView内の計測タグからViewイベントを送信した場合は、画面境界として認識されません。
画面境界として認識されるのは、あくまでもネイティブSDKでViewイベントを送信した場合に限ります。

画面境界の認識をViewイベントに限定する方法

UIKitを利用している場合に、SDKは一定の条件を画面の境界として自動認識します。

アプリの実装によっては画面境界の認識とviewイベントの送信タイミングが意図しない順序になる場合もあり、そのような場合には表示制御を利用しても意図したIAMの動作を実現出来ない場合があります。

このような場合にはInAppMessagingConfigurationオプションを無効化することで、画面境界の認識をviewイベントのみに限定できます。(≒viewイベント以外の意図しない画面境界の認識を抑制できます)

InAppMessagingConfigurationの無効化は、SDKの初期化時にisAutoScreenBoundaryEnabledのflagをfalseにして渡すことで無効化できます。

let iamConfiguration = InAppMessagingConfiguration()
iamConfiguration.isAutoScreenBoundaryEnabled = false

let configuration = Configuration { (configuration) in
    configuration.libraryConfigurations = [iamConfiguration]
}

KarteApp.setup(appKey: appKey, configuration: configuration)