Deferred deep linking iOS dengan Private Relay iOS

Dengan peluncuran 1OS 15, Apple memberi pengguna iCloud+ fitur yang disebut Private Relay, yang memberi mereka opsi untuk mengenkripsi lalu lintas penjelajahan web dan menyembunyikan lokasi persisnya, alamat IP, dan konten lalu lintas penjelajahan mereka. Jika pengguna memilih Relay Pribadi, ini dapat mengganggu atribusi dan deferred deep linking. Artinya, begitu pengguna baru tanpa aplikasi masuk ke App Store, dan menginstal serta meluncurkan aplikasi, Private Relay dapat mencegah mereka dikirim ke halaman tertentu di aplikasi.

Untuk memastikan bahwa deferred deep linking (DDL) tetap berfungsi sebagaimana mestinya, Anda harus menerapkan salah satu solusi AppsFlyer berikut:

  • [Disarankan] Solusi berbasis App Clip: Buat App Clip yang memberi Anda data atribusi pengguna, dan mengarahkan pengguna ke pengalaman App Clip yang dipersonalisasi mirip dengan apa yang Anda inginkan dicapai oleh DDL. App clip juga dapat berisi alur untuk mengarahkan pengguna dari App Clip ke aplikasi lengkap Anda.
  • Solusi berbasis clipboard: Buat halaman arahan web yang menyalin data deferred deep linking dari URL dan mengarahkan pengguna ke aplikasi dengan benar. Catatan: Solusi ini tidak memengaruhi atribusi.

Solusi berbasis App Clip

Prasyarat: AppsFlyer SDK V6.4.0+

Untuk menyiapkan solusi DDL berbasis App Clip:

  1. Ikuti instruksi Apple dan kembangkan App Clip yang menyediakan perjalanan pengguna yang diinginkan.
  2. Integrasikan AppsFlyer SDK untuk App Clips , termasuk atribusi App Clip-to-full app .
  3. Di Klip Aplikasi sceneDelegate:
    • Ganti scene continue userActivity dengan fungsi berikut ini:
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)        
}

⇲ Tautan Github Swift

  • Tambahkan metode berikut:
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")
}

⇲ Tautan Github Swift

  1. Dalam aplikasi lengkap:
    • In appDelegate, tambahkan metode berikut ini:
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")
}

⇲ Tautan Github Swift

  • Di akhir dari application didFinishLaunchingWithOptions launchOptions metode, panggilan deepLinkFromAppClip:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  // ...

  deepLinkFromAppClip()

  return true
}

⇲ Tautan Github Swift

Solusi berbasis Clipboard

Untuk mengatur solusi DDL berbasis clipboard:

  1. Masukkan kode berikut ini di 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. Menerapkan kode yang merekatkan data deferred deep link di URL dari clipboard. Ini bukan bagian dari SDK AppsFlyer.