একটি Flutter অ্যাপে Firebase ডায়নামিক লিঙ্কগুলি পান৷

আপনার তৈরি করা Firebase ডায়নামিক লিঙ্কগুলি পেতে, আপনাকে অবশ্যই আপনার অ্যাপে ডায়নামিক লিঙ্ক SDK অন্তর্ভুক্ত করতে হবে এবং যখন আপনার অ্যাপ লোড হয় তখন ডায়নামিক লিঙ্কে ডেটা পাস করার জন্য FirebaseDynamicLinks.getDynamicLink() পদ্ধতিতে কল করতে হবে।

  1. আপনি যদি ইতিমধ্যে এটি না করে থাকেন তবে ফ্লটারের জন্য Firebase SDK ইনস্টল করুন এবং শুরু করুন

  2. আপনার ফ্লাটার প্রকল্পের মূল নির্দেশিকা থেকে, ডায়নামিক লিঙ্ক প্লাগইন ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

    flutter pub add firebase_dynamic_links
    
  3. আপনি যদি একটি Android অ্যাপ তৈরি করেন, তাহলে Firebase কনসোলের প্রকল্প সেটিংস পৃষ্ঠাটি খুলুন এবং নিশ্চিত করুন যে আপনি আপনার SHA-1 সাইনিং কী নির্দিষ্ট করেছেন৷ আপনি যদি অ্যাপ লিঙ্কগুলি ব্যবহার করেন তবে আপনার SHA-256 কীও নির্দিষ্ট করুন৷

প্ল্যাটফর্ম ইন্টিগ্রেশন

আপনি যে প্ল্যাটফর্মগুলির জন্য আপনার অ্যাপ তৈরি করছেন তার জন্য নিম্নলিখিত প্ল্যাটফর্ম ইন্টিগ্রেশন পদক্ষেপগুলি সম্পূর্ণ করুন৷

অ্যান্ড্রয়েড

অ্যান্ড্রয়েডে, আপনাকে অবশ্যই আপনার ডোমেনের একটি নতুন অভিপ্রায় ফিল্টার ক্যাচ ডিপ লিঙ্ক যুক্ত করতে হবে, যেহেতু আপনার অ্যাপ ইনস্টল করা থাকলে ডায়নামিক লিঙ্কটি আপনার ডোমেনে পুনঃনির্দেশ করবে৷ আপনার অ্যাপটি প্লে স্টোর থেকে ইনস্টল/আপডেট করার পরে এবং চালিয়ে যাওয়া বোতামে একটি ট্যাপ করার পরে ডায়নামিক লিঙ্ক ডেটা পাওয়ার জন্য এটি প্রয়োজন। 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>

ব্যবহারকারীরা যখন স্কিমের একটি গভীর লিঙ্ক সহ একটি ডায়নামিক লিঙ্ক খোলে এবং আপনার নির্দিষ্ট করা হোস্ট, তখন লিঙ্কটি পরিচালনা করার জন্য আপনার অ্যাপ এই উদ্দেশ্য ফিল্টার দিয়ে কার্যকলাপ শুরু করবে।

