لینک های پویا را در iOS دریافت کنید

برای دریافت پیوندهای دینامیک Firebase که ایجاد کرده‌اید ، باید Dynamic Links SDK را در برنامه خود قرار دهید و با استفاده از روش‌های handleUniversalLink: و dynamicLinkFromCustomSchemeURL: زمانی که برنامه شما بارگیری می‌شود، برای دریافت داده‌ها در پیوند پویا تماس بگیرید.

پیش نیازها

قبل از شروع، مطمئن شوید که Firebase را به پروژه iOS خود اضافه کنید .

برای نصب و مدیریت وابستگی های Firebase از Swift Package Manager استفاده کنید.

  1. در Xcode، با باز بودن پروژه برنامه، به File > Add Packages بروید.
  2. هنگامی که از شما خواسته شد، مخزن SDK پلتفرم های Apple Firebase را اضافه کنید:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. کتابخانه پیوندهای پویا را انتخاب کنید.
  5. پرچم -ObjC را به بخش Other Linker Flags تنظیمات ساخت هدف خود اضافه کنید.
  6. برای تجربه بهینه با Dynamic Links، توصیه می‌کنیم Google Analytics را در پروژه Firebase خود فعال کنید و Firebase SDK برای Google Analytics را به برنامه خود اضافه کنید. شما می توانید کتابخانه را بدون مجموعه IDFA یا با مجموعه IDFA انتخاب کنید.
  7. پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگی های شما در پس زمینه می کند.

اکنون، چند مرحله پیکربندی را انجام دهید:

  1. در کنسول Firebase ، بخش Dynamic Links را باز کنید. اگر از شما خواسته شد شرایط خدمات را بپذیرید.
  2. مطمئن شوید که شناسه 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 خود را مشخص کرده اید. توجه داشته باشید که پیشوند شناسه برنامه شما ممکن است با شناسه تیم شما یکی نباشد.

  3. اختیاری : غیرفعال کردن استفاده از SDK پیوندهای پویا از مقوای iOS.

    به طور پیش‌فرض، Dynamic Links SDK از مقوا برای بهبود قابلیت اطمینان پیوندهای عمیق پس از نصب استفاده می‌کند. با استفاده از مقوا، Dynamic Links می‌تواند مطمئن شود که وقتی کاربر یک پیوند پویا را باز می‌کند، اما باید ابتدا برنامه شما را نصب کند، کاربر می‌تواند هنگام باز کردن برنامه برای اولین بار پس از نصب، بلافاصله به محتوای پیوند شده اصلی برود.

    نقطه ضعف این کار این است که استفاده از مقوا باعث ایجاد اعلان در iOS 14 به بعد می شود. بنابراین، اولین باری که کاربران برنامه شما را باز می‌کنند، اگر کارت‌برد حاوی URL باشد، اعلانی مبنی بر دسترسی برنامه‌تان به کارت‌برد مشاهده می‌کند که می‌تواند باعث سردرگمی شود.

    برای غیرفعال کردن این رفتار، فایل Info.plist پروژه Xcode خود را ویرایش کنید و کلید FirebaseDeepLinkPasteboardRetrievalEnabled را روی NO تنظیم کنید.

  1. در برگه اطلاعات پروژه Xcode برنامه خود، یک نوع URL جدید ایجاد کنید تا برای پیوندهای پویا استفاده شود. فیلد Identifier را روی یک مقدار منحصر به فرد تنظیم کنید و فیلد طرح URL را به عنوان شناسه بسته شما، که طرح URL پیش‌فرض مورد استفاده توسط Dynamic Links است، تنظیم کنید.
  2. در برگه قابلیت‌های پروژه Xcode برنامه‌تان، دامنه‌های مرتبط را فعال کنید و موارد زیر را به فهرست دامنه‌های مرتبط اضافه کنید:
    applinks:your_dynamic_links_domain
  3. اگر می‌خواهید پیوندهای پویا را با یک دامنه کاملاً سفارشی دریافت کنید، در فایل Info.plist پروژه Xcode خود، کلیدی به نام FirebaseDynamicLinksCustomDomains ایجاد کنید و آن را روی پیشوندهای URL پیوندهای پویا برنامه خود تنظیم کنید. به عنوان مثال:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. ماژول 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;
    // ...
          
  5. یک نمونه اشتراک‌گذاری شده 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];
  6. اگر از 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()
          }
        }
      }
    }
          
  7. در مرحله بعد، در 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;
    }
  8. در نهایت، در application:openURL:options: پیوندهای دریافت شده از طریق طرح URL سفارشی برنامه خود را مدیریت کنید. این روش زمانی فراخوانی می شود که برنامه شما برای اولین بار پس از نصب باز شود.

    اگر پیوند پویا در اولین راه‌اندازی برنامه شما یافت نشد، این روش با url DynamicLink روی nil فراخوانی می‌شود که نشان می‌دهد SDK نتوانسته پیوند دینامیک معلق منطبقی را پیدا کند.

    سریع

    توجه: این محصول برای اهداف 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;
    }