با Firebase Cloud Messaging شروع کنید


این شروع سریع نحوه راه‌اندازی Firebase Cloud Messaging را در برنامه‌های تلفن همراه و کلاینت وب خود توضیح می‌دهد تا بتوانید به طور قابل اعتماد پیام ارسال کنید. برای محیط های سرور، محیط سرور شما و FCM را ببینید.

یک برنامه مشتری Firebase Cloud Messaging را در Flutter تنظیم کنید

بسته به پلتفرمی که هدف آن قرار می‌دهید، مراحل راه‌اندازی اضافی دیگری وجود دارد که باید انجام دهید.

iOS+

روش swizzling

برای استفاده از افزونه FCM Flutter در دستگاه‌های اپل، تغییر روش مورد نیاز است. بدون آن، ویژگی های کلیدی Firebase مانند مدیریت توکن FCM به درستی کار نمی کند.

اندروید

خدمات گوگل پلی

کلاینت‌های FCM به دستگاه‌های دارای Android نسخه 4.4 یا بالاتر که سرویس‌های Google Play را نیز نصب کرده‌اند، یا شبیه‌ساز دارای Android 4.4 با Google API نیاز دارند. توجه داشته باشید که شما محدود به استقرار برنامه های اندروید خود از طریق فروشگاه Google Play نیستید.

برنامه‌هایی که به Play Services SDK متکی هستند، باید همیشه قبل از دسترسی به ویژگی‌های سرویس‌های Google Play، دستگاه را برای یک APK سازگار با سرویس‌های Google Play بررسی کنند. توصیه می شود این کار را در دو مکان انجام دهید: در متد onCreate() اکتیویتی اصلی و در متد onResume() آن. بررسی onCreate() مطمئن می شود که برنامه بدون بررسی موفقیت آمیز قابل استفاده نیست. بررسی onResume() مطمئن می‌شود که اگر کاربر از طریق روش‌های دیگری مانند دکمه برگشت به برنامه در حال اجرا برگردد، بررسی همچنان انجام می‌شود.

اگر دستگاه نسخه سازگار خدمات Google Play را ندارد، برنامه شما می‌تواند با GoogleApiAvailability.makeGooglePlayServicesAvailable() تماس بگیرد تا به کاربران اجازه دهد خدمات Google Play را از فروشگاه Play دانلود کنند.

وب

اعتبارنامه وب را با FCM پیکربندی کنید

رابط وب FCM از اعتبارنامه‌های وب به نام شناسایی داوطلبانه برنامه کاربردی سرور یا کلیدهای "VAPID" استفاده می‌کند تا درخواست‌های ارسال را به سرویس‌های فشار وب پشتیبانی‌شده مجاز کند. برای اشتراک برنامه خود در اعلان‌های فشاری، باید یک جفت کلید را با پروژه Firebase خود مرتبط کنید. می توانید یک جفت کلید جدید ایجاد کنید یا جفت کلید موجود خود را از طریق کنسول Firebase وارد کنید.

افزونه FCM را نصب کنید

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

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

    flutter pub add firebase_messaging
    
  3. پس از تکمیل، برنامه Flutter خود را بازسازی کنید:

    flutter run
    

به رمز ثبت نام دسترسی پیدا کنید

برای ارسال پیام به یک دستگاه خاص، باید رمز ثبت دستگاه را بدانید. برای بازیابی رمز ثبت نام برای یک نمونه برنامه، getToken() را فراخوانی کنید. اگر مجوز اعلان داده نشده باشد، این روش از کاربر مجوزهای اعلان می خواهد. در غیر این صورت، توکن را برمی گرداند یا به دلیل خطا، آینده را رد می کند.

// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);

// For apple platforms, make sure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
 // APNS token is available, make FCM plugin API requests...
}

در پلتفرم های وب، کلید عمومی VAPID خود را به getToken() ارسال کنید:

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

برای اینکه هر زمان که توکن به روز می شود مطلع شوید، در جریان onTokenRefresh مشترک شوید:

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

جلوگیری از مقداردهی اولیه خودکار

هنگامی که یک نشانه ثبت FCM تولید می شود، کتابخانه شناسه و داده های پیکربندی را در Firebase آپلود می کند. اگر ترجیح می دهید از تولید خودکار توکن جلوگیری کنید، راه اندازی خودکار را در زمان ساخت غیرفعال کنید.

iOS

در iOS، یک مقدار فراداده به Info.plist خود اضافه کنید:

FirebaseMessagingAutoInitEnabled = NO

اندروید

