Integrasikan SDK AppsFlyer ke dalam app iOS Anda, catat install, pembaruan, dan in-app event. Evaluasi interaksi user.
Versi SDK: 5.0.0 (Catatan rilis)
1. Garis Besar
Dengan menggunakan SDK AppsFlyer, Anda dapat mencatat install, pembaruan, sesi, dan in-app event tambahan. Dengan menggunakan in-app event, Anda dapat mencatat event seperti pembelian in-app dan level game. Gunakan informasi ini untuk mengevaluasi ROI dan level interaksi user. SDK iOS kompatibel dengan semua perangkat iOS (iPhone, iPod, iPad) dengan iOS 6.0 dan yang lebih baru.
Catatan
SDK AppsFlyer sepenuhnya mematuhi jaringan IPv6 DNS64/NAT64 milik Apple. Untuk informasi lebih lanjut, klik di sini.
Penting!
SDK AppsFlyer memanfaatkan kelas NSUserDefaults. Menghapus semua data dari NSUserDefaults dapat menyebabkan masalah atribusi.
Tips
- Agar dapat menerapkan integrasi SDK dasar, yaitu hanya atribusi install, maka prosedur di bagian 2 dan 3 di dokumen ini wajib untuk diselesaikan.
- Anda disarankan membaca bagian Mencatat in-app event untuk bantuan dalam implementasi
- Fitur lain yang dijelaskan bersifat opsional dan pengimplementasiannya akan bergantung pada logika bisnis aplikasi Anda. Misalnya, mencatat pendapatan atau mendapatkan data konversi pada peluncuran pertama mungkin penting untuk alur app Anda
2. Mulai
2.1 Mendownload dan menambahkan SDK AppsFlyer ke xcode
- Pastikan Anda telah mengunduh dan menginstal CocoaPods versi terbaru.
- Tambahkan baris berikut ke
Podfile
Anda:pod 'AppsFlyerFramework'
- jalankan
pod install
- Pastikan Anda menggunakan file
.xcworkspace
untuk membuka proyek dalam Xcode, bukan menggunakan file.xcodeproj
mulai sekarang.
- Pastikan Anda telah menginstal Carthage versi terbaru.
- Tambahkan baris berikut ke Cartfile Anda:
- binary "https://raw.githubusercontent.com/AppsFlyerSDK/AppsFlyerFramework/master/AppsFlyerTracker.json"
Catatan
Pendekatan ini hanya kompatibel dengan iOS 8 dan di atasnya.
- Download SDK iOS sebagai framework statis
Untuk memverifikasi validitas hasil download framework statis SDK, klik di sini. - Unzip file AppsFlyerLib.framework.zip yang baru saja diunduh
- Geser AppsFlyerLib.framework dan jatuhkan file ke proyek Xcode
- Pastikan Menyalin item jika diperlukan tercentang
- Tambahkan AdSupport.framework dan iAd.framework ke proyek Anda dan atur kedua framework tersebut sebagai Opsional
Catatan
- Pendekatan ini hanya disarankan jika Anda ingin mendukung iOS 7 di aplikasi Anda.
- Saat mengimpor Static Lib ke suatu proyek Swift, file
AppsFlyerTrackher.h
harus ditambahkan sebagai header bridging proyek Anda.
- Download SDK iOS sebagai library statis
Untuk memverifikasi validitas hasil download library statis SDK, klikdi sini. - Unzip file yang Anda unduh
- Geser & jatuhkan file AppsFlyerTracker.h dan libAppsFlyerLib.a ke proyek Xcode Anda
- Pastikan Menyalin item jika diperlukan tercentang
- Tambahkan AdSupport.framework dan iAd.framework ke proyek Anda dan atur kedua framework tersebut sebagai Opsional
SDK AppsFlyer menggunakan framework asli berikut:
- AdSupport.framework
- Framework ini diperlukan untuk mengumpulkan IDFA dari perangkat user.
Tanpa IDFA Anda tidak dapat mengatribusikan install ke Facebook Ads, Twitter, Google Ads, dan jaringan lainnya. - iAd.framework
- Framework ini diperlukan untuk merekam dan mengukur performa Apple Search Ads pada app Anda
2.2 Mengonfigurasi integrasi delegasi in-app
Di AppDelegae.swift, lakukan hal berikut:
- impor AppsFlyerLib
- Tambahkan
AppsFlyerTrackerDelegate
ke deklarasi kelas
impor class AppDelegate AppsFlyerLib
: UIResponder, UIApplicationDelegate, AppsFlyerTrackerDelegate {
// your code here
}
Di AppDelegate.h, lakukan hal berikut:
- Impor
AppsFlyerLib/AppsFlyerTracker.h
- Tambahkan
AppsFlyerTrackerDelegate
ke deklarasi antarmuka
#import <AppsFlyerLib/AppsFlyerTracker.h>
@interface AppDelegate: UIResponder <UIApplicationDelegate, AppsFlyerTrackerDelegate>
Di AppDelegate.m, impor AppsFlyerLib/AppsFlyerTracker.h
#import <AppsFlyerLib/AppsFlyerTracker.h>
3. Inisiasi SDK
Inisialisasi SDK di metode didFinishLaunchingWithOptions
menggunakan app ID Anda yang diambil dari iTunes Connect dan kode pengembang AppsFlyer Anda. Selain itu, tambahkan metode API untuk menangani data konversi dan deep linking.
Harap diperhatikan bahwa Anda perlu mengatur app ID hanya dengan angka, tanpa awalan "id".
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
AppsFlyerTracker.shared().appsFlyerDevKey = ""
AppsFlyerTracker.shared().appleAppID = ""
AppsFlyerTracker.shared().delegate = self
/* Set isDebug to true to see AppsFlyer debug logs */
AppsFlyerTracker.shared().isDebug = true
return true
}
// rest of your code, methods such as applicationWillResignActive, applicationDidEnterBackground etc.
//get conversion data and deep linking
func onConversionDataReceived(_ installData: [AnyHashable: Any]) {
//Handle Conversion Data (Deferred Deep Link)
}
func onConversionDataRequestFailure(_ error: Error?) {
// print("\(error)")
}
func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
//Handle Deep Link Data
}
func onAppOpenAttributionFailure(_ error: Error?) {
}
// Reports app open from a Universal Link for iOS 9 or later
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
AppsFlyerTracker.shared().continue(userActivity, restorationHandler: restorationHandler)
return true
}
// Reports app open from deep link from apps which do not support Universal Links (Twitter) and for iOS8 and below
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
AppsFlyerTracker.shared().handleOpen(url, sourceApplication: sourceApplication, withAnnotation: annotation)
return true
}
// Reports app open from deep link for iOS 10 or later
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
AppsFlyerTracker.shared().handleOpen(url, options: options)
return true
}
Untuk Swift 4.2 ke atas, gunakan kode berikut untuk metode continue userActivity
:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
AppsFlyerTracker.shared().continue(userActivity, restorationHandler: nil)
return true
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/** APPSFLYER INIT **/
[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"<DEV_KEY>";
[AppsFlyerTracker sharedTracker].appleAppID = @"<APP_ID>";
[AppsFlyerTracker sharedTracker].delegate = self;
/* Set isDebug to true to see AppsFlyer debug logs */
[AppsFlyerTracker sharedTracker].isDebug = true;
return YES;
}
// rest of your code, methods such as applicationWillResignActive, applicationDidEnterBackground etc.
//get conversion data and deep linking
-(void)onConversionDataReceived:(NSDictionary*) installData {
//Handle Conversion Data (Deferred Deep Link)
}
-(void)onConversionDataRequestFailure:(NSError *) error {
NSLog(@"%@",error);
}
- (void) onAppOpenAttribution:(NSDictionary*) attributionData {
//Handle Deep Link
}
- (void) onAppOpenAttributionFailure:(NSError *)error {
NSLog(@"%@",error);
}
// Reports app open from a Universal Link for iOS 9 or above
- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id> *restorableObjects))restorationHandler {
[[AppsFlyerTracker sharedTracker] continueUserActivity:userActivity restorationHandler:restorationHandler];
return YES;
}
// Reports app open from deep link from apps which do not support Universal Links (Twitter) and for iOS8 and below
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
[[AppsFlyerTracker sharedTracker] handleOpenURL:url sourceApplication:sourceApplication withAnnotation:annotation];
return YES;
}
// Reports app open from deep link for iOS 10
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
options:(NSDictionary *) options {
[[AppsFlyerTracker sharedTracker] handleOpenUrl:url options:options];
return YES;
}
Catatan
Log SDK AppsFlyer akan ditampilkan di Konsol xCode jika isDebug=true
telah diatur
- Tambahkan kode berikut pada fungsi
applicationDidBecomeActive
:
func applicationDidBecomeActive(application: UIApplication) {
// attribute Installs, updates & sessions(app opens)
// (You must include this API to enable SDK functions)
AppsFlyerTracker.shared().trackAppLaunch()
// your other code here.... }
- (void)applicationDidBecomeActive:(UIApplication *)application {
// attribute Installs, updates & sessions(app opens)
// (You must include this API to enable SDK functions)
[[AppsFlyerTracker sharedTracker] trackAppLaunch];
// your other code here.... }
Memverifikasi Keberhasilan Peluncuran Aplikasi Pengukur
Anda dapat memverifikasi permintaan untuk mengukur keberhasilan peluncuran aplikasi dengan menerapkan trackAppLaunchWithCompletionHandler
. Kemudian Anda dapat menerapkan logika untuk menangani keberhasilan atau kegagalan pengukuran peluncuran aplikasi.
Contoh
[[AppsFlyerTracker sharedTracker] trackAppLaunchWithCompletionHandler:^(NSDictionary<NSString *,id> *dictionary, NSError *error) {
if (error) {
NSLog(@"%@", error);
return;
}
if (dictionary) {
NSLog(@"%@", dictionary);
return;
}
[NSException exceptionWithName:@"fatalError" reason:nil userInfo:nil];
}];
4. Merekam In-App Event
In-App Event memberikan informasi tentang hal yang terjadi didalam app Anda. Anda disarankan untuk meluangkan waktu dan menentukan event yang ingin Anda ukur agar Anda dapat mengukur ROI (Return on Investment) dan LTV (Lifetime Value).
Perekaman in-app event dilakukan dengan memanggil trackEvent
dengan nama event dan parameter nilai. Lihat In-App Event untuk keterangan lebih detail.
Nama event dalam-aplikasi tidak boleh lebih dari 45 karakter. Nama Event yang melebihi 45 karakter tidak muncul di dashboard, namun hanya tertera di laporan data lengkap, API Pull dan API Push.
Contoh: In-App Event Pembelian
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
withValues: [
AFEventParamRevenue: "1200",
AFEventParamContent: "shoes",
AFEventParamContentId: "123"
]);
Hal ini menghasilkan tipe event af_purchase
(menggunakan konstanta AFEventPurchase
) dengan nilai event berikut: {af_revenue: 200 , af_currency: "USD", af_quantity: 2, af_content_id: "092" af_receipt_id: "9277"}
Catatan
AppsFlyer mendukung karakter non-Inggris dalam in-app event, atau dengan SDK API lainnya, mulai dari SDK iOS versi 4.8.1.
Untuk pendapatan, jangan tambahkan simbol mata uang karena hal ini tidak akan dikenali.
Contoh Penggunaan
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
withValues: [
AFEventParamRevenue: @1200,
AFEventParamCurrency : @"JPY"
]);
[[AppsFlyerTracker sharedTracker] trackEvent: AFEventPurchase
withValues: @{
AFEventParamRevenue: @1200, AFEventParamCurrency: @"JPY"
}];
Memverifikasi Rekaman In-App Event
Anda dapat verifikasi rekaman in-app event ini berhasil atau tidak dengan menerapkan completionHandler
. Kemudian Anda dapat menerapkan logika untuk menangani keberhasilan atau kegagalan rekaman event.
Contoh
[[AppsFlyerTracker sharedTracker] trackEventWithEventName:AFEventPurchase
eventValues:@{AFEventParamRevenue: @"1200",
AFEventParamContent: @"shoes",
AFEventParamContentId: @"123"}
completionHandler:^(NSDictionary<NSString *,id> *dictionary, NSError *error) {
if (error) {
NSLog(@"%@", error);
return;
}
if (dictionary) {
NSLog(@"%@", dictionary);
return;
}
[NSException exceptionWithName:@"fatalError" reason:nil userInfo:nil];
5. Melakukan Tautan Langsung
Tips
Kami sangat menyarankan Deep Linking terintegrasi dalam aplikasi Anda. Deep Linking merupakan bagian penting dari kampanye retargeting dan sangat disarankan penggunaannya saat menjalankan kampanye retargeting.
iOS 9 dan di atasnya memerlukan aplikasi yang mendukung Universal Links. Untuk informasi lebih lanjut, klik di sini.
Untuk menangani deep linking, tambahkan kode berikut ke app Anda (pada kelas delegasi aplikasi). Metode pada kode ini memungkinkan Anda untuk mendapatkan data deep linking. Dengan data deep linking, Anda dapat mengarahkan user ke aktivitas app yang relevan dan memberikan konten yang relevan pula.
func onConversionDataReceived(_ installData: [AnyHashable: Any]) {
//Handle Conversion Data (Deferred Deep Link)
}
func onConversionDataRequestFailure(_ error: Error?) {
// print("\(error)")
}
func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
//Handle Deep Link Data
}
func onAppOpenAttributionFailure(_ error: Error?) {
}
// Reports app open from a Universal Link for iOS 9 or later
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
AppsFlyerTracker.shared().continue(userActivity, restorationHandler: restorationHandler)
return true
}
// Reports app open from deep link from apps which do not support Universal Links (Twitter) and for iOS8 and below
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
AppsFlyerTracker.shared().handleOpen(url, sourceApplication: sourceApplication, withAnnotation: annotation)
return true
}
// Reports app open from deep link for iOS 10 or later
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
AppsFlyerTracker.shared().handleOpen(url, options: options)
return true
}
Untuk Swift 4.2 ke atas, gunakan kode berikut untuk metode continue userActivity
:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
AppsFlyerTracker.shared().continue(userActivity, restorationHandler: nil)
return true
}
-(void)onConversionDataReceived:(NSDictionary*) installData {
//Handle Conversion Data (Deferred Deep Link)
}
-(void)onConversionDataRequestFailure:(NSError *) error {
NSLog(@"%@",error);
}
- (void) onAppOpenAttribution:(NSDictionary*) attributionData {
//Handle Deep Link
}
- (void) onAppOpenAttributionFailure:(NSError *)error {
NSLog(@"%@",error);
}
// Reports app open from a Universal Link for iOS 9 or above
- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {
[[AppsFlyerTracker sharedTracker] continueUserActivity:userActivity restorationHandler:restorationHandler];
return YES;
}
// Reports app open from deep link from apps which do not support Universal Links (Twitter) and for iOS8 and below
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
[[AppsFlyerTracker sharedTracker] handleOpenURL:url sourceApplication:sourceApplication withAnnotation:annotation];
return YES;
}
// Reports app open from deep link for iOS 10
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
options:(NSDictionary *) options {
[[AppsFlyerTracker sharedTracker] handleOpenUrl:url options:options];
return YES;
}
6. Merekam Pendapatan
Gunakan parameter event af_revenue
(AFEventParamRevenue
) untuk menghitung jumlah pendapatan sebagai bagian dari in-app event. Anda dapat mengisinya dengan nilai numerik, positif maupun negatif.
Catatan
AFEventParamRevenue
(sama dengan penggunaan af_revenue
) adalah SATU-SATUNYA parameter event yang dianggap oleh AppsFlyer sebagai nilai pendapatan pada data lengkap dan dashboard. Untuk detail lebih lanjut klik di sini.
Contoh: Pendapatan dari event didalam aplikasi
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
withValues: [
AFEventParamContentId:"1234567",
AFEventParamContentType : "category_a",
AFEventParamRevenue: 1.99,
AFEventParamCurrency:"USD"
]);
[[AppsFlyerTracker sharedTracker] trackEvent: AFEventPurchase
withValues:@{
AFEventParamContentId:@"1234567",
AFEventParamContentType : @"category_a",
AFEventParamRevenue: @1.99,
AFEventParamCurrency:@"USD"
}];
Penting!
JANGAN memformat nilai pendapatan dengan cara apa pun. Nilai tidak boleh berisi pemisah koma, simbol mata uang, atau teks. Misalnya, event pendapatan harus serupa dengan 1234.56.
Merekam Pendapatan Negatif
Jika Anda perlu merekam pendapatan negatif, misalnya saat user membatalkan pembelian atau menerima pengembalian dana, Anda dapat mengirimkan pendapatan negatif.
AppsFlyerTracker.shared().trackEvent("cancel_purchase",
withValues: [
AFEventParamContentId:"1234567",
AFEventParamContentType : "category_a",
AFEventParamRevenue: -1.99,
AFEventParamCurrency:"USD"
]);
[[AppsFlyerTracker sharedTracker] trackEvent: @"cancel_purchase"
withValues:@{
AFEventParamContentId:@"1234567",
AFEventParamContentType : @"category_a",
AFEventParamRevenue: @-1.99,
AFEventParamCurrency:@"USD"
}];
Catatan
Pada kode di atas, perhatikan beberapa hal berikut:
- Nilai pendapatan didahului dengan tanda minus
- Nama event memiliki nama unik "cancel_purchase" - agar Anda dapat mengidentifikasi event pendapatan negatif di dashboard dan laporan data lengkap
7. Memperoleh Data Konversi
AppsFlyer memungkinkan Anda untuk mengakses data atribusi pengguna secara aktual untuk setiap instalasi baru, langsung dari SDK. Dengan ini, Anda dapat melayani pengguna dengan menyajikan konten yang dipersonalisasi atau mengirimkan halaman spesifik dalam aplikasi kepada mereka, yang secara signifikan dapat meningkatkan interaksi pengguna dengan aplikasi Anda.
Untuk informasi lebih lanjut tentang fungsi ini, klik di sini.
8. Pengidentifikasi Pengguna
Ada beberapa pilihan untuk memperoleh pengidentifikasi pengguna:
Memperoleh AppsFlyer Device ID
AppsFlyer Device ID dibuat untuk setiap instalasi aplikasi baru. Anda dapat memperolehnya dengan menggunakan kode berikut:
let appsflyerId = AppsFlyerTracker.shared().getAppsFlyerUID()
NSString *appsflyerId = [AppsFlyerTracker sharedTracker].getAppsFlyerUID;
Mengatur ID Pengguna Pelanggan
Dengan mengatur ID pelanggan Anda sendiri, Anda dapat membandingkan ID pelanggan Anda dengan ID unik AppsFlyer dan ID perangkat lainnya. ID tersedia di laporan raw data dan API Postback AppsFlyer untuk digunakan sebagai perbandingan dengan ID internal Anda.
Cara mengatur ID Pengguna Pelanggan Anda:
AppsFlyerTracker.shared().customerUserID = "my user id"
[AppsFlyerTracker sharedTracker].customerUserID = @"my user id";
Catatan Penting
Sebaiknya atur Customer User ID
sesegera mungkin karena ID hanya terkait dengan event yang dilaporkan setelah ID dibuat. Jika setCustomerUserId
sudah dipanggil sebelum memanggil trackAppLaunch
, ID Pengguna Pelanggan dapat dilihat di ekspor raw data untuk install dan event. Jika setCustomerUserId diatur setelahnya, Anda akan melihat nilai tersebut hanya untuk event yang direkam setelah memanggil metode ini.
ID User Kustomer dapat juga digunakan untuk melengkapi integrasi dengan platform Analisis seperti Mixpanel dan Swrve.
Memperoleh ID Pengguna Pelanggan:
Untuk mendapat customer user ID, ambil dari sharedTracker.
[AppsFlyerTracker sharedTracker].customerUserID
Penting!
Pastikan untuk mengatur customer user ID setiap kali app diluncurkan, sebelum memanggil trackAppLaunch
Untuk informasi lebih lanjut tentang Customer User ID, klik di sini.
IDFA dan IDFV
AppsFlyer secara otomatis mengumpulkan IDFA (ID Untuk Pengiklan) dan IDFV (ID Untuk Vendor) jika AdSupport.framework dimuat di aplikasi.
9. Fitur Pilihan
Mengukur Uninstall
Untuk pengukuran uninstall, aktifkan push notification pada app Anda. Lihat Panduan Pemrograman Pemberitahuan Remote dari Apple untuk informasi lebih lanjut.
Ikuti petunjuk integrasi SDK iOS untuk menyelesaikan pengaturan fitur pengukuran uninstall.
Rekaman Notifikasi Push
Untuk mengaktifkan Pengukuran aplikasi dibuka dari push notification, tambahkan kode berikut ke delegasi aplikasi:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
AppsFlyerTracker.shared().handlePushNotification(userInfo)
}
-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[[AppsFlyerTracker sharedTracker] handlePushNotification:userInfo];
}
Pesan push harus memiliki parameter af
dengan parameter atribusi AppsFlyer.
Contoh Pesan:
{
"aps":{
"alert":"Push text",
"sound":"default",
"category":"REMINDER_CATEGORY"
},
"_p":123456,
"payloadKey":"payloadValue",
"af":{
"pid":"swrve_int",
"is_retargeting":"true",
"c":"test_campaign"
}
}
Atribusi Promosi Silang
AppsFlyer memungkinkan Anda untuk mengatribusikan dan merekam install yang berasal dari promosi silang salah satu app Anda yang dimiliki user saat ini. Aplikasi promosi silang dapat menjadi faktor pertumbuhan utama dalam mendorong install tambahan untuk app Anda.
Untuk detail lebih lanjut, lihat artikel tentang Atribusi Promosi Silang, di sini.
Atribusi Undangan Pengguna
Mengatur Kode Mata Uang
Nilai default adalah USD. Anda dapat melihat kode mata uang ISO yang dapat diterima di sini.
Gunakan API berikut untuk mengatur kode mata uang:
public void currencyCode(String currencyCode);
Contoh Penggunaan:
Appsflyertracker.shared().currencycode = "USD"
[AppsFlyerTracker sharedTracker].currencyCode = @"USD";
Validasi Pembelian Dalam-Aplikasi
Catatan
Fungsi ini didukung untuk iOS 7 dan di atasnya.
SDK AppsFlyer dapat memberi informasi pembelian in‐app dan memverifikasikannya melalui server. Untuk mengukur penerimaan yang tervalidasi, Anda perlu memanggil metode validateAndTrackInAppPurchase di dalam callback SKStoreKit:completeTransaction. Panggilan ini secara otomatis akn menghasilkan in‐app event af_purchase.
- (void) validateAndTrackInAppPurchase:(NSString *) productIdentifier
price:(NSString *) price
currency:(NSString *) currency
transactionId:(NSString *) tranactionId
additionalParameters:(NSDictionary *) params
success:(void (^)(NSDictionary *response)) successBlock
failure:(void (^)(NSError *error, id reponse)) failedBlock;
Catatan
Parameter harga harus berisi total pendapatan yang terkait dengan validasi event pembelian.
Panggilan ini memiliki dua blok callback, satu untuk ‘success’ dan satu lainnya untuk ‘failure’ (untuk alasan apa pun, termasuk kegagalan validasi). Saat panggilan berhasil, sebuah paket data dikembalikan beserta dengan data validasi penerimaan dari server Apple.
Penting
Untuk tujuan pengujian, kami menyarankan pengaturan notifikasi useReceiptValidationSandbox ke YES, karena ini akan mengarahkan permintaan ke server sandbox Apple.
#ifdef DEBUG
[AppsFlyerTracker sharedTracker].useReceiptValidationSandbox = YES;
#endif
Contoh
[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:@"ProductIdentifier" price:@"price"
currency:@"USD"
transactionId:@"transactionID"
additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
success:^(NSDictionary *result){
NSLog(@"Purchase succeeded And verified!!! response: %@", result[@"receipt"]);
} failure:^(NSError *error, id response) {
NSLog(@"response = %@", response);
if([response isKindOfClass:[NSDictionary class]]) {
if([response[@"status"] isEqualToString:@"in_app_arr_empty"]){
// retry with 'SKReceiptRefreshRequest' because
// Apple has returned an empty response
// <YOUR CODE HERE>
}
} else {
//handle other errors
return;
}
}];
AppsFlyerTracker
.shared()?
.validateAndTrack(inAppPurchase: "productIdentifier",
price: "price",
currency: "currency",
transactionId: "transactionId",
additionalParameters: [:],
success: {
guard let dictionary = $0 as? [String:Any] else { return }
dump(dictionary)
}, failure: { error, result in
guard let emptyInApp = result as? [String:Any],
let status = emptyInApp["status"] as? String,
status == "in_app_arr_empty" else {
// Try to handle other errors
return
}
// retry with 'SKReceiptRefreshRequest' because
// Apple has returned an empty response
// <YOUR CODE HERE>
})
Penting!
Ketika AppsFlyer memvalidasi pembelian terhadap server Apple, dan jika balasannya berisi array in-app
kosong, maka AppsFlyer akan mengembalikan {"status":"in_app_arr_empty"}
ke callback error.
Jika Anda menerima notifikasi ini, Anda harus mengembalikan produk yang dibeli menggunakan Apple dengan cara mengirimkan permintaan tanda terima. Untuk informasi lebih lanjut lihat dokumentasi Apple.
Setelah tanda terima di-refresh, panggil validateAndTrackInAppPurchase
sekali lagi.
Lihat kode di atas untuk mempelajari cara menangani kesalahan ini.
Untuk melihat daftar kemungkinan nilai yang dikembalikan untuk validasi penerimaan, silakan baca dokumentasi Apple di sini.
Penganoniman
AppsFlyer memberi Anda metode untuk menganonimkan identifier pengguna tertentu dari analisis AppsFlyer. Metode ini sesuai dengan persyaratan privasi terbaru dan sesuai kebijakan data dan privasi Facebook. Nilai defaultnya adalah NO, yang berarti penganoniman secara default tidak dilakukan.
Gunakan API ini saat inisialisasi SDK untuk menganonimkan instalasi,event dan sesi pengguna secara eksplisit:
AppsFlyerTracker.shared().deviceTrackingDisabled = true
[AppsFlyerTracker sharedTracker].deviceTrackingDisabled = YES;
Pengukuran dapat diulang dengan memanggil kembali deviceTrackingDisabled
dan mengaturnya ke false.
Peringatan
Penganoniman user berdampak KRUSIAL pada informasi atribusi Anda.Gunakan opsi ini HANYA untuk wilayah yang secara hukum mencegah Anda mengumpulkan informasi pengguna.
Waktu Antar Sesi Kustom
Secara default, setidaknya ada jeda selama 5 detik antara 2 peluncuran app agar terhitung sebagai 2 sesi terpisah (lebih lanjut tentang menghitung sesi).
Namun, Anda dapat menggunakan API berikut untuk menentukan suatu nilai sebagai waktu minimum yang diperlukan antar-sesi:
AppsFlyerTracker.shared().minTimeBetweenSessions = <your_custom_time_in_seconds>
[AppsFlyerTracker sharedTracker].minTimeBetweenSessions = <your_custom_time_in_seconds>;
Sesi Latar Belakang untuk Aplikasi Utilitas
Ekstensi Aplikasi iOS dan WatchKit
Ekstensi aplikasi ini memerlukan hak akses untuk menggunakan Internet:
- Silakan buka file info.plist ekstensi aplikasi Anda
- Pada
NSExtension
/NSExtensionAttributes
atur benderaRequestsOpenAccess
ke YES.
Tambahkan kode berikut ke UIViewController ekstensi aplikasi viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
AppsFlyerTracker.shared().appsFlyerDevKey = "MY_APPSFLYER_KEY"
// MY_APP_ID below stands for you app ID on iTunes Connect. Should be 9 or 10 digits.
AppsFlyerTracker.shared().appleAppID = "MY_APP_ID"
AppsFlyerTracker.sharedTracker().trackAppLaunch()
}
- (void)viewDidLoad {
[super viewDidLoad];
// Replace MY_APPSFLYER_KEY below by your AppsFlyer dev key
[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"MY_APPSFLYER_KEY";
// MY_APP_ID below stands for you app ID on iTunes Connect. Should be 9 or 10 digits.
[AppsFlyerTracker sharedTracker].appleAppID = @"MY_APP_ID";
[[AppsFlyerTracker sharedTracker] trackAppLaunch];
}
Untuk menerima data atribusi pada ekstensi aplikasi, ikuti instruksi di sini dan terapkan pada UIViewController
aplikasi Anda, bukan pada AppDelegate.
Opt-Out
Dalam beberapa kasus ekstrem, Anda mungkin diharuskan untuk mematikan semua fungsi SDK karena pemenuhan hukum dan privasi. Tindakan ini dapat dilakukan dengan isStopTracking API. Setelah API dipanggil, SDK kami tidak akan lagi berkomunikasi dengan server dan berhenti berfungsi.
Ada beberapa skenario berbeda untuk berhenti mengirim data user. Kami menyarankan anda untuk mengikuti instruksi yang sesuai dan relevan untuk app Anda.
Peringatan
Gunakan API ini hanya jika Anda ingin sepenuhnya mengabaikan user ini dari setiap dan semua atribusi install dan rekaman event. Penggunaan API ini berdampak KRITIS pada atribusi, pengumpulan data, dan mekanisme deep linking Anda.
AppsFlyerTracker.shared().isStopTracking = true
[AppsFlyerTracker sharedTracker].isStopTracking = true;
Penting
Jangan panggil trackAppLaunch
jika isStopTracking
diatur ke true
Penundaan inisialisasi SDK untuk customerUserID
Anda dapat menunda inisialisasi SDK hingga customerUserID ditentukan. Tindakan ini memastikan agar SDK tidak mulai berfungsi sampai customerUserID tersedia. Jika Anda menunda inisialisasi SDK, semua in-app event dan panggilan API SDK lainnya akan dibuang sampai customerUserID tersedia dan dicatat.
Anda dapat menambahkan logika ke applicationDidBecomeActive dalam iOS API agar dapat menunda inisialisasi SDK hingga ID user pelanggan ditentukan. Lihat contoh berikut ini:
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSString *customUserId = [[NSUserDefaults standardUserDefaults] stringForKey:@"customerUserId"]; // Your custom logic of retrieving CUID
if (customUserId != nil && ![customUserId isEqual: @""]) {
[AppsFlyerTracker sharedTracker].customerUserID = customUserId; // Set CUID in AppsFlyer SDK for this session
[[AppsFlyerTracker sharedTracker] trackAppLaunch]; // Track App Launch
}
}
func applicationDidBecomeActive(_ application: UIApplication) {
let customUserId = UserDefaults.standard.string(forKey: "customUserId") // your logic to retrieve CUID
if(customUserId != nil && customUserId != ""){
AppsFlyerTracker.shared().customerUserID = customUserId // Set CUID in AppsFlyer SDK for this session
AppsFlyerTracker.shared().trackAppLaunch() // Track App Launch
}
}
Mengumpulkan Nama Device
SDK AppsFlyer mengizinkan Anda untuk mengumpulkan Nama Perangkat untuk analisis internal Anda. Dalam aturan standar, fitur ini dinonaktifkan. Gunakan API berikut untuk mengaktifkan:
AppsFlyerTracker.shared().shouldCollectDeviceName = false
[AppsFlyerTracker sharedTracker].shouldCollectDeviceName = NO;
Penting
Nama Perangkat dianggap Data Pribadi di wilayah tertentu. Kumpulkan informasi ini hanya jika Anda diizinkan secara hukum dan telah menerima persetujuan secara eksplisit dari pengguna untuk melakukannya.
Mengatur Data Kustom Tambahan
parameter setAdditionalData diperlukan untuk integrasi dengan beberapa platform partner eksternal di level SDK, termasuk Segment, Adobe, dan Urban Airship. Gunakan API ini hanya jika artikel integrasi platform secara khusus menyatakan bahwa API setAdditionalData diperlukan.
Berikut ini adalah contoh kode untuk pengimplementasian setAdditionalData pada iOS menggunakan Objective-C atau Swift
NSDictionary* CustomDataMap = [[NSDictionary alloc] initWithObjectsAndKeys:@"value_of_param_1", @"custom_param_1", nil];
[[AppsFlyerTracker sharedTracker] setAdditionalData:CustomDataMap];
let CustomDataMap: [AnyHashable: Any] = [
"custom_param_1" : "value_of_param_1"
]
AppsFlyerTracker.shared().customData = CustomDataMap
Menyelesaikan Masalah Penggabungan URL Deep Link
Jika menggunakan OneLink yang mendukung Universal Link dan menggabungkan keduanya dengan Link Universal Pihak Ke-3, Anda dapat menggunakan setResolveDeepLinkURLs API untuk memberi tahu SDK AppsFlyer domain klik pemicu app yang harus diselesaikan oleh SDK, dan juga untuk menarik OneLink yang mendasarinya. Cara ini akan memungkinkan Anda untuk mempertahankan tautan langsung dan atribusi sembari menggabungkan OneLink dengan Link Universal pihak ke-3. Anda harus memanggil API ini sebelum inisialisasi SDK.
[AppsFlyerTracker sharedTracker].resolveDeepLinkURLs = @[@"example.com",@"click.example.com"];
AppsFlyerTracker.shared().resolveDeepLinkURLs = ["example.com", "click.example.com]
10. Menguji Integrasi Anda
Untuk informasi lebih lanjut tentang cara menguji integrasi Anda, klik di sini.
Sekarang Anda dapat mulai mengukur hasil media source yang Anda gunakan.
11. Mengirimkan Aplikasi ke App Store
Anda dapat melihat instruksi cara mengirimkan aplikasi Anda ke App Store di sini.
Komentar
Harap login untuk memberikan komentar.