برای دریافت Firebase Dynamic Links که ایجاد کردهاید ، باید SDK Dynamic Links در برنامه خود بگنجانید و هنگام بارگذاری برنامه، متدهای handleUniversalLink: و dynamicLinkFromCustomSchemeURL: را فراخوانی کنید تا دادههای ارسالی در Dynamic Link را دریافت کنید.
پیشنیازها
قبل از شروع، مطمئن شوید که Firebase را به پروژه iOS خود اضافه کردهاید .
فایربیس و SDK Dynamic Links راهاندازی کنید
برای نصب و مدیریت وابستگیهای Firebase از Swift Package Manager استفاده کنید.
- در Xcode، با باز کردن پروژه برنامه خود، به File > Add Packages بروید.
- وقتی از شما خواسته شد، مخزن SDK پلتفرمهای اپل فایربیس را اضافه کنید:
- کتابخانه Dynamic Links را انتخاب کنید.
- پرچم
-ObjCرا به بخش Other Linker Flags در تنظیمات ساخت هدف خود اضافه کنید. - برای تجربه بهینه با Dynamic Links ، توصیه میکنیم Google Analytics در پروژه Firebase خود فعال کنید و Firebase SDK را برای Google Analytics به برنامه خود اضافه کنید. میتوانید کتابخانه را بدون مجموعه IDFA یا با مجموعه IDFA انتخاب کنید. به سوالات متداول ما در مورد آخرین سازماندهی ماژولها در Google Analytics برای Firebase SDK مراجعه کنید.
- پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگیهای شما در پسزمینه میکند.
https://github.com/firebase/firebase-ios-sdk.git
اکنون، برخی از مراحل پیکربندی را انجام دهید:
- در کنسول Firebase ، بخش Dynamic Links را باز کنید. در صورت درخواست، شرایط خدمات را بپذیرید.
مطمئن شوید که شناسه فروشگاه برنامه و پیشوند شناسه برنامه شما در تنظیمات برنامه مشخص شده است. برای مشاهده و ویرایش تنظیمات برنامه، به صفحه تنظیمات پروژه Firebase خود بروید و برنامه iOS خود را انتخاب کنید.
با باز کردن URL زیر میتوانید تأیید کنید که پروژه Firebase شما به درستی برای استفاده Dynamic Links در برنامه iOS شما پیکربندی شده است:
https://your_dynamic_links_domain/apple-app-site-association
اگر برنامه شما متصل باشد، فایل
apple-app-site-associationحاوی ارجاعی به پیشوند شناسه برنامه و شناسه بسته برنامه شما است. برای مثال:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}اگر فیلد
detailsخالی است، دوباره بررسی کنید که آیا پیشوند شناسه برنامه خود را مشخص کردهاید یا خیر. توجه داشته باشید که پیشوند شناسه برنامه شما ممکن است با شناسه تیم شما یکسان نباشد.اختیاری : استفادهی Dynamic Links SDK از فایل اجرایی iOS را غیرفعال کنید.
به طور پیشفرض، SDK مربوط به Dynamic Links از pasteboard برای بهبود قابلیت اطمینان لینکهای عمیق پس از نصب استفاده میکند. با استفاده از pasteboard، Dynamic Links میتواند اطمینان حاصل کند که وقتی کاربری یک Dynamic Link باز میکند اما ابتدا باید برنامه شما را نصب کند، کاربر میتواند بلافاصله پس از نصب، هنگام باز کردن برنامه برای اولین بار، به محتوای اصلی لینک شده دسترسی پیدا کند.
نکته منفی این است که استفاده از pasteboard در iOS 14 و نسخههای بعدی باعث ایجاد اعلان میشود. بنابراین، اولین باری که کاربران برنامه شما را باز میکنند، اگر pasteboard حاوی URL باشد، اعلانی مبنی بر دسترسی برنامه شما به pasteboard مشاهده میکنند که میتواند باعث سردرگمی شود.
برای غیرفعال کردن این رفتار، فایل
Info.plistپروژه Xcode خود را ویرایش کنید و کلیدFirebaseDeepLinkPasteboardRetrievalEnabledرا رویNOتنظیم کنید.
Dynamic Links در برنامه خود باز کنید
- در تب Info پروژه Xcode برنامه خود، یک نوع URL جدید برای استفاده در Dynamic Links ایجاد کنید. فیلد Identifier را روی یک مقدار منحصر به فرد تنظیم کنید و فیلد URL scheme را به عنوان شناسه بسته خود تنظیم کنید، که طرح URL پیشفرض مورد استفاده Dynamic Links است.
- در تب «قابلیتها» (Capabilities) پروژه Xcode برنامه خود، گزینه «دامنههای مرتبط» (Associated Domains) را فعال کنید و موارد زیر را به لیست «دامنههای مرتبط» (Associated Domains) اضافه کنید:
applinks:your_dynamic_links_domain
- اگر میخواهید Dynamic Links با یک دامنه کاملاً سفارشی دریافت کنید، در فایل
Info.plistپروژه Xcode خود، یک کلید به نامFirebaseDynamicLinksCustomDomainsایجاد کنید و آن را روی پیشوندهای URL Dynamic Links برنامه خود تنظیم کنید. برای مثال:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share - ماژول
FirebaseCoreرا درUIApplicationDelegateخود وارد کنید، و همچنین هر ماژول Firebase دیگری که app delegate شما از آن استفاده میکند. به عنوان مثال، برای استفاده از Cloud Firestore و Authentication :سویفتیوآی
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
سویفت
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
هدف-سی
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- یک نمونه اشتراکی
FirebaseAppدر متد applicationapplication(_:didFinishLaunchingWithOptions:)از نماینده برنامه خود پیکربندی کنید:سویفتیوآی
// Use Firebase library to configure APIs FirebaseApp.configure()
سویفت
// Use Firebase library to configure APIs FirebaseApp.configure()
هدف-سی
// Use Firebase library to configure APIs [FIRApp configure];
- اگر از SwiftUI استفاده میکنید، باید یک نماینده برنامه ایجاد کنید و آن را از طریق
UIApplicationDelegateAdaptorیاNSApplicationDelegateAdaptorبه ساختارAppخود پیوست کنید. همچنین باید swizzling نماینده برنامه را غیرفعال کنید. برای اطلاعات بیشتر، به دستورالعملهای SwiftUI مراجعه کنید.سویفتیوآی
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
- در مرحلهی بعد، در
application:continueUserActivity:restorationHandler:لینکهای دریافتی را به عنوان لینکهای جهانی (Universal Links) در صورت نصب بودن برنامه، مدیریت کنید:سویفت
توجه: این محصول برای سیستمعاملهای macOS، Mac Catalyst، tvOS یا watchOS در دسترس نیست.func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { let handled = DynamicLinks.dynamicLinks() .handleUniversalLink(userActivity.webpageURL!) { dynamiclink, error in // ... } return handled }
هدف-سی
توجه: این محصول برای سیستمعاملهای macOS، Mac Catalyst، tvOS یا watchOS در دسترس نیست.- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler: #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0) (nonnull void (^)(NSArray<id
> *_Nullable))restorationHandler { #else (nonnull void (^)(NSArray *_Nullable))restorationHandler { #endif // __IPHONE_12_0 BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) { // ... }]; return handled; } - در نهایت، در
application:openURL:options:لینکهای دریافتی از طریق طرح URL سفارشی برنامه شما را مدیریت میکند. این متد زمانی فراخوانی میشود که برنامه شما برای اولین بار پس از نصب باز میشود.اگر Dynamic Link در اولین اجرای برنامه شما پیدا نشد، این متد با تنظیم
urlمربوط بهDynamicLinkرویnilفراخوانی میشود که نشان میدهد SDK نتوانسته Dynamic Link منطبق و در حال انتظار را پیدا کند.سویفت
توجه: این محصول برای سیستمعاملهای macOS، Mac Catalyst، tvOS یا watchOS در دسترس نیست.@available(iOS 9.0, *) func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool { return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey .sourceApplication] as? String, annotation: "") } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) { // Handle the deep link. For example, show the deep-linked content or // apply a promotional offer to the user's account. // ... return true } return false }
هدف-سی
توجه: این محصول برای سیستمعاملهای macOS، Mac Catalyst، tvOS یا watchOS در دسترس نیست.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary
*)options { return [self application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; if (dynamicLink) { if (dynamicLink.url) { // Handle the deep link. For example, show the deep-linked content, // apply a promotional offer to the user's account or show customized onboarding view. // ... } else { // Dynamic link has empty deep link. This situation will happens if // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link, // but pending link is not available for this device/App combination. // At this point you may display default onboarding view. } return YES; } return NO; }