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

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

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

  2. डाइनैमिक लिंक प्लग-इन इंस्टॉल करने के लिए, अपने 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>

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

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

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

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

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

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

  4. Xcode में, यह काम करें:

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

    2. साइनिंग और क्षमताएं पेज पर, पक्का करें कि आपकी टीम रजिस्टर हो और आपकी प्रोविज़निंग प्रोफ़ाइल सेट हो.

    3. साइनिंग और क्षमताएं पेज पर, असोसिएटेड डोमेन की सुविधा चालू करें. इसके बाद, असोसिएटेड डोमेन की सूची में यह जोड़ें. इसमें, उदाहरण को अपने डोमेन से बदलें:

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

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

      <?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. ज़रूरी नहीं: iOS क्लिपबोर्ड के लिए, डाइनैमिक लिंक SDK टूल का इस्तेमाल बंद करें.

      डिफ़ॉल्ट रूप से, डाइनैमिक लिंक 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 गेटर का इस्तेमाल करें:

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.