Flutter ऐप्लिकेशन में Firebase डाइनैमिक लिंक पाएं

आपके बनाए गए Firebase Dynamic Links पाने के लिए, आपको अपने ऐप्लिकेशन में Dynamic Links SDK टूल शामिल करना होगा. साथ ही, जब आपका ऐप्लिकेशन लोड हो, तब FirebaseDynamicLinks.getDynamicLink() तरीके को कॉल करना होगा, ताकि Dynamic Link में पास किया गया डेटा मिल सके.

  1. अगर आपने अब तक ऐसा नहीं किया है, तो Flutter के लिए Firebase SDK टूल इंस्टॉल करें और उन्हें शुरू करें.

  2. Dynamic Links प्लगिन इंस्टॉल करने के लिए, अपने Flutter प्रोजेक्ट की रूट डायरेक्ट्री से यह कमांड चलाएं:

    flutter pub add firebase_dynamic_links
    
  3. अगर आपको कोई Android ऐप्लिकेशन बनाना है, तो Firebase कंसोल के प्रोजेक्ट सेटिंग पेज को खोलें. इसके बाद, पक्का करें कि आपने SHA-1 हस्ताक्षर करने की कुंजी दी हो. अगर ऐप्लिकेशन लिंक का इस्तेमाल किया जाता है, तो अपनी SHA-256 कुंजी भी डालें.

प्लैटफ़ॉर्म इंटिग्रेशन

जिन प्लैटफ़ॉर्म के लिए ऐप्लिकेशन बनाया जा रहा है उनके लिए, प्लैटफ़ॉर्म इंटिग्रेशन के ये चरण पूरे करें.

Android

Android पर, आपको अपने डोमेन के डीप लिंक को कैप्चर करने के लिए, एक नया इंटेंट फ़िल्टर जोड़ना होगा. ऐसा इसलिए, क्योंकि अगर आपका ऐप्लिकेशन इंस्टॉल है, तो डाइनैमिक लिंक आपके डोमेन पर रीडायरेक्ट हो जाएगा. यह इसलिए ज़रूरी है, ताकि Play Store से ऐप्लिकेशन इंस्टॉल/अपडेट होने के बाद, उसे डाइनैमिक लिंक का डेटा मिल सके. साथ ही, जब कोई उपयोगकर्ता 'जारी रखें' बटन पर टैप करे, तब भी उसे यह डेटा मिल सके. AndroidManifest.xml में:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

जब उपयोगकर्ता, आपकी तय की गई स्कीम और होस्ट के डीप लिंक वाला डाइनैमिक लिंक खोलते हैं, तब आपका ऐप्लिकेशन इस इंटेंट फ़िल्टर के साथ गतिविधि शुरू करेगा, ताकि लिंक को मैनेज किया जा सके.

अगला चरण यह पक्का करना है कि ऐप्लिकेशन के लिए, Firebase कंसोल में साइनिंग सर्टिफ़िकेट का SHA-256 फ़िंगरप्रिंट रजिस्टर किया गया हो. अपने क्लाइंट की पुष्टि करना पेज पर, SHA-256 फ़िंगरप्रिंट पाने के तरीके के बारे में ज़्यादा जानकारी दी गई है.

