برای دریافت Firebase Dynamic Links که
ایجاد کردهاید، باید کیت توسعه نرمافزار Dynamic Links را در برنامهتان اضافه کنید و
روشهای handleUniversalLink: و dynamicLinkFromCustomSchemeURL: را
هنگام بار شدن برنامهتان فراخوانی کنید تا دادههای منتقلشده در Dynamic Link را دریافت کنید.
پیشنیازها
قبلاز شروع، حتماً Firebase را به پروژه iOS خود اضافه کنید.
راهاندازی Firebase و کیت توسعه نرمافزار Dynamic Links
از Swift Package Manager برای نصب و مدیریت وابستگیهای Firebase استفاده کنید.
- در Xcode، درحالیکه پروژه برنامهتان باز است، به File (فایل) > Add Packages (افزودن بستهها) بروید.
- وقتی خواسته شد، مخزن کیت توسعه نرمافزار Firebase برای پلاتفرمهای Apple را اضافه کنید:
- کتابخانه Dynamic Links را انتخاب کنید.
- پرچم
-ObjCرا به بخش Other Linker Flags (سایر پرچمهای پیونددهنده) در تنظیمات ساخت هدف اضافه کنید. - برای داشتن تجربه بهینه با Dynamic Links، توصیه میکنیم Google Analytics را در پروژه Firebase خود فعال کنید و کیت توسعه نرمافزار Firebase برای Google Analytics را به برنامهتان اضافه کنید. میتوانید کتابخانه را با یا بدون مجموعه IDFA انتخاب کنید. پرسشگان ما را درباره آخرین سازماندهی ماژولها در Google Analytics برای کیت توسعه نرمافزار Firebase ببینید.
- پساز اتمام، Xcode بهطور خودکار شروع به حل و بارگیری وابستگیهای شما در پسزمینه میکند.
https://github.com/firebase/firebase-ios-sdk.git
اکنون، چند مرحله پیکربندی را انجام دهید:
- در کنسول Firebase، بخش Dynamic Links را باز کنید. اگر از شما خواسته شد، شرایط خدمات را بپذیرید.
-
مطمئن شوید که شناسه App Store برنامه و پیشوند شناسه برنامه شما در تنظیمات برنامهتان مشخص شده باشد. برای مشاهده و ویرایش تنظیمات برنامهتان، به صفحه تنظیمات پروژه Firebase بروید و برنامه iOS خود را انتخاب کنید.
با باز کردن نشانی وب زیر میتوانید تأیید کنید که پروژه 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 از تختهچسباندن iOS را غیرفعال کنید.
بهطور پیشفرض، کیت توسعه نرمافزار Dynamic Links از تختهچسباندن برای بهبود قابلیت اطمینان پیوندهای عمیق پساز نصب استفاده میکند. بااستفاده از تختهچسب، Dynamic Links میتواند مطمئن شود که وقتی کاربر Dynamic Link را باز میکند اما ابتدا باید برنامهتان را نصب کند، کاربر میتواند بلافاصله پساز نصب و هنگام باز کردن برنامه برای اولینبار، به محتوای پیوندشده اصلی برود.
نکته منفی این است که استفاده از تختهچسباندن باعث فعال شدن اعلان در iOS 14 و نسخههای جدیدتر میشود. بنابراین، اولین باری که کاربران برنامهتان را باز میکنند، اگر تختهچسبان حاوی نشانی وب باشد، اعلانی خواهند دید که برنامهتان به تختهچسبان دسترسی پیدا کرده است، که میتواند باعث سردرگمی شود.
برای غیرفعال کردن این رفتار، فایل
Info.plistپروژه Xcode را ویرایش کنید و کلیدFirebaseDeepLinkPasteboardRetrievalEnabledرا رویNOتنظیم کنید.
Dynamic Links را در برنامهتان باز کنید
- در برگه اطلاعات پروژه Xcode برنامهتان، نوع نشانی وب جدیدی ایجاد کنید تا برای Dynamic Links استفاده شود. فیلد شناسه را روی مقدار منحصربهفرد و فیلد طرحواره نشانی وب را روی شناسه دسته نرمافزاریتان تنظیم کنید که طرحواره نشانی وب پیشفرض مورداستفاده Dynamic Links است.
- در برگه قابلیتها پروژه Xcode برنامهتان،
«دامنههای مرتبط» را فعال کنید و موارد زیر را به فهرست دامنههای
مرتبط اضافه کنید:
applinks:your_dynamic_links_domain
- اگر میخواهید Dynamic Links را با
دامنه کاملاً سفارشی دریافت کنید، در
فایل
Info.plistپروژه Xcode، کلیدی بهنامFirebaseDynamicLinksCustomDomainsایجاد کنید و آن را روی پیشوندهای نشانی وب 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 // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- یک
FirebaseAppنمونه مشترک را درapplication(_:didFinishLaunchingWithOptions:)روش نماینده برنامهتان پیکربندی کنید:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- اگر از SwiftUI استفاده میکنید، باید یک نماینده برنامه ایجاد کنید و آن را
ازطریق
UIApplicationDelegateAdaptorیاNSApplicationDelegateAdaptorبه ساختارAppخود متصل کنید. همچنین باید «سویزلینگ نماینده برنامه» را غیرفعال کنید. برای اطلاعات بیشتر، دستورالعملهای 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:، پیوندهای دریافتی را بهعنوان پیوندهای جامع در زمانی که برنامه ازقبل نصب شده است مدیریت کنید:Swift
توجه: این محصول در 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 }
Objective-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
> *_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:پیوندهای دسته دریافتشده ازطریق طرحواره نشانی وب سفارشی برنامهتان. این روش زمانی فراخوانی میشود که برنامه شما برای اولینبار پساز نصب باز شود.اگر Dynamic Link در اولین راهاندازی برنامهتان پیدا نشود، این روش با
DynamicLinkurlتنظیمشده رویnilفراخوانی میشود که نشان میدهد کیت توسعه نرمافزار نتوانسته است Dynamic Link معلق منطبقی پیدا کند.Swift
توجه: این محصول در 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 }
Objective-C
توجه: این محصول در 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; }