API lawas iOS
Direct deep linking
Overview
Deep linking langsung mengarahkan pengguna seluler ke aktivitas atau konten tertentu di aplikasi, saat aplikasi sudah diinstal.
Perutean dalam aplikasi ke aktivitas tertentu dalam aplikasi ini dimungkinkan karena parameter diteruskan ke aplikasi saat OS membuka aplikasi dan onAppOpenAttribution
method is called. AppsFlyer's OneLink ensures that the correct value is passed along with the user's click, thus personalizing the user’s app experience.
Only the deep_link_value
is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data.
Alur deep linking langsung berfungsi sebagai berikut :
-
Pengguna mengklik URL pendek OneLink.
-
iOS membaca Kepemilikan Domain Terkait aplikasi.
-
iOS membuka aplikasi.
-
SDK AppsFlyer dipicu di aplikasi.
-
SDK AppsFlyer mengambil data OneLink.
- Dalam URL pendek, data diambil dari API penyelesai URL pendek di server AppsFlyer.
- Di URL yang panjang, data diambil langsung dari URL yang panjang.
-
AppsFlyer SDK triggers
onAppOpenAttribution()
with the retrieved parameters and cached attribution parameters (e.g.install_time
). -
Asynchronously,
onConversionDataSuccess()
is called, holding the full cached attribution data. (You can exit this function by checking ifis_first_launch
istrue
.) -
onAppOpenAttribution()
menggunakanattributionData
peta untuk mengirimkan aktivitas lain di aplikasi dan meneruskan data yang relevan.- Ini menciptakan pengalaman yang dipersonalisasi bagi pengguna, yang merupakan tujuan utama OneLink.
Procedures
To implement the onAppOpenAttribution
metode dan mengatur perilaku parameter, daftar periksa tindakan berikut dari prosedur harus diselesaikan.
Daftar periksa prosedur
- Memutuskan perilaku aplikasi dan
deep_link_value
(and other parameter names and values) - with the marketer - Input metode perencanaan, yaitu
deep_link_value
(and other parameter names and values) - with the marketer - Menerapkan
onAppOpenAttribution()
logic - Menerapkan
onAttributionFailure()
logic
Menentukan perilaku aplikasi
Untuk menentukan perilaku aplikasi saat tautan diklik :
Dapatkan dari pemasar: Perilaku yang diharapkan dari tautan saat diklik.
Input metode perencanaan
When a OneLink is clicked and the user has the app installed on their device, the onAppOpenAttribution
method is called by the AppsFlyer SDK. This is referred to as a retargeting re-engagement.
The onAppOpenAttribution
metode mendapatkan variabel sebagai masukan seperti ini: AnyHashable: Any
.
Struktur data masukan dijelaskan di sini.
Menerapkan logika onAppOpenAttribution()
The deep link opens the onAppOpenAttribution
metode dalam kegiatan utama. Parameter OneLink dalam input metode digunakan untuk mengimplementasikan pengalaman pengguna tertentu saat aplikasi dibuka.
Contoh Kode:
func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
//Handle Deep Link Data
print("onAppOpenAttribution data:")
for (key, value) in attributionData {
print(key, ":",value)
}
walkToSceneWithParams(params: attributionData)
}
// User logic
fileprivate func walkToSceneWithParams(params: [AnyHashable:Any]) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true, completion: nil)
var fruitNameStr = ""
if let thisFruitName = params["deep_link_value"] as? String {
fruitNameStr = thisFruitName
} else if let linkParam = params["link"] as? String {
guard let url = URLComponents(string: linkParam) else {
print("Could not extract query params from link")
return
}
if let thisFruitName = url.queryItems?.first(where: { $0.name == "deep_link_value" })?.value {
fruitNameStr = thisFruitName
}
}
let destVC = fruitNameStr + "_vc"
if let newVC = storyBoard.instantiateVC(withIdentifier: destVC) {
print("AppsFlyer routing to section: \(destVC)")
newVC.attributionData = params
UIApplication.shared.windows.first?.rootViewController?.present(newVC, animated: true, completion: nil)
} else {
print("AppsFlyer: could not find section: \(destVC)")
}
}
⇲ Tautan Github Swift
Menerapkan logika onAttributionFailure()
The onAttributionFailure
method is called whenever the call to onAppOpenAttribution
fails. The function should report the error and create an expected experience for the user.
func onAppOpenAttributionFailure(_ error: Error) {
print("\(error)")
}
⇲ Tautan Github Swift
Deferred Deep Linking
Penting
Deferred deep linking yang menggunakan metode lawas onConversionDataSuccess mungkin tidak berfungsi untuk iOS 14.5+, karena memerlukan data atribusi yang mungkin tidak tersedia karena perlindungan privasi.
Sebaiknya gunakan deep linking terpadu (UDL). UDL sesuai dengan standar privasi iOS 14.5+ dan hanya mengembalikan parameter yang relevan dengan deep linking dan deferred deep linking:deep_link_value
anddeep_link_sub1-10
. Parameter atribusi (seperti misalnyamedia_source
,campaign
,af_sub1-5
, dll.), kembalinull
dan tidak dapat digunakan untuk tujuan deep linking.
Pelajari lebih lanjut
Overview
Deferred deep linking mengarahkan pengguna baru terlebih dahulu ke toko aplikasi yang benar untuk menginstal aplikasi, dan kemudian, setelah pembukaan pertama, ke pengalaman aplikasi tertentu (misalnya halaman tertentu di aplikasi).
When the user first launches the app, the onConversionDataSuccess
callback function receives both the conversion data of the new user, and OneLink data. The OneLink data makes in-app routing possible due to the deep_link_value
atau lainnya yang diteruskan ke aplikasi saat OS membuka aplikasi.
Only the deep_link_value
is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data. The AppsFlyer OneLink ensures that the correct parameters are passed along with the user's click, thus personalizing the user’s app experience.
The marketer and developer must coordinate regarding desired app behavior and deep_link_value
. The marketer uses the parameters to create deep links, and the developer customizes the behavior of the app based on the value received.
Programmer bertanggung jawab untuk memastikan parameter ditangani dengan benar di aplikasi, baik untuk perutean dalam aplikasi dan mempersonalisasi data di tautan.
Alur deferred deep linking berfungsi sebagai berikut:
- Pengguna mengklik OneLink di perangkat yang tidak menginstal aplikasi.
- AppsFlyer mendaftarkan klik dan mengarahkan pengguna ke app store atau halaman arahan yang benar.
- Pengguna menginstal aplikasi dan meluncurkannya.
- SDK AppsFlyer diinisialisasi dan pemasangan diatribusikan di server AppsFlyer.
- The SDK triggers the
onConversionDataSuccess
method. The function receives input that includes both thedeep_link_value
, and the attribution data/parameters defined in the OneLink data. - Parameter
is_first_launch
has the valuetrue
, yang menandakan alur deferred deep link.
Pengembang menggunakan data yang didapatkan dionConversionDataSuccess
berfungsi untuk menciptakan pengalaman yang dipersonalisasi bagi pengguna untuk peluncuran pertama aplikasi.
Procedures
To implement the onConversionDataSuccess
method and set up the parameter behaviors, the following action checklist of procedures need to be completed.
- Memutuskan perilaku aplikasi pada peluncuran pertama, dan
deep_link_value
(and other parameter names and values) - with the marketer - Input metode perencanaan, yaitu
deep_link_value
(and other parameter names and values) - with the marketer - Menerapkan
onConversionDataSuccess()
logic - Menerapkan
onConversionDataFail()
logic
Menentukan perilaku aplikasi pada peluncuran pertama
Menentukan perilaku aplikasi pada peluncuran pertama:
Dapatkan dari pemasar: Perilaku tautan yang diharapkan saat diklik dan aplikasi dibuka untuk pertama kalinya.
Input metode perencanaan
For deferred deep linking, the onConversionDataSuccess
method input must be planned and the input decided in the previous section (for deep linking) is made relevant for the first time the app is launched.
The onConversionDataSuccess
method gets the deep_link_value
dan variabel lainnya sebagai masukan seperti ini: AnyHashable: Any
.
Peta menyimpan dua jenis data:
- Data atribusi
- Data defined by the marketer in the link (
deep_link_value
and other parameters and values)
Other parameters can be either:- Parameter resmi AppsFlyer.
- Parameter dan nilai khusus yang dipilih oleh pemasar dan programmer.
- Struktur data input dijelaskan di sini .
The marketer and developers need to plan the deep_link_value
(and other possible parameters and values) together based on the desired app behavior when the link is clicked.
To plan the deep_link_value
, and other parameter names and values based on the expected link behavior:
- Beri tahu pemasar parameter dan nilai apa yang diperlukan untuk menerapkan perilaku aplikasi yang diinginkan.
- Decide on naming conventions for the
deep_link_value
and other parameters and values.
Note:- Parameter kustom tidak akan muncul dalam data lengkap yang dikumpulkan di AppsFlyer.
- Data konversi tidak akan mengembalikan parameter kustom yang disebut "nama, " dengan huruf kecil "n".
Menerapkan logika onConversionDataSuccess()
When the app is opened for the first time, the onConversionDataSuccess
method is triggered in the main activity. The deep_link_value
and other parameters in the method input are used to implement the specific user experience when the app is first launched.
Untuk menerapkan logika :
- Menerapkan logika berdasarkan parameter dan nilai yang dipilih. Lihat contoh kode berikut.
- Setelah selesai, kirim konfirmasi ke pemasar bahwa aplikasi berperilaku sesuai.
Kode sampel
// Handle Organic/Non-organic installation
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
print("onConversionDataSuccess data:")
for (key, value) in data {
print(key, ":", value)
}
if let status = data["af_status"] as? String {
if (status == "Non-organic") {
if let sourceID = data["media_source"],
let campaign = data["campaign"] {
print("This is a Non-Organic install. Media source: \(sourceID) Campaign: \(campaign)")
}
} else {
print("This is an organic install.")
}
if let is_first_launch = data["is_first_launch"] as? Bool,
is_first_launch {
print("First Launch")
if let fruit_name = data["deep_link_value"]
{
// The key 'deep_link_value' exists only in OneLink originated installs
print("deferred deep-linking to \(fruit_name)")
walkToSceneWithParams(params: data)
}
else {
print("Install from a non-owned media")
}
} else {
print("Not First Launch")
}
}
}
⇲ Tautan Github Swift
Menerapkan logika onConversionDataFailure()
The onConversionDataFailure
method is called whenever the call to onConversionDataSuccess
fails. The function should report the error and create an expected experience for the user.
To implement the onConversionDataFailure
metode :
func onConversionDataFail(_ error: Error) {
print("\(error)")
}
⇲ Tautan Github Swift
Payload sampel iOS
Lihat contoh payload berikut untuk Tautan Universal, skema URI, dan deferred deep linking. Sampel berisi payload penuh, relevan ketika semua parameter di halaman pengaturann tautan kustom Onelink berisi data.
Catatan : Payload kembali sebagai peta. Namun, untuk kejelasan, contoh payload berikut ditampilkan dalam bentuk JSON.
Universal Links
Input ke onAppOpenAttribution(_ attributionData: [AnyHashable: Any])
{
"af_ad": "my_adname",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_channel": "my_channel",
"af_click_lookback": "20d",
"af_cost_currency": "USD",
"af_cost_value": 6,
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"af_sub1": "my_sub1",
"af_sub2": "my_sub2",
"c": "fruit_of_the_month",
"campaign": "fruit_of_the_month",
"fruit_amount": 26,
"fruit_name": "apples",
"is_retargeting": true,
"link": "https://onelink-basic-app.onelink.me/H5hv/6d66214a",
"media_source": "Email",
"pid": "Email"
}
{
"path": "/H5hv",
"af_android_url": "https://my_android_lp.com",
"af_channel": "my_channel",
"host": "onelink-basic-app.onelink.me",
"af_adset": "my_adset",
"pid": "Email",
"scheme": "https",
"af_dp": "afbasicapp://mainactivity",
"af_sub1": "my_sub1",
"fruit_name": "apples",
"af_ad": "my_adname",
"af_click_lookback": "20d",
"fruit_amount": 16,
"af_sub2": "my_sub2",
"link": "https://onelink-basic-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month&af_channel=my_channel&af_adset=my_adset&af_ad=my_adname&af_sub1=my_sub1&af_sub2=my_sub2&fruit_name=apples&fruit_amount=16&af_cost_currency=USD&af_cost_value=6&af_click_lookback=20d&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_android_url=https%3A%2F%2Fmy_android_lp.com",
"af_cost_currency": "USD",
"c": "fruit_of_the_month",
"af_ios_url": "https://my_ios_lp.com",
"af_cost_value": 6
}
URI scheme
Input ke onAppOpenAttribution(_ attributionData: [AnyHashable: Any])
{
"af_click_lookback ": "25d",
"af_sub1 ": "my_sub1",
"shortlink ": "9270d092",
"af_deeplink ": true,
"media_source ": "Email",
"campaign ": "my_campaign",
"af_cost_currency ": "NZD",
"host ": "mainactivity",
"af_ios_url ": "https://my_ios_lp.com",
"scheme ": "afbasicapp",
"path ": "",
"af_cost_value ": 5,
"af_adset ": "my_adset",
"af_ad ": "my_adname",
"af_android_url ": "https://my_android_lp.com",
"af_sub2 ": "my_sub2",
"af_force_deeplink ": true,
"fruit_amount ": 15,
"af_dp ": "afbasicapp://mainactivity",
"link ": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_force_deeplink=true&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email&shortlink=9270d092",
"af_channel ": "my_channel",
"is_retargeting ": true,
"af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
"fruit_name ": "apples"
}
{
"af_ad ": "my_adname",
"fruit_name ": "apples",
"host ": "mainactivity",
"af_channel ": "my_channel",
"link ": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_force_deeplink=true&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email",
"af_deeplink ": true,
"campaign ": "my_campaign",
"af_sub1 ": "my_sub1",
"af_click_lookback ": "25d",
"af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
"path ": "",
"af_sub2 ": "my_sub2",
"af_ios_url ": "https://my_ios_lp.com",
"af_cost_value ": 5,
"fruit_amount ": 15,
"is_retargeting ": true,
"scheme ": "afbasicapp",
"af_force_deeplink ": true,
"af_adset ": "my_adset",
"media_source ": "Email",
"af_cost_currency ": "NZD",
"af_dp ": "afbasicapp://mainactivity",
"af_android_url ": "https://my_android_lp.com"
}
Deferred deep linking
Input ke onConversionDataSuccess(_ data: [AnyHashable: Any])
{
"adgroup": null,
"adgroup_id": null,
"adset": null,
"adset_id": null,
"af_ad": "my_adname",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_channel": "my_channel",
"af_click_lookback": "20d",
"af_cost_currency": "USD",
"af_cost_value": 6,
"af_cpi": null,
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"af_siteid": null,
"af_status": "Non-organic",
"af_sub1": "my_sub1",
"af_sub2": "my_sub2",
"af_sub3": null,
"af_sub4": null,
"af_sub5": null,
"agency": null,
"campaign": "fruit_of_the_month ",
"campaign_id": null,
"click_time": "2020-08-12 15:08:00.770",
"cost_cents_USD": 600,
"engmnt_source": null,
"esp_name": null,
"fruit_amount": 26,
"fruit_name": "apples",
"http_referrer": null,
"install_time": "2020-08-12 15:08:33.335",
"is_branded_link": null,
"is_first_launch": 1,
"is_retargeting": true,
"is_universal_link": null,
"iscache": 1,
"match_type": "probabilistic",
"media_source": "Email",
"orig_cost": "6.0",
"redirect_response_data": null,
"retargeting_conversion_type": "none",
"shortlink": "6d66214a"
}
Diperbarui 3 bulan yang lalu