Apple के प्लैटफ़ॉर्म

  1. अगर आपके पास पहले से कोई खाता नहीं है, तो Apple डेवलपर खाता बनाएं.

  2. Firebase कंसोल के प्रोजेक्ट सेटिंग पेज पर जाकर, पक्का करें कि आपका iOS ऐप्लिकेशन, App Store आईडी और टीम आईडी के साथ सही तरीके से कॉन्फ़िगर किया गया हो.

  3. Apple Developer साइट पर, अपने ऐप्लिकेशन के लिए एक प्रोविज़निंग प्रोफ़ाइल बनाएं. इसमें असोसिएटेड डोमेन की सुविधा चालू होनी चाहिए.

  4. Xcode में, यह तरीका अपनाएं:

    1. TARGETS हेडर में जाकर, अपना ऐप्लिकेशन खोलें.

    2. 'Signing & Capabilities' पेज पर जाकर पक्का करें कि आपकी टीम रजिस्टर हो गई हो और आपकी Provisioning Profile सेट हो गई हो.

    3. Signing & Capabilities पेज पर, Associated Domains को चालू करें. इसके बाद, Associated Domains की सूची में यह जोड़ें. उदाहरण को अपने डोमेन से बदलें:

      applinks:example.page.link
      
    4. जानकारी वाले पेज पर, अपने प्रोजेक्ट में यूआरएल टाइप जोड़ें. यूआरएल स्कीम फ़ील्ड को अपने ऐप्लिकेशन के बंडल आईडी पर सेट करें. (पहचानकर्ता Bundle ID या आपकी पसंद के हिसाब से कुछ भी हो सकता है.)

    5. अगर आपने अपने Firebase प्रोजेक्ट के लिए कस्टम डोमेन सेट अप किया है, तो Info.plist कुंजी का इस्तेमाल करके, अपने iOS प्रोजेक्ट की Info.plist फ़ाइल में डाइनैमिक लिंक यूआरएल प्रीफ़िक्स जोड़ें.FirebaseDynamicLinksCustomDomains

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>FirebaseDynamicLinksCustomDomains</key>
      <array>
          <string>https://custom.domain.io/path1</string>
          <string>https://custom.domain.io/path2</string>
      </array>
      
      ...other settings
      
      </dict>
      </plist>
      
    6. ज़रूरी नहीं: Dynamic Links SDK टूल के लिए, iOS के पास मौजूद डेटा को इस्तेमाल करने की सुविधा बंद करें.

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

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

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

अपने ऐप्लिकेशन में डाइनैमिक लिंक को मैनेज करने के लिए, दो स्थितियों को लागू करना ज़रूरी है.

खत्म की गई स्थिति

इन तरीकों को सेट अप करें:

  1. FirebaseDynamicLinks.getInitialLink - Future<PendingDynamicLinkData?> दिखाता है
  2. FirebaseDynamicLinks.onLink - इवेंट हैंडलर, जो Stream दिखाता है. इसमें PendingDynamicLinkData? शामिल होता है

Android पर, खाते के बंद होने के बाद भी FirebaseDynamicLinks.getInitialLink के ज़रिए लिंक हमेशा मिलेगा. हालांकि, iOS पर इसकी कोई गारंटी नहीं है. इसलिए, यह ज़रूरी है कि आप इन दोनों को इस क्रम में सेट अप करें, ताकि आपके ऐप्लिकेशन को लिंक मिल सके:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Check if you received the link via `getInitialLink` first
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  if (initialLink != null) {
    final Uri deepLink = initialLink.link;
    // Example of using the dynamic link to push the user to a different screen
    Navigator.pushNamed(context, deepLink.path);
  }

  FirebaseDynamicLinks.instance.onLink.listen(
        (pendingDynamicLinkData) {
          // Set up the `onLink` event listener next as it may be received here
          if (pendingDynamicLinkData != null) {
            final Uri deepLink = pendingDynamicLinkData.link;
            // Example of using the dynamic link to push the user to a different screen
            Navigator.pushNamed(context, deepLink.path);
          }
        },
      );

  runApp(MyApp(initialLink));
}

इसके बाद, अपने ऐप्लिकेशन के लॉजिक में यह देखा जा सकता है कि लिंक को हैंडल किया गया है या नहीं. साथ ही, कोई कार्रवाई की जा सकती है. उदाहरण के लिए:

if (initialLink != null) {
  final Uri deepLink = initialLink.link;
  // Example of using the dynamic link to push the user to a different screen
  Navigator.pushNamed(context, deepLink.path);
}

बैकग्राउंड / फ़ोरग्राउंड स्टेट

ऐप्लिकेशन खुला होने या बैकग्राउंड में चलने के दौरान, FirebaseDynamicLinks.onLink getter का इस्तेमाल करें:

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});

इसके अलावा, अगर आपको यह पता लगाना है कि ऐप्लिकेशन खोलने के लिए किसी डाइनैमिक लिंक का इस्तेमाल किया गया था, तो उसे getDynamicLink तरीके से पास करें:

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

iOS पर डाइनैमिक लिंक की जांच करने के लिए, आपको किसी असली डिवाइस का इस्तेमाल करना होगा. अगर आपको बंद किए गए ऐप्लिकेशन (यानी कि ऐप्लिकेशन को स्वाइप करके बंद कर दिया गया है) से किसी डाइनैमिक लिंक की जांच करनी है, तो आपको ऐप्लिकेशन को रिलीज़ मोड (यानी कि flutter run --release.) में भी चलाना होगा.