برای دریافت Firebase Dynamic Links که ایجاد کردهاید ، باید Dynamic Links SDK را در برنامه خود قرار دهید و هنگام بارگیری برنامهتان برای دریافت دادهها در Dynamic Link روشهای handleUniversalLink:
و dynamicLinkFromCustomSchemeURL:
را فراخوانی کنید.
پیش نیازها
قبل از شروع، مطمئن شوید که Firebase را به پروژه iOS خود اضافه کنید .
Firebase و Dynamic Links SDK را راه اندازی کنید
برای نصب و مدیریت وابستگی های Firebase از Swift Package Manager استفاده کنید.
- در Xcode، با باز بودن پروژه برنامه، به File > Add Packages بروید.
- هنگامی که از شما خواسته شد، مخزن SDK پلتفرم های Apple Firebase را اضافه کنید:
- کتابخانه Dynamic Links را انتخاب کنید.
- پرچم
-ObjC
را به بخش Other Linker Flags تنظیمات ساخت هدف خود اضافه کنید. - برای تجربه بهینه با Dynamic Links ، توصیه میکنیم Google Analytics در پروژه Firebase خود فعال کنید و Firebase SDK برای Google Analytics را به برنامه خود اضافه کنید. شما می توانید کتابخانه را بدون مجموعه IDFA یا با مجموعه IDFA انتخاب کنید.
- پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگی های شما در پس زمینه می کند.
https://github.com/firebase/firebase-ios-sdk.git
اکنون، چند مرحله پیکربندی را انجام دهید:
- در کنسول Firebase ، بخش Dynamic Links را باز کنید. اگر از شما خواسته شد شرایط خدمات را بپذیرید.
مطمئن شوید که شناسه App Store برنامه و پیشوند App ID شما در تنظیمات برنامه شما مشخص شده باشد. برای مشاهده و ویرایش تنظیمات برنامه خود، به صفحه تنظیمات پروژه 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
خالی است، دوباره بررسی کنید که پیشوند App ID خود را مشخص کرده اید. توجه داشته باشید که پیشوند شناسه برنامه شما ممکن است با شناسه تیم شما یکی نباشد.اختیاری : غیرفعال کردن استفاده از SDK Dynamic Links از مقوای iOS.
به طور پیشفرض، Dynamic Links SDK از مقوا برای بهبود قابلیت اطمینان پیوندهای عمیق پس از نصب استفاده میکند. با استفاده از مقوا، Dynamic Links میتواند مطمئن شود که وقتی کاربر یک Dynamic Link باز میکند، اما باید ابتدا برنامه شما را نصب کند، کاربر میتواند هنگام باز کردن برنامه برای اولین بار پس از نصب، بلافاصله به محتوای پیوند شده اصلی برود.
نقطه ضعف این کار این است که استفاده از مقوا باعث ایجاد اعلان در iOS 14 به بعد می شود. بنابراین، اولین باری که کاربران برنامه شما را باز میکنند، اگر کارتبرد حاوی URL باشد، اعلانی مبنی بر دسترسی برنامهتان به کارتبرد مشاهده میکند که میتواند باعث سردرگمی شود.
برای غیرفعال کردن این رفتار، فایل
Info.plist
پروژه Xcode خود را ویرایش کنید و کلیدFirebaseDeepLinkPasteboardRetrievalEnabled
را رویNO
تنظیم کنید.
Dynamic Links در برنامه خود باز کنید
- در برگه اطلاعات پروژه Xcode برنامه خود، یک نوع URL جدید ایجاد کنید تا برای Dynamic Links استفاده شود. فیلد Identifier را روی یک مقدار منحصر به فرد تنظیم کنید و فیلد طرح URL را به عنوان شناسه بسته شما، که طرح URL پیشفرض مورد استفاده Dynamic Links است، تنظیم کنید.
- در برگه قابلیتهای پروژه Xcode برنامهتان، دامنههای مرتبط را فعال کنید و موارد زیر را به فهرست دامنههای مرتبط اضافه کنید:
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 دیگری که نماینده برنامه شما استفاده میکند، وارد کنید. به عنوان مثال، برای استفاده از Cloud Firestore و Authentication :SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
سویفت
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
هدف-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- یک نمونه اشتراکگذاری شده
FirebaseApp
در روشapplication(_:didFinishLaunchingWithOptions:)
پیکربندی کنید:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
سویفت
// Use Firebase library to configure APIs FirebaseApp.configure()
هدف-C
// Use Firebase library to configure APIs [FIRApp configure];
- اگر از SwiftUI استفاده میکنید، باید یک نماینده برنامه ایجاد کنید و آن را از طریق
UIApplicationDelegateAdaptor
یاNSApplicationDelegateAdaptor
به ساختارApp
خود متصل کنید. همچنین باید swizzling نمایندگی برنامه را غیرفعال کنید. برای اطلاعات بیشتر، دستورالعمل های SwiftUI را ببینید.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:
پیوندهای دریافت شده به عنوان پیوندهای جهانی را زمانی که برنامه از قبل نصب شده است مدیریت کنید:سویفت
توجه: این محصول برای اهداف 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 }
هدف-C
توجه: این محصول برای اهداف 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<UIUserActivityRestoring>> *_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 }
هدف-C
توجه: این محصول برای اهداف macOS، Mac Catalyst، tvOS یا watchOS موجود نیست.- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)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; }