پیوندهای دینامیک Firebase را در یک برنامه Flutter دریافت کنید

برای دریافت لینک‌های پویای Firebase که ایجاد کرده‌اید ، باید SDK لینک‌های پویا را در برنامه خود بگنجانید و هنگام بارگذاری برنامه، متد FirebaseDynamicLinks.getDynamicLink() را فراخوانی کنید تا داده‌های ارسالی در لینک پویا را دریافت کنید.

  1. اگر قبلاً SDK های Firebase را برای Flutter نصب و مقداردهی اولیه نکرده‌اید، این کار را انجام دهید.

  2. از دایرکتوری ریشه پروژه Flutter خود، دستور زیر را برای نصب افزونه Dynamic Links اجرا کنید:

    flutter pub add firebase_dynamic_links
    
  3. اگر در حال ساخت یک برنامه اندروید هستید، صفحه تنظیمات پروژه کنسول Firebase را باز کنید و مطمئن شوید که کلید امضای SHA-1 خود را مشخص کرده‌اید. اگر از App Links استفاده می‌کنید، کلید SHA-256 خود را نیز مشخص کنید.

ادغام پلتفرم

مراحل ادغام پلتفرم زیر را برای پلتفرم‌هایی که برنامه خود را برای آنها می‌سازید، تکمیل کنید.

اندروید

در اندروید، باید یک فیلتر intent جدید برای دریافت لینک‌های عمیق دامنه خود اضافه کنید، زیرا در صورت نصب برنامه، Dynamic Link به دامنه شما هدایت می‌شود. این برای دریافت داده‌های Dynamic Link توسط برنامه شما پس از نصب/به‌روزرسانی از فروشگاه Play و لمس دکمه Continue ضروری است. در 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>

وقتی کاربران یک پیوند پویا (Dynamic Link) را با یک پیوند عمیق (deep link) به طرحواره (scheme) و میزبان (host) مشخص شده توسط شما باز می‌کنند، برنامه شما فعالیتی را با این فیلتر intent برای مدیریت پیوند آغاز می‌کند.

مرحله بعدی این است که مطمئن شوید اثر انگشت SHA-256 گواهی امضا در کنسول Firebase برای برنامه ثبت شده است. می‌توانید جزئیات بیشتر در مورد نحوه بازیابی اثر انگشت SHA-256 خود را در صفحه Authenticating Your Client بیابید.

پلتفرم‌های اپل

  1. اگر از قبل حساب توسعه‌دهنده اپل ندارید، یک حساب کاربری ایجاد کنید .

  2. در صفحه تنظیمات پروژه کنسول Firebase، مطمئن شوید که برنامه iOS شما به درستی با شناسه فروشگاه برنامه و شناسه تیم شما پیکربندی شده است.

  3. در سایت توسعه‌دهندگان اپل، یک پروفایل تأمین‌کننده برای برنامه خود ایجاد کنید که قابلیت Associated Domain در آن فعال باشد.

  4. در Xcode، مراحل زیر را انجام دهید:

    1. برنامه خود را در زیر سربرگ TARGETS باز کنید.

    2. در صفحه Signing & Capabilities، مطمئن شوید که تیم شما ثبت شده است و Provisioning Profile شما تنظیم شده است.

    3. در صفحه Signing & Capabilities، گزینه Associated Domains را فعال کنید و موارد زیر را به لیست Associated Domains اضافه کنید (مثال را با دامنه خود جایگزین کنید):

      applinks:example.page.link
      
    4. در صفحه اطلاعات، یک نوع URL به پروژه خود اضافه کنید. فیلد طرح‌های URL را روی شناسه بسته برنامه خود تنظیم کنید. (شناسه می‌تواند Bundle ID یا هر چیز دیگری که می‌خواهید باشد.)

    5. اگر برای پروژه Firebase خود یک دامنه سفارشی تنظیم کرده‌اید، پیشوند URL پیوند پویا را با استفاده از کلید FirebaseDynamicLinksCustomDomains به فایل Info.plist پروژه iOS خود اضافه کنید.

      <?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 را غیرفعال کنید.

      به طور پیش‌فرض، SDK مربوط به Dynamic Links از pasteboard برای بهبود قابلیت اطمینان لینک‌های عمیق پس از نصب استفاده می‌کند. با استفاده از pasteboard، Dynamic Links می‌تواند اطمینان حاصل کند که وقتی کاربری یک Dynamic Link را باز می‌کند اما ابتدا باید برنامه شما را نصب کند، کاربر می‌تواند بلافاصله پس از نصب، هنگام باز کردن برنامه برای اولین بار، به محتوای اصلی لینک شده دسترسی پیدا کند.

      نکته منفی این است که استفاده از pasteboard در iOS 14 و نسخه‌های بعدی باعث ایجاد یک اعلان می‌شود. بنابراین، اولین باری که کاربران برنامه شما را باز می‌کنند، اگر pasteboard حاوی یک URL پیوند پویا باشد، اعلانی مبنی بر دسترسی برنامه شما به pasteboard مشاهده می‌کنند که می‌تواند باعث سردرگمی شود.

      برای غیرفعال کردن این رفتار، فایل Info.plist پروژه Xcode خود را ویرایش کنید و کلید FirebaseDeepLinkPasteboardRetrievalEnabled را روی NO تنظیم کنید.

برای مدیریت یک پیوند پویا در برنامه خود، دو سناریو نیاز به پیاده‌سازی دارند.

ایالت خاتمه یافته

روش‌های زیر را تنظیم کنید:

  1. FirebaseDynamicLinks.getInitialLink - یک Future<PendingDynamicLinkData?> برمی‌گرداند.
  2. FirebaseDynamicLinks.onLink - کنترل‌کننده رویدادی که یک Stream حاوی PendingDynamicLinkData?

اندروید همیشه لینک را از طریق 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
});

از طرف دیگر، اگر می‌خواهید تشخیص دهید که آیا دقیقاً از یک Dynamic Link برای باز کردن برنامه استفاده شده است یا خیر، آن را به متد getDynamicLink ارسال کنید:

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

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

برای آزمایش یک لینک پویا در iOS، لازم است از یک دستگاه واقعی استفاده کنید. همچنین اگر می‌خواهید یک لینک پویا را از یک حالت برنامه خاتمه یافته (یعنی برنامه با کشیدن انگشت بسته شده است) آزمایش کنید، باید برنامه را در حالت انتشار (یعنی flutter run --release .) اجرا کنید.