— アプリ内メッセージのリンクを制御する
Usage
リンクの制御について
リンククリック時の挙動
ユーザーがアクション内のリンク(aタグ)をクリックすると、SDKは自動でリンクに指定されているURLを開きます。
この時SDKは、暗黙的インテントを生成し startActivity
メソッドを呼び出します。
インテントのアクションは ACTION_VIEW
、データにはリンクに指定されているURLが設定されます。
そのため基本的には、http
または https
から始まるリンクの場合は Chrome等のブラウザが起動し、それ以外のスキームの場合は、スキームに対応するアプリケーションが起動する形となります。
リンククリック時にアプリケーション側で処理を行う
リンククリック後、アプリケーション側で処理を行いたい場合は、InAppMessagingDelegate
クラスの shouldOpenURL()
メソッドを実装する必要があります。
InAppMessagingDelegate
クラスは抽象クラスで実装されています。
/**
* アプリ内メッセージで発生するイベントを委譲するためのクラスです。
*/
abstract class InAppMessagingDelegate {
/* 実装省略 */
/**
* 接客サービスアクション中のボタンがクリックされた際に、リンクをSDK側で自動的に処理するかどうか問い合わせます。
*
* @param[url] リンクURL
* @return `true` を返した場合はSDK側でリンクを自動で開きます。`false` を返した場合はSDK側では何もしません。
*/
open fun shouldOpenURL(url: Uri): Boolean {
return true
}
}
アプリ内メッセージ経由のリンク遷移持に独自の処理を追加したい場合はInAppMessagingDelegate
クラスを継承の後にオーバーライドすることにより挙動を変更することができます。
override fun shouldOpenURL(url: Uri): Boolean {
// アプリケーション側で独自の処理を行う
// SDKデフォルトの処理を行わない場合は `false` を返す
return false
}
@Override
public boolean shouldOpenURL(Uri url) {
// アプリケーション側で独自の処理を行う
// SDKデフォルトの処理を行わない場合は `false` を返す
return false;
}
また委譲先のインスタンスの登録は、以下のように実装します。
InAppMessaging.delegate = instance
InAppMessaging.setDelegate(instance);
全体のサンプルコードとしては以下のような形でリンクの制御できます。
InAppMessaging.delegate = object : InAppMessagingDelegate() {
override fun shouldOpenURL(url: Uri): Boolean {
/* アプリケーション独自の実装を追加 */
return super.shouldOpenURL(url)
}
}
アプリケーション内の特定画面に遷移させる
アプリ内メッセージのリンククリックをトリガーにアプリケーション内の特定画面に遷移させるには、リンクURLとしてディープリンクURLを設定する必要があります。
この時アプリ側の AndroidManifest.xml にもインテント呼び出しに応じて起動する Activity の設定を行っておく必要があります。
Updated 2 months ago