— アプリ内メッセージのリンクを制御する

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;
}