دیپلینک
اگر از tracker URL های ادتریس با deep linking فعال استفاده میکنید، میتوانید URL deep link و محتوای آن را در اپ خود دریافت کنید.
کاربران میتوانند URL را چه اپ نصب باشد چه نباشد باز کنند:
| سناریو | اپ نصب است؟ | چه کسی deep link را تحویل میدهد |
|---|---|---|
| Standard (مستقیم) | بله | iOS اپ را باز کرده و لینک را از طریق universal link یا custom URL scheme تحویل میدهد. |
| Deferred | خیر | کاربر ابتدا از App Store نصب میکند. iOS به طور خودکار deferred deep link ها را تحویل نمیدهد. Adtrace SDK محتوای deep link را بعد از install فراهم میکند. |
| Reattribution | بله (re-engagement) | iOS لینک را مانند جریان standard تحویل میدهد. appWillOpenUrl را هم فراخوانی میکنید تا ادتریس بتواند re-engagement را attribute کند. |
Adtrace SDK را در application:didFinishLaunchingWithOptions: / application(_:didFinishLaunchingWithOptions:) مقداردهی اولیه کنید. اگر appWillOpenUrl را قبل از مقداردهی اولیه SDK فراخوانی کنید، دادههای attribution از deep link برای همیشه از دست میرود. NSURL را در صف قرار دهید و appWillOpenUrl را بعد از appDidLaunch فراخوانی کنید در صورت نیاز. به شروع کار با iOS SDK مراجعه کنید.
ترتیب معمول یکپارچهسازی:
- راهاندازی standard deep linking (universal link یا custom URL scheme).
- Reattribute از deep link ها با
appWillOpenUrlبرای کمپینهای re-engagement. - مدیریت deferred deep link ها با
AdtraceDelegateاگر کاربران ممکن است بعد از کلیک روی tracker URL نصب کنند.
راهاندازی standard deep linking
اگر کاربر قبلاً اپ را نصب کرده و یک tracker URL ادتریس که شامل اطلاعات deep link است را باز میکند، iOS میتواند اپ را اجرا کرده و آن deep link را تحویل دهد.
Universal link ها (iOS 9+، پیشنهادی)
Universal link روش پیشنهادی در iOS مدرن است. ادتریس بخش زیادی از راهاندازی universal link را در پشت صحنه مدیریت میکند، اما باید هم پنل ادتریس و هم پروژه Xcode را پیکربندی کنید.
مراحل راهاندازی
- Universal link ها را برای اپ خود در پنل ادتریس فعال کنید.
- Associated Domains را برای اپ خود در پورتال Apple Developer فعال کنید.
- در Xcode، Associated Domains را برای target خود فعال کنید و domain از پنل را با پیشوند
applinks:اضافه کنید. پیشوندhttp://یاhttps://را از domain حذف کنید. - لینک را در
continueUserActivityمدیریت کنید وwebpageURLرا parse کنید. - برای کمپینهای re-engagement،
appWillOpenUrlرا با URL فراخوانی کنید.
مثال: اگر پنل https://app.adtrace.io/your-domain را نشان میدهد، این را در Xcode Associated Domains اضافه کنید:
applinks:app.adtrace.io/your-domain
مدیریت universal link ها
application:continueUserActivity:restorationHandler: را در app delegate خود override کنید. URL universal link در userActivity.webpageURL است.
- Objective-C
- Swift
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
// از url برای منطق اپ استفاده کنید
[Adtrace appWillOpenUrl:url];
}
return YES;
}
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL {
// از url برای منطق اپ استفاده کنید
Adtrace.appWillOpenUrl(url)
}
return true
}
Custom URL scheme (قدیمی)
در iOS 8 و قبلتر، و برای اپهایی که هنوز از custom URL scheme استفاده میکنند، یک scheme یکتا در Info.plist اپ خود زیر URL types (CFBundleURLTypes) ثبت کنید، سپس application:openURL:options: را مدیریت کنید.
از همان scheme در پارامتر deep_link tracker URL خود (URL-encoded) استفاده کنید. برای مثال adtraceExample:// که به صورت adtraceExample%3A%2F%2F encode شده است.
- Objective-C
- Swift
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
// url شامل محتوای deep link شما است
[Adtrace appWillOpenUrl:url];
return YES;
}
func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// url شامل محتوای deep link شما است
Adtrace.appWillOpenUrl(url)
return true
}
باید مقدار پارامتر deep_link را در tracker URL URL-encode کنید. در اپ خود، مقداری که دریافت میکنید encode نشده است.
تبدیل universal link به custom scheme
اگر منطق اپ شما انتظار فرمت custom URL scheme دارد اما کاربر از طریق universal link میرسد، URL را با convertUniversalLink:scheme: تبدیل کنید.
Method signature
+ (NSURL *)convertUniversalLink:(NSURL *)url scheme:(NSString *)scheme;
| پارامتر | نوع | توضیح |
|---|---|---|
url | NSURL | URL universal link از continueUserActivity. |
scheme | NSString | نام custom URL scheme شما (برای مثال adtraceExample). |
مثال
- Objective-C
- Swift
NSURL *oldStyleDeeplink = [Adtrace convertUniversalLink:url scheme:@"adtraceExample"];
let oldStyleDeeplink = Adtrace.convertUniversalLink(url, scheme: "adtraceExample")
Reattribute از deep link ها
ادتریس از کمپینهای re-engagement با deep link پشتیبانی میکند. وقتی کاربری که قبلاً اپ را نصب کرده یک tracker URL با محتوای deep link را باز میکند، Adtrace SDK را فراخوانی کنید تا دادههای attribution جدید را از لینک بخواند و به backend ادتریس ارسال کند.
ابتدا راهاندازی standard deep linking را کامل کنید، سپس appWillOpenUrl را هر جا که لینکهای ورودی را مدیریت میکنی د اضافه کنید.
Method signature
+ (void)appWillOpenUrl:(NSURL *)url;
| پارامتر | نوع | توضیح |
|---|---|---|
url | NSURL | URL deep link از continueUserActivity یا openURL. |
اگر appWillOpenUrl را قبل از [Adtrace appDidLaunch:] / Adtrace.appDidLaunch(...) فراخوانی کنید، دادههای attribution از deep link برای همیشه از دست میرود. URL را در صف قرار دهید و appWillOpenUrl را بعد از شروع SDK فراخوانی کنید.
SDK URL را برای اطلاعات attribution جدید بررسی میکند. اگر دادهای پیدا کرد، آن را برای reattribution به ادتریس ارسال میکند. از دریافت اطلاعات attribution برای خواندن attribution بهروز در اپ خود استفاده کنید.
appWillOpenUrl را از handler universal link یا custom scheme خود فراخوانی کنید (نمونههای بالا را ببینید).
اپهای WebBridge
اگر اپ از WebBridge استفاده میکند، میتوانید appWillOpenUrl را از JavaScript bridge در WebView وقتی یک deep link در لایه وب باز میشود فراخوانی کنید:
Adtrace.appWillOpenUrl(deeplinkUrl);
مدیریت deferred deep link ها
Deferred deep linking زمانی اعمال میشود که کاربر اپ شما را نصب نکرده باشد. آنها یک tracker URL با deep_link را باز میکنند، از App Store نصب میکنند، سپس آن را باز میکنند. iOS آن deep link را به صورت native تحویل نمیدهد. Adtrace SDK محتوای deep link را بعد از install فراهم میکند.
به طور پیشفرض، Adtrace SDK deferred deep link ها را به صورت خودکار باز میکند. AdtraceDelegate را پیادهسازی کنید اگر میخواهید کنترل کنید SDK لینک را باز میکند یا نه.
از همان پروتکل AdtraceDelegate برای attribution و callback های رویداد و Session استفاده میشود. برای راهاندازی کامل delegate، به ارسال اطلاعات callback مراجعه کنید.
متد delegate
- (BOOL)adtraceDeeplinkResponse:(NSURL *)deeplink;
| مقدار بازگشتی | رفتار |
|---|---|
YES / true | بگذارید Adtrace SDK deep link را باز کند. |
NO / false | آن را باز نکنید. URL را ذخیره کنید و در صورت نیاز خودتان navigation را مدیریت کنید. |
delegate را روی instance ADTConfig خود قبل از appDidLaunch تنظیم کنید:
- Objective-C
- Swift
@interface AppDelegate () <AdtraceDelegate>
@end
// در didFinishLaunchingWithOptions:
[adtraceConfig setDelegate:self];
- (BOOL)adtraceDeeplinkResponse:(NSURL *)deeplink {
// deeplink شامل محتوای deferred deep link است
return YES; // یا NO برای مدیریت خودتان
}
class AppDelegate: UIResponder, UIApplicationDelegate, AdtraceDelegate {
// در application(_:didFinishLaunchingWithOptions:):
adtraceConfig?.delegate = self
func adtraceDeeplinkResponse(_ deeplink: URL?) -> Bool {
// deeplink شامل محتوای deferred deep link است
return true // یا false برای مدیریت خودتان
}
}
callback بعد از اینکه SDK یک deferred deep link از سرور دریافت کرد و قبل از باز کردن آن اجرا میشود.
اگر این متد را پیادهسازی نکنید، Adtrace SDK به طور پیشفرض همیشه سعی میکند deep link را باز کند.
مثال: مدیریت لینک خودتان
NO / false برگردانید تا SDK URL را به صورت خودکار اجرا نکند:
- Objective-C
- Swift
- (BOOL)adtraceDeeplinkResponse:(NSURL *)deeplink {
// deeplink را ذخیره کنید و وقتی UI آماده شد navigate کنید
return NO;
}
func adtraceDeeplinkResponse(_ deeplink: URL?) -> Bool {
// deeplink را ذخیره کنید و وقتی UI آماده شد navigate کنید
return false
}