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 डेवलपर खाता नहीं है, तो एक Apple डेवलपर खाता बनाएं.

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

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

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

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

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

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

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

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

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

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

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

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

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) में भी चलाना होगा.