অ্যাপল প্ল্যাটফর্ম

  1. আপনার যদি ইতিমধ্যে একটি না থাকে তবে একটি Apple বিকাশকারী অ্যাকাউন্ট তৈরি করুন

  2. Firebase কনসোলের প্রজেক্ট সেটিংস পৃষ্ঠায়, নিশ্চিত করুন যে আপনার iOS অ্যাপটি আপনার অ্যাপ স্টোর আইডি এবং টিম আইডির সাথে সঠিকভাবে কনফিগার করা আছে।

  3. অ্যাপল ডেভেলপার সাইটে, অ্যাসোসিয়েটেড ডোমেন সক্ষমতা সক্ষম করে আপনার অ্যাপের জন্য একটি প্রভিশনিং প্রোফাইল তৈরি করুন।

  4. এক্সকোডে, নিম্নলিখিতগুলি করুন:

    1. TARGETS হেডারের অধীনে আপনার অ্যাপ খুলুন।

    2. স্বাক্ষর ও সক্ষমতা পৃষ্ঠায়, নিশ্চিত করুন যে আপনার দল নিবন্ধিত হয়েছে, এবং আপনার প্রভিশনিং প্রোফাইল সেট করা আছে।

    3. Firebase কনসোলে আপনি যে ডোমেনটি তৈরি করেছেন সেটি অ্যাসোসিয়েটেড ডোমেনে যুক্ত করুন, applinks: (উদাহরণস্বরূপ, applinks:example.page.link )।

    4. তথ্য পৃষ্ঠায়, আপনার প্রকল্পে একটি URL টাইপ যোগ করুন। আপনার অ্যাপের বান্ডেল আইডিতে URL স্কিম ফিল্ড সেট করুন। (শনাক্তকারী Bundle ID বা আপনি যা চান তা হতে পারে।)

    5. আপনি যদি আপনার Firebase প্রকল্পের জন্য একটি কাস্টম ডোমেন সেট আপ করে থাকেন, তাহলে FirebaseDynamicLinksCustomDomains কী ব্যবহার করে আপনার iOS প্রকল্পের Info.plist ফাইলে ডায়নামিক লিঙ্ক URL প্রিফিক্স যোগ করুন।

      <?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 এবং পরবর্তীতে একটি বিজ্ঞপ্তি ট্রিগার করে। সুতরাং, প্রথমবার ব্যবহারকারীরা আপনার অ্যাপটি খুললে, পেস্টবোর্ডে একটি ডায়নামিক লিঙ্ক URL থাকলে, তারা একটি বিজ্ঞপ্তি দেখতে পাবে যে আপনার অ্যাপটি পেস্টবোর্ড অ্যাক্সেস করেছে, যা বিভ্রান্তির কারণ হতে পারে।

      এই আচরণটি নিষ্ক্রিয় করতে, আপনার Xcode প্রকল্পের Info.plist ফাইলটি সম্পাদনা করুন এবং FirebaseDeepLinkPasteboardRetrievalEnabled কীটিকে NO তে সেট করুন।

আপনার অ্যাপ্লিকেশনে একটি ডায়নামিক লিঙ্ক পরিচালনা করতে, দুটি পরিস্থিতিতে বাস্তবায়ন প্রয়োজন।

সমাপ্ত রাজ্য

যদি অ্যাপ্লিকেশনটি বন্ধ করা হয়, FirebaseDynamicLinks.getInitialLink পদ্ধতি আপনাকে ডায়নামিক লিঙ্কটি পুনরুদ্ধার করতে দেয় যা অ্যাপ্লিকেশনটি খুলেছে।

এটি একটি অ্যাসিঙ্ক্রোনাস অনুরোধ, তাই ন্যাভিগেটরের মতো অ্যাপ্লিকেশন লজিক রেন্ডার করার আগে একটি লিঙ্ক পরিচালনা করা বোধগম্য। উদাহরণস্বরূপ, আপনি main ফাংশনে এটি পরিচালনা করতে পারেন:

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

  // Get any initial links
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

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

বিকল্পভাবে, যদি আপনি সনাক্ত করতে চান যে অ্যাপ্লিকেশনটি খোলার জন্য একটি সঠিক ডায়নামিক লিঙ্ক ব্যবহার করা হয়েছিল, তবে পরিবর্তে এটি getDynamicLink পদ্ধতিতে পাস করুন:

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

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

ব্যাকগ্রাউন্ড/ফোরগ্রাউন্ড স্টেট

অ্যাপ্লিকেশন খোলা থাকা অবস্থায়, বা পটভূমিতে, আপনি একটি স্ট্রিম হ্যান্ডলার ব্যবহার করে ডায়নামিক লিঙ্ক ইভেন্টগুলি শুনতে পারেন। FirebaseDynamicLinks.onLink গেটার একটি PendingDynamicLinkData সমন্বিত একটি Stream ফেরত দেয়:

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