— アプリ内メッセージのリンクを制御する
Usage
リンクの制御について
リンククリック時の挙動
ユーザーがアクション内のリンク(aタグ)をクリックすると、SDKは自動でリンクに指定されているURLを開きます。
この時SDKは、UIApplication
クラスの open(_:options:completionHandler:)
メソッドを呼び出しており、実際のリンクの処理はOS側に処理を委譲しています。
そのため基本的には、http
または https
から始まるリンクの場合は Safari等のブラウザが起動し、それ以外のスキームの場合は、スキームに対応するアプリケーションが起動する形となります。
リンククリック時にアプリケーション側で処理を行う
リンククリック後、アプリケーション側で処理を行いたい場合は、InAppMessagingDelegate
プロトコルの inAppMessaging(_:shouldOpenURL:)
を実装する必要があります。
※ shouldOpenURLはアクション上で発生する全てのリンク遷移のパターンで動作します。
func inAppMessaging(_ inAppMessaging: InAppMessaging, shouldOpenURL url: URL) -> Bool {
// アプリケーション側で独自の処理を行う
// SDKデフォルトの処理を行わない場合は `false` を返す
return false
}
- (BOOL)inAppMessaging:(KRTInAppMessaging *)inAppMessaging shouldOpenURL:(NSURL *)url {
// アプリケーション側で独自の処理を行う
// SDKデフォルトの処理を行わない場合は `NO` を返す
return NO;
}
また委譲先のインスタンスの登録は、以下のように実装します。
InAppMessaging.shared.delegate = instance
[[KRTInAppMessaging shared] setDelegate:instance];
Universal Links を利用してアプリ内に遷移させるには?
UIApplication
クラスのopenURL
メソッドは、Universal Links を適切に処理することができないため、そのままではSafari
が起動してしまいます。
そのため Universal Links をリンクとして指定する場合は、アプリケーション側でリンククリック後の処理を実装する必要があります。
参考:Universal Links に対応する
アプリケーション内の特定画面に遷移させる
アプリ内メッセージのリンククリックをトリガーにアプリケーション内の特定画面に遷移させるには、リンクURLとしてディープリンクURLを設定する必要があります。
なおディープリンクURLを設定することにより、アプリを起動するところまでは行えますが、特定の画面に遷移させるところまではできません。
そのため特定の画面に遷移させる処理については、AppDelegateに予め実装しておく必要があります。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// TODO: URLを解析して特定画面に遷移させる処理を実装する必要がある
return true
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
// TODO: URLを解析して特定画面に遷移させる処理を実装する必要がある
return YES;
}
Updated 4 months ago