در Android، مجموعه Analytics و مقداردهی اولیه خودکار FCM را غیرفعال کنید (شما باید هر دو را غیرفعال کنید) با افزودن این مقادیر فراداده به AndroidManifest.xml خود:

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

راه اندازی خودکار FCM را در زمان اجرا دوباره فعال کنید

برای فعال کردن راه اندازی خودکار برای یک نمونه برنامه خاص، setAutoInitEnabled() را فراخوانی کنید:

await FirebaseMessaging.instance.setAutoInitEnabled(true);

پس از تنظیم، این مقدار در سراسر راه اندازی مجدد برنامه باقی می ماند.

یک پیام اعلان آزمایشی ارسال کنید

  1. برنامه را روی دستگاه مورد نظر نصب و اجرا کنید. در دستگاه‌های اپل، باید درخواست مجوز برای دریافت اعلان‌های از راه دور را بپذیرید.
  2. مطمئن شوید که برنامه در پس‌زمینه دستگاه است.
  3. در کنسول Firebase، صفحه Messaging را باز کنید.
  4. اگر این اولین پیام شماست، ایجاد اولین کمپین خود را انتخاب کنید.
    1. پیام‌های اعلان Firebase را انتخاب کنید و ایجاد را انتخاب کنید.
  5. در غیر این صورت، در تب Campaigns ، کمپین جدید و سپس Notifications را انتخاب کنید.
  6. متن پیام را وارد کنید
  7. از قسمت سمت راست گزینه Send test message را انتخاب کنید.
  8. در فیلد با عنوان افزودن نشانه ثبت FCM ، رمز ثبت نام خود را وارد کنید.
  9. تست را انتخاب کنید.

پس از انتخاب تست ، دستگاه مشتری هدف، با برنامه در پس‌زمینه، باید اعلان را دریافت کند.

برای اطلاعات بیشتر در مورد تحویل پیام به برنامه خود، به داشبورد گزارش FCM مراجعه کنید، که تعداد پیام‌های ارسال شده و باز شده در دستگاه‌های Apple و Android را به همراه داده‌های نمایش برای برنامه‌های Android ثبت می‌کند.

مدیریت تعامل

وقتی کاربران روی یک اعلان ضربه می زنند، رفتار پیش فرض در اندروید و iOS باز کردن برنامه است. اگر برنامه خاتمه یابد، راه اندازی می شود و اگر در پس زمینه باشد، به پیش زمینه می آید.

بسته به محتوای یک اعلان، ممکن است بخواهید هنگام باز شدن برنامه، تعامل کاربر را کنترل کنید. برای مثال، اگر یک پیام چت جدید با استفاده از اعلان ارسال شود و کاربر آن را انتخاب کند، ممکن است بخواهید با باز شدن برنامه، مکالمه خاصی را باز کنید.

بسته firebase-messaging دو راه برای مدیریت این تعامل ارائه می‌دهد:

  1. getInitialMessage(): اگر برنامه از حالت پایان یافته باز شود، این متد Future حاوی RemoteMessage برمی گرداند. پس از مصرف، RemoteMessage حذف خواهد شد.
  2. onMessageOpenedApp : Stream که وقتی برنامه از حالت پس‌زمینه باز می‌شود، یک RemoteMessage ارسال می‌کند.

برای اطمینان از اینکه کاربران شما تجربه ای روان دارند، باید هر دو سناریو را مدیریت کنید. مثال کد زیر چگونگی دستیابی به این امر را شرح می دهد:

class Application extends StatefulWidget {
  @override
  State createState() => _Application();
}

class _Application extends State {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future setupInteractedMessage() async {
    // Get any messages which caused the application to open from
    // a terminated state.
    RemoteMessage? initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    // If the message also contains a data property with a "type" of "chat",
    // navigate to a chat screen
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }

    // Also handle any interaction when the app is in the background using a
    // Stream listener
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'chat') {
      Navigator.pushNamed(context, '/chat',
        arguments: ChatArguments(message),
      );
    }
  }

  @override
  void initState() {
    super.initState();

    // Run code required to handle interacted messages in an async function
    // as initState() must not be async
    setupInteractedMessage();
  }

  @override
  Widget build(BuildContext context) {
    return Text("...");
  }
}

نحوه مدیریت تعامل به تنظیمات شما بستگی دارد. مثالی که قبلا نشان داده شد یک مثال اساسی از استفاده از StatefulWidget است.

مراحل بعدی

پس از تکمیل مراحل راه اندازی، در اینجا چند گزینه برای حرکت رو به جلو با FCM برای Flutter وجود دارد: