iOS Private Relayとのディファードディープリンク

iOS 15のリリースに伴い、Apple は iCloud+ユーザーにプライベートリレーという機能を提供しています。
この機能は、ユーザーのWebブラウジングのトラフィックを暗号化し、正確な位置情報、IPアドレス、ブラウジングのトラフィックの内容を隠すオプションを提供します。
ユーザーがプライベートリレーを選択した場合、アトリビューションやディファードディープリンクに支障をきたす可能性があります。
つまり、アプリを持たない新規ユーザーがApp Storeにアクセスし、アプリをインストールして起動すると、プライベートリレーによってアプリ内の特定のページにディープリンクされない可能性があります。

ディファードディープリンク(DDL)が引き続き期待通りに動作するように、以下のAppsFlyerソリューションのいずれかを導入する必要があります。

  • [推奨] App Clipベースのソリューション:ユーザーのアトリビューションデータを提供するApp Clipを作成し、DDLに実現させたいものと同様の、カスタマイズされたApp Clipエクスペリエンスにユーザーを誘導します。App Clipには、ユーザーをアプリクリップからフルアプリに誘導するフローを含めることもできます。
  • クリップボードを使ったソリューション:URLからディファードディープリンクデータをコピーし、ユーザーをアプリに正しくリダイレクトするWebランディングページを作成します。注記:このソリューションでは、アトリビューションはできません。

App Clipベースのソリューション

前提条件:AppsFlyer SDK V6.4.0以降

App ClipベースのDDLソリューションを設定する方法

  1. Appleの手順に従って希望のユーザージャーニーを提供するApp Clipを開発してください。
  2. App Clipから完全なアプリまでの計測を含むApp Clip向けのAppsFlyer SDKを実装してください。
  3. In the App Clip sceneDelegate:
    • Replace scene continue userActivity with the following function:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
  // Must for AppsFlyer attrib
  AppsFlyerLib.shared().continue(userActivity, restorationHandler: nil)

  //Get the invocation URL from the userActivity in order to add it to the shared user default
  guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
  let invocationURL = userActivity.webpageURL else {
    return
  }
  addDlUrlToSharedUserDefaults(invocationURL)        
}

⇲ Github リンク:Swift

  • 次のメソッドを追加してください:
func addDlUrlToSharedUserDefaults(_ url: URL){
  guard let sharedUserDefaults = UserDefaults(suiteName: "group.<your_app>.appClipToFullApp") else {
    return
  }
  //Add invocation URL to the app group
  sharedUserDefaults.set(url, forKey: "dl_url")
  //Enable sending events
  sharedUserDefaults.set(true, forKey: "AppsFlyerReadyToSendEvents")
}

⇲ Github リンク:Swift

  1. 完全なアプリにて:
    • In appDelegate, add the following method:
func deepLinkFromAppClip() {
  guard let sharedUserDefaults = UserDefaults(suiteName: "group.<your_app>.appClipToFullApp"),
  let dlUrl = sharedUserDefaults.url(forKey: "dl_url")
  else {
    NSLog("Could not find the App Group or the deep link URL from the app clip")
    return
  }
  AppsFlyerLib.shared().performOnAppAttribution(with: dlUrl)
  sharedUserDefaults.removeObject(forKey: "dl_url")
}

⇲ Github リンク:Swift

  • At the end of the application didFinishLaunchingWithOptions launchOptions method, call deepLinkFromAppClip:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  // ...

  deepLinkFromAppClip()

  return true
}

⇲ Github リンク:Swift

クリップボードベースのソリューション

クリップボードベースのDDLソリューションを設定する方法

  1. Enter the following code in appDelegate.
NSString *pasteboardUrl = [[UIPasteboard generalPasteboard] string];
NSString *checkParameter = @"cp_url=true";

if ([pasteboardUrl containsString:checkParameter]) {
  [[AppsFlyerLib shared] performOnAppAttributionWithURL:[NSURL URLWithString:pasteboardUrl]];
}
var pasteboardUrl = UIPasteboard.general.string ?? ""
let checkParameter = "cp_url=true"

if pasteboardUrl.contains(checkParameter) {
    AppsFlyerLib.shared().performOnAppAttribution(with: URL(string: pasteboardUrl))
}
  1. クリップボードからURLのディファードディープリンクを貼り付けるコードを実装してください。これは、AppsFlyer SDKの一部ではありません。