پیوندهای دینامیک 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 خود را نیز مشخص کنید.

ادغام پلتفرم

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

اندروید

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

وقتی کاربران یک پیوند پویا را با پیوند عمیق به طرح و میزبانی که مشخص کرده‌اید باز می‌کنند، برنامه شما فعالیت را با این فیلتر قصد شروع می‌کند تا پیوند را مدیریت کند.

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

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

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

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

  3. در سایت Apple Developer، با فعال بودن قابلیت Associated Domain، یک نمایه تامین کننده برای برنامه خود ایجاد کنید.

  4. در Xcode موارد زیر را انجام دهید:

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

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

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

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

    5. اگر یک دامنه سفارشی برای پروژه Firebase خود راه اندازی کرده اید، پیشوند URL Link Dynamic Link را با استفاده از کلید 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. اختیاری: غیرفعال کردن استفاده SDK پیوندهای پویا از مقوای iOS.

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

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

      برای غیرفعال کردن این رفتار، فایل Info.plist پروژه Xcode خود را ویرایش کنید و کلید 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
});

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

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

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

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