アクションを配信する

送信したイベントをトリガーにした接客サービスが配信されると、アクションが自動で表示されます。
多くの場合、アプリにアクションを表示するための特別な知識や実装は不要です。
アプリ内でPopupWindow等によりWindowを表示してる場合は、追加の実装が必要となるケースがあります。
このページではアクション表示時のSDKの詳細な挙動を説明します。

アクション表示の仕組み

SDKはアプリ内にセットしたWebView上でアクションを表示することで、HTML、CSS、JavaScriptによる表現を可能にしています。
アクションが配信されたとき、WebViewを持つViewがアプリ内に設置されます。このViewはTYPE_APPLICATION_ATTACHED_DIALOGのtypeでWindowManager.addView()により設置され、アクティブなアクションがなくなったときに破棄されます。

🚧

制限事項

SDKはWebViewのメモリリークを回避するためにApplicationをコンストラクタのContextに渡します。そのため、アクションのHTMLで<select>は利用できません。

🚧

SDK v1.6.0未満の挙動

SDK v1.6.0未満では、表示中のActivityのaddContentView()によりWebViewが追加されます。
また、接客内のinput要素がフォーカス時にキーボードに被らないように、SDKは接客表示時にWindowのSoftInputModeにSOFT_INPUT_ADJUST_RESIZEを設定します。

SoftInputModeをアプリ側で調整したい場合は、アプリ全体か接客毎にこの挙動を無効にできます。

  • アプリ全体:初期化オプションのautoControlSoftInputAdjustfalseに設定する。
  • 接客毎:管理画面の「接客アクション編集 > 表示設定 > キーボード表示中の接客位置調整(Android SDK)」をOFFにする。(SDK v1.5.6のみ対応)

アプリ内でWindowを表示する場合

タッチ可能な要素を含むTYPE_APPLICATION_PANELタイプのWindowをアプリ内で表示していて、そのWindowの表示中に接客を配信する可能性がある場合、WindowをSDKに渡す必要があります。
PopupWindowはTYPE_APPLICATION_PANELのWindowを表示するためこのケースに当てはまります。(setWindowLayoutType(int layoutType)により独自のタイプを指定している場合は例外です。)

Windowを渡すにはInAppMessagingManager.registerWindow()InAppMessagingManager.registerPopupWindow()を利用してください。
SDKは受け取ったWindowを保持し、以下の処理を行ないます。

  • 適切なWindowへのタッチイベントのディスパッチ
  • 上記の条件に当てはまらない(タイプがTYPE_APPLICATION_PANELではない/表示状態ではない)Windowに対しては何も行ないません。

リンク

ユーザがアクション内にあるaタグをクリックしたとき、リンクを開くための暗黙的インテントがstartActivity()に渡されます。
このインテントのアクションはACTION_VIEWで、データにはhrefの値がセットされます。

もしリンクをアプリ側で処理したい場合は、KarteInAppMessagingManagerOnOpenURLListenerをセットすることで、独自にリンクを処理できます。

public class SampleApp {

  @Override
  public void onCreate() {
    super.onCreate();
    Tracker.getInstance(this, APP_KEY).getInAppMessagingManager().setOnOpenURLListener(new InAppMessagingManager.OnOpenURLListener() {
      @Override
      public boolean shouldOverrideOpenURL(Uri url) {
        // TODO: 独自の処理を実装する
        return true;
      }
    });
  }

特別なリンクとしてapp-settings:があります。リンクにapp-settings:を指定するとOSのアプリ設定画面に遷移できます。

アクションのリセット

画面遷移に伴い表示中のアクションを閉じるため、SDKは次のタイミングでアクションをリセットします。

  • viewイベントの送信
  • 表示中のActivityのonPause
  • アクション内のリンクのクリック
  • InAppMessagingManager.dismiss()の呼び出し

viewイベントの送信によるアクションのリセットが行われる条件について

KARTE SDKのviewメソッド実行により送信されるviewイベントでのみアクションはリセットされます。
そのため、webview内で発生したviewイベントではアクションはリセットされません。
webivew連携している場合も同様です。

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

イベントを送信してから接客サービスのレスポンスを受信する前に、ユーザが別の画面に遷移している場合があります。
この時にアクションを表示するかどうかを接客サービスのオプションでコントロールできます。
設定は、接客サービス詳細 > オプション の「ネイティブアプリにおける接客表示制限」より行えます。

特定の画面にのみアクションを表示したい場合はこのオプションをONにしてください。

📘

「ネイティブアプリにおける接客表示制限」で接客表示を抑制する条件

このオプションがONの場合、viewイベントの送信が発生した際に画面遷移とみなし、接客の表示を抑制します。

🚧

制限事項

この機能はAndroid SDK v1.4.7から対応しています。

アクションの表示を明示的に抑制する

InAppMessagingManager クラスの suppress メソッドを呼び出すことで、明示的にアクションの表示を抑制することができます。表示の抑制を解除するには unsuppress を呼び出します。

特定の Activity / Fragment でのみアクションを表示する場合、該当 Activity / FragmentonResume / onPause に以下のコードを追加します。

@Override
protected void onResume() {
  super.onResume();
  // アクションの表示抑制を解除します
  Tracker.getInstance().getInAppMessagingManager().unsuppress();
}

@Override
protected void onPause() {
  super.onPause();
  // アクションの表示を抑制します
  Tracker.getInstance().getInAppMessagingManager().suppress();
}
override fun onResume() {
  super.onResume()
  // アクションの表示抑制を解除します
  Tracker.getInstance().inAppMessagingManager.unsuppress()
}

override fun onPause() {
  super.onPause()
  // アクションの表示を抑制します
  Tracker.getInstance().inAppMessagingManager.suppress()
}

🚧

制限事項

この機能はAndroid SDK v1.6.7から対応しています。

配信されたアクションが表示されない条件

次の条件に合致した場合、配信されたアクションは表示されません。

  • 接客表示対象のActivityのonPaused発生から次のonResumedまたはonCreatedが発生するまでの間にアクションが配信された場合

Updated 4 months ago

アクションを配信する


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.