این شروع سریع نحوه راهاندازی Firebase Cloud Messaging را در برنامههای تلفن همراه و کلاینت وب خود توضیح میدهد تا بتوانید به طور قابل اعتماد پیام ارسال کنید. برای محیط های سرور، محیط سرور شما و FCM را ببینید.
یک برنامه مشتری Firebase Cloud Messaging را در Flutter تنظیم کنید
بسته به پلتفرمی که هدف آن قرار میدهید، مراحل راهاندازی اضافی دیگری وجود دارد که باید انجام دهید.
iOS+
قبل از اینکه برنامه شما بتواند پیامها را دریافت کند، باید اعلانهای فشار و حالتهای پسزمینه را در پروژه Xcode خود فعال کنید.
- فضای کاری پروژه Xcode خود را باز کنید (`ios/Runner.xcworkspace).
- اعلانهای فشاری را فعال کنید .
- حالتهای اجرای پسزمینه واکشی پسزمینه و اعلانهای از راه دور را فعال کنید.
قبل از استفاده از FCM ، کلید احراز هویت APN خود را در کنسول Firebase آپلود کنید. اگر از قبل یک کلید احراز هویت APN ندارید، یکی را در مرکز اعضای برنامهنویس Apple ایجاد کنید.
- در داخل پروژه خود در کنسول Firebase ، نماد چرخ دنده را انتخاب کنید، تنظیمات پروژه را انتخاب کنید و سپس برگه Cloud Messaging را انتخاب کنید.
- دکمه آپلود را برای آپلود کلید احراز هویت توسعه یا کلید احراز هویت تولید یا هر دو انتخاب کنید. حداقل یکی مورد نیاز است.
- برای هر کلید احراز هویت، فایل p8. را انتخاب کنید و شناسه کلید و شناسه تیم Apple خود را ارائه دهید. ذخیره را انتخاب کنید.
روش 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 وارد کنید.
- تب Cloud Messaging را در قسمت تنظیمات کنسول Firebase باز کنید و به بخش پیکربندی وب بروید.
- در برگه Web Push Certificates ، روی Generate Key Pair کلیک کنید. کنسول اعلامیه ای مبنی بر ایجاد جفت کلید نمایش می دهد و رشته کلید عمومی و تاریخ اضافه شده را نمایش می دهد.
اگر یک جفت کلید موجود دارید که از قبل با برنامه وب خود استفاده میکنید، میتوانید آن را به FCM وارد کنید تا بتوانید از طریق APIهای FCM به نمونههای برنامه وب موجود خود دسترسی پیدا کنید. برای وارد کردن کلیدها، باید به پروژه Firebase در سطح مالک دسترسی داشته باشید. کلید عمومی و خصوصی موجود خود را در قالب کدگذاری شده امن URL base64 وارد کنید:
- تب Cloud Messaging را در قسمت تنظیمات کنسول Firebase باز کنید و به بخش پیکربندی وب بروید.
- در برگه Web Push Certificates ، وارد کردن یک جفت کلید موجود را انتخاب کنید.
- در گفتگوی وارد کردن جفت کلید ، کلیدهای عمومی و خصوصی خود را در فیلدهای مربوطه وارد کنید و روی واردات کلیک کنید. کنسول رشته کلید عمومی و تاریخ اضافه شدن را نمایش می دهد.
برای اطلاعات بیشتر در مورد قالب کلیدها و نحوه تولید آنها، به کلیدهای سرور برنامه مراجعه کنید.
افزونه FCM را نصب کنید
اگر قبلاً این کار را نکرده اید ، افزونه های Firebase را برای Flutter نصب و مقداردهی اولیه کنید .
از ریشه پروژه Flutter خود، دستور زیر را برای نصب افزونه اجرا کنید:
flutter pub add firebase_messaging
پس از تکمیل، برنامه 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);
پس از تنظیم، این مقدار در سراسر راه اندازی مجدد برنامه باقی می ماند.
یک پیام اعلان آزمایشی ارسال کنید
- برنامه را روی دستگاه مورد نظر نصب و اجرا کنید. در دستگاههای اپل، باید درخواست مجوز برای دریافت اعلانهای از راه دور را بپذیرید.
- مطمئن شوید که برنامه در پسزمینه دستگاه است.
- در کنسول Firebase، صفحه Messaging را باز کنید.
- اگر این اولین پیام شماست، ایجاد اولین کمپین خود را انتخاب کنید.
- پیامهای اعلان Firebase را انتخاب کنید و ایجاد را انتخاب کنید.
- در غیر این صورت، در تب Campaigns ، کمپین جدید و سپس Notifications را انتخاب کنید.
- متن پیام را وارد کنید
- از قسمت سمت راست گزینه Send test message را انتخاب کنید.
- در فیلد با عنوان افزودن نشانه ثبت FCM ، رمز ثبت نام خود را وارد کنید.
- تست را انتخاب کنید.
پس از انتخاب تست ، دستگاه مشتری هدف، با برنامه در پسزمینه، باید اعلان را دریافت کند.
برای اطلاعات بیشتر در مورد تحویل پیام به برنامه خود، به داشبورد گزارش FCM مراجعه کنید، که تعداد پیامهای ارسال شده و باز شده در دستگاههای Apple و Android را به همراه دادههای نمایش برای برنامههای Android ثبت میکند.
مدیریت تعامل
وقتی کاربران روی یک اعلان ضربه می زنند، رفتار پیش فرض در اندروید و iOS باز کردن برنامه است. اگر برنامه خاتمه یابد، راه اندازی می شود و اگر در پس زمینه باشد، به پیش زمینه می آید.
بسته به محتوای یک اعلان، ممکن است بخواهید هنگام باز شدن برنامه، تعامل کاربر را کنترل کنید. برای مثال، اگر یک پیام چت جدید با استفاده از اعلان ارسال شود و کاربر آن را انتخاب کند، ممکن است بخواهید با باز شدن برنامه، مکالمه خاصی را باز کنید.
بسته firebase-messaging
دو راه برای مدیریت این تعامل ارائه میدهد:
-
getInitialMessage():
اگر برنامه از حالت پایان یافته باز شود، این متدFuture
حاویRemoteMessage
برمی گرداند. پس از مصرف،RemoteMessage
حذف خواهد شد. -
onMessageOpenedApp
:Stream
که وقتی برنامه از حالت پسزمینه باز میشود، یکRemoteMessage
ارسال میکند.
برای اطمینان از اینکه کاربران شما تجربه ای روان دارند، باید هر دو سناریو را مدیریت کنید. مثال کد زیر چگونگی دستیابی به این امر را شرح می دهد:
class Application extends StatefulWidget { @override StatecreateState() => _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 وجود دارد: