iOS पर डाइनैमिक लिंक पाएं

अपने बनाए गए Firebase डाइनैमिक लिंक पाने के लिए, आपको अपने ऐप्लिकेशन में डाइनैमिक लिंक SDK टूल को शामिल करना होगा. साथ ही, handleUniversalLink: और dynamicLinkFromCustomSchemeURL: तरीकों को कॉल करना होगा, ताकि डाइनैमिक लिंक में डेटा पास किया जा सके.

ज़रूरी शर्तें

शुरू करने से पहले, Firebase को अपने iOS प्रोजेक्ट में जोड़ना न भूलें.

Firebase डिपेंडेंसी इंस्टॉल और मैनेज करने के लिए, Swift पैकेज मैनेजर का इस्तेमाल करें.

  1. Xcode में, अपना ऐप्लिकेशन प्रोजेक्ट खोलने के लिए, फ़ाइल > पैकेज जोड़ें पर जाएं.
  2. जब कहा जाए, तब Firebase Apple प्लैटफ़ॉर्म SDK टूल का रिपॉज़िटरी जोड़ें:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. डाइनैमिक लिंक लाइब्रेरी चुनें.
  5. अपने टारगेट की बिल्ड सेटिंग के अन्य लिंकर फ़्लैग सेक्शन में -ObjC फ़्लैग जोड़ें.
  6. डाइनैमिक लिंक का बेहतर अनुभव पाने के लिए, हमारा सुझाव है कि आप अपने Firebase प्रोजेक्ट में Google Analytics चालू करें. साथ ही, अपने ऐप्लिकेशन में Google Analytics के लिए Firebase SDK टूल जोड़ें. आपके पास IDFA कलेक्शन के बिना या IDFA कलेक्शन वाली लाइब्रेरी में से किसी एक को चुनने का विकल्प होता है.
  7. यह काम पूरा होने के बाद, Xcode बैकग्राउंड में आपकी डिपेंडेंसी को अपने-आप रिज़ॉल्व और डाउनलोड करना शुरू कर देगा.

अब, कॉन्फ़िगरेशन के कुछ चरण पूरे करें:

  1. Firebase कंसोल में, डाइनैमिक लिंक सेक्शन खोलें. अगर आपसे कहा जाए, तो सेवा की शर्तों को स्वीकार करें.
  2. पक्का करें कि आपके ऐप्लिकेशन की सेटिंग में आपके ऐप्लिकेशन का ऐप स्टोर आईडी और ऐप्लिकेशन आईडी प्रीफ़िक्स दिया गया हो. अपने ऐप्लिकेशन की सेटिंग देखने और उनमें बदलाव करने के लिए, अपने Firebase प्रोजेक्ट के सेटिंग पेज पर जाएं और अपना iOS ऐप्लिकेशन चुनें.

    नीचे दिया गया यूआरएल खोलकर, पुष्टि करें कि आपका Firebase प्रोजेक्ट, आपके 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 फ़ील्ड खाली है, तो दोबारा जांच लें कि आपने अपने ऐप्लिकेशन आईडी का प्रीफ़िक्स बताया हो. ध्यान रखें कि आपके ऐप्लिकेशन आईडी का प्रीफ़िक्स और टीम आईडी एक जैसे नहीं हो.

  3. ज़रूरी नहीं: डाइनैमिक लिंक SDK टूल के लिए, iOS पेस्टबोर्ड का इस्तेमाल बंद करें.

    पोस्ट-इंस्टॉल डीप लिंक की विश्वसनीयता को बेहतर बनाने के लिए, डाइनैमिक लिंक SDK टूल, डिफ़ॉल्ट रूप से पेस्टबोर्ड का इस्तेमाल करता है. पेस्टबोर्ड का इस्तेमाल करके, डाइनैमिक लिंक यह पक्का कर सकते हैं कि जब कोई उपयोगकर्ता डाइनैमिक लिंक खोलता है, लेकिन पहले उसे इंस्टॉल करना हो, तो इंस्टॉल करने के बाद पहली बार ऐप्लिकेशन खोलते समय, वह लिंक किए गए ओरिजनल कॉन्टेंट पर तुरंत जा सके.

    समस्या यह है कि पेस्टबोर्ड का इस्तेमाल करने से, iOS 14 और उसके बाद के वर्शन पर सूचना ट्रिगर होती है. इसलिए, अगर उपयोगकर्ता पहली बार आपका ऐप्लिकेशन खोलते हैं, तो अगर पेस्टबोर्ड में कोई यूआरएल होगा, तो उन्हें एक सूचना दिखेगी कि आपके ऐप्लिकेशन ने पेस्टबोर्ड को ऐक्सेस किया है. इससे उपयोगकर्ताओं को भ्रम हो सकता है.

    इस व्यवहार को बंद करने के लिए, अपने Xcode प्रोजेक्ट की Info.plist फ़ाइल में बदलाव करें और FirebaseDeepLinkPasteboardRetrievalEnabled कुंजी को NO पर सेट करें.

  1. अपने ऐप्लिकेशन के Xcode प्रोजेक्ट के जानकारी टैब में, डाइनैमिक लिंक के लिए इस्तेमाल किया जाने वाला नया यूआरएल टाइप बनाएं. आइडेंटिफ़ायर फ़ील्ड को यूनीक वैल्यू पर और यूआरएल स्कीम फ़ील्ड को अपना बंडल आइडेंटिफ़ायर बनाने के लिए सेट करें. यह डाइनैमिक लिंक की ओर से इस्तेमाल की जाने वाली डिफ़ॉल्ट यूआरएल स्कीम है.
  2. अपने ऐप्लिकेशन के Xcode प्रोजेक्ट के क्षमताएं टैब में, असोसिएट किए गए डोमेन को चालू करें और इन्हें असोसिएट किए गए डोमेन की सूची में जोड़ें:
    applinks:your_dynamic_links_domain
  3. अगर आपको पूरी तरह से कस्टम डोमेन के साथ डाइनैमिक लिंक पाने हैं, तो अपने Xcode प्रोजेक्ट की Info.plist फ़ाइल में, FirebaseDynamicLinksCustomDomains नाम की एक कुंजी बनाएं और उसे अपने ऐप्लिकेशन के डाइनैमिक लिंक के यूआरएल प्रीफ़िक्स में सेट करें. उदाहरण के लिए:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. अपने UIApplicationDelegate में FirebaseCore मॉड्यूल को इंपोर्ट करें. साथ ही, ऐसे सभी Firebase मॉड्यूल को इंपोर्ट करें जिनका इस्तेमाल आपके ऐप्लिकेशन का ऐक्सेस मैनेज करता है. उदाहरण के लिए, Cloud Firestore और पुष्टि करने की सुविधा का इस्तेमाल करने के लिए:

    स्विफ़्टयूआई

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  5. अपने ऐप्लिकेशन का ऐक्सेस देने वाले व्यक्ति के application(_:didFinishLaunchingWithOptions:) तरीके में, FirebaseApp शेयर किए गए इंस्टेंस को कॉन्फ़िगर करें:

    स्विफ़्टयूआई

    // 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];
  6. अगर SwiftUI का इस्तेमाल किया जा रहा है, तो आपको ऐप्लिकेशन का ऐक्सेस देना होगा और उसे UIApplicationDelegateAdaptor या NSApplicationDelegateAdaptor की मदद से अपने App स्ट्रक्चर में अटैच करना होगा. आपको ऐप्लिकेशन सौंपने की सुविधा को स्वाइप करने की सुविधा भी बंद करनी होगी. ज़्यादा जानकारी के लिए, 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: वाले तरीके में, ऐप्लिकेशन के पहले से इंस्टॉल होने पर, यूनिवर्सल लिंक के तौर पर मिले लिंक मैनेज करें:

    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<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: में आपके ऐप्लिकेशन की कस्टम यूआरएल स्कीम से मिले लिंक हैंडल करें. इंस्टॉल करने के बाद पहली बार ऐप्लिकेशन खोलने पर, यह तरीका अपनाया जाता है.

    अगर आपके ऐप्लिकेशन के पहले लॉन्च में डाइनैमिक लिंक नहीं मिलता है, तो यह तरीका DynamicLink के url को nil पर सेट करके कॉल किया जाएगा. इससे पता चलता है कि SDK टूल को मिलता-जुलता डाइनैमिक लिंक नहीं मिला है.

    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<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;
    }