アクションを配信する
このドキュメントは古いバージョンのAndroid SDK v1について記載しています
Android SDK v1は 2021/05/11でサポート終了となります。
SDK v1 からのアップグレードについては、まず SDK v1からv2のアップグレード方法 をご覧ください。
送信したイベントをトリガーにした接客サービスが配信されると、アクションが自動で表示されます。
多くの場合、アプリにアクションを表示するための特別な知識や実装は不要です。
アプリ内でPopupWindow等によりWindowを表示してる場合は、追加の実装が必要となるケースがあります。
このページではアクション表示時のSDKの詳細な挙動を説明します。
アクション表示の仕組み
SDKはアプリ内にセットしたWebView上でアクションを表示することで、HTML、CSS、JavaScriptによる表現を可能にしています。
アクションが配信されたとき、WebViewを持つViewがアプリ内に設置されます。このViewはTYPE_APPLICATION_ATTACHED_DIALOG
のtypeでWindowManager.addView()
により設置され、アクティブなアクションがなくなったときに破棄されます。
制限事項
SDKはWebViewのメモリリークを回避するために
Application
をコンストラクタのContextに渡します。そのため、アクションのHTMLで<select>
は利用できません。
アプリ内で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
の値がセットされます。
もしリンクをアプリ側で処理したい場合は、KarteInAppMessagingManager
にOnOpenURLListener
をセットすることで、独自にリンクを処理できます。
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イベントの送信が発生した際に画面遷移とみなし、接客の表示を抑制します。
アクションの表示を明示的に抑制する
InAppMessagingManager
クラスの suppress
メソッドを呼び出すことで、明示的にアクションの表示を抑制することができます。表示の抑制を解除するには unsuppress
を呼び出します。
特定の Activity
/ Fragment
でのみアクションを表示する場合、該当 Activity
/ Fragment
の onResume
/ 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()
}
配信されたアクションが表示されない条件
次の条件に合致した場合、配信されたアクションは表示されません。
- 接客表示対象のActivityのonPaused発生から次のonResumedまたはonCreatedが発生するまでの間にアクションが配信された場合
Updated over 1 year ago