برای ارسال یک پیام به چندین دستگاه، از پیامرسانی موضوعی استفاده کنید. این ویژگی به شما امکان میدهد پیامی را به چندین دستگاه که در یک موضوع خاص شرکت کردهاند، ارسال کنید.
این آموزش بر ارسال پیامهای موضوعی از سرور برنامه شما با استفاده از Admin SDK یا REST API برای FCM و دریافت و مدیریت آنها در یک برنامه اندرویدی تمرکز دارد. ما مدیریت پیامها را برای برنامههای پسزمینه و پیشزمینه پوشش خواهیم داد. تمام مراحل دستیابی به این هدف، از راهاندازی تا تأیید، پوشش داده شده است.
SDK را تنظیم کنید
اگر یک برنامه کلاینت اندروید برای FCM راهاندازی کردهاید یا مراحل ارسال اولین پیام خود را طی کردهاید، این بخش ممکن است مراحلی را که قبلاً انجام دادهاید، پوشش دهد.
قبل از اینکه شروع کنی
اندروید استودیو را به آخرین نسخه نصب یا بهروزرسانی کنید.
مطمئن شوید که پروژه شما این الزامات را برآورده میکند (توجه داشته باشید که برخی از محصولات ممکن است الزامات سختگیرانهتری داشته باشند):
- هدف API سطح ۲۱ (لالیپاپ) یا بالاتر
- از اندروید ۵.۰ یا بالاتر استفاده میکند
- از Jetpack (AndroidX) استفاده میکند که شامل برآورده کردن این الزامات نسخه میشود:
-
com.android.tools.build:gradle
نسخه ۷.۳.۰ یا بالاتر -
compileSdkVersion
۲۸ یا بالاتر
-
یک دستگاه فیزیکی راهاندازی کنید یا از یک شبیهساز برای اجرای برنامه خود استفاده کنید.
توجه داشته باشید که SDK های فایربیس که به سرویسهای گوگل پلی وابسته هستند، نیاز دارند که دستگاه یا شبیهساز، سرویسهای گوگل پلی را نصب کرده باشد.با استفاده از حساب گوگل خود وارد فایربیس شوید .
اگر از قبل پروژه اندروید ندارید و فقط میخواهید یک محصول Firebase را امتحان کنید، میتوانید یکی از نمونههای شروع سریع ما را دانلود کنید.
ایجاد یک پروژه فایربیس
قبل از اینکه بتوانید Firebase را به برنامه اندروید خود اضافه کنید، باید یک پروژه Firebase ایجاد کنید تا به برنامه اندروید شما متصل شود. برای کسب اطلاعات بیشتر در مورد پروژههای Firebase، به بخش «درک پروژههای Firebase» مراجعه کنید.
برنامه خود را با Firebase ثبت کنید
برای استفاده از فایربیس در برنامه اندروید خود، باید برنامه خود را در پروژه فایربیس خود ثبت کنید. ثبت برنامه اغلب "افزودن" برنامه به پروژه شما نامیده میشود.
به کنسول Firebase بروید.
در مرکز صفحه نمای کلی پروژه، روی آیکون اندروید (
) یا افزودن برنامه کلیک کنید تا گردش کار راهاندازی شود.نام بسته برنامه خود را در فیلد نام بسته اندروید وارد کنید.
نام بسته، برنامه شما را به طور منحصر به فرد در دستگاه و فروشگاه گوگل پلی مشخص میکند.
نام بسته اغلب به عنوان شناسه برنامه (Application ID) شناخته میشود.
نام بسته برنامه خود را در فایل Gradle ماژول (سطح برنامه) خود، که معمولاً
app/build.gradle
است، پیدا کنید (به عنوان مثال نام بسته:com.yourcompany.yourproject
).توجه داشته باشید که مقدار نام بسته به حروف بزرگ و کوچک حساس است و پس از ثبت برنامه اندروید Firebase در پروژه Firebase شما، نمیتوان آن را برای این برنامه تغییر داد.
(اختیاری) یک نام مستعار برنامه وارد کنید، که یک شناسه داخلی و راحت است که فقط در کنسول Firebase برای شما قابل مشاهده است.
روی ثبت برنامه کلیک کنید.
یک فایل پیکربندی Firebase اضافه کنید
فایل پیکربندی فایربیس برنامه خود (
) را دانلود و سپس به کدبیس خود اضافه کنید:google-services.json برای دریافت فایل پیکربندی Firebase برنامه خود، روی «دانلود google-services.json» کلیک کنید.
فایل پیکربندی خود را به دایرکتوری ریشه ماژول (سطح برنامه) برنامه خود منتقل کنید.
فایل پیکربندی Firebase حاوی شناسههای منحصر به فرد اما غیر محرمانه برای پروژه و برنامه شما است. برای کسب اطلاعات بیشتر در مورد این فایل پیکربندی، به بخش «درک پروژههای Firebase» مراجعه کنید.
شما میتوانید فایل پیکربندی Firebase خود را در هر زمانی دوباره دانلود کنید.
مطمئن شوید که نام فایل پیکربندی با کاراکترهای اضافی مانند
(2)
ضمیمه نشده باشد.
برای اینکه مقادیر موجود در فایل پیکربندی
شما برای SDK های Firebase قابل دسترسی باشند، به افزونه Gradle مربوط به سرویسهای گوگل (google-services.json google-services
) نیاز دارید.در فایل Gradle سطح ریشه (سطح پروژه) خود (
<project>/build.gradle.kts
یا<project>/build.gradle
)، افزونه سرویسهای گوگل را به عنوان یک وابستگی اضافه کنید:Kotlin
plugins { id("com.android.application") version "7.3.0" apply false // ... // Add the dependency for the Google services Gradle plugin id("com.google.gms.google-services") version "4.4.4" apply false }
Groovy
plugins { id 'com.android.application' version '7.3.0' apply false // ... // Add the dependency for the Google services Gradle plugin id 'com.google.gms.google-services' version '4.4.4' apply false }
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً
<project>/<app-module>/build.gradle.kts
یا<project>/<app-module>/build.gradle
)، افزونه سرویسهای گوگل را اضافه کنید:Kotlin
plugins { id("com.android.application") // Add the Google services Gradle plugin id("com.google.gms.google-services") // ... }
Groovy
plugins { id 'com.android.application' // Add the Google services Gradle plugin id 'com.google.gms.google-services' // ... }
اضافه کردن کیتهای توسعه نرمافزار فایربیس به برنامهتان
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً
<project>/<app-module>/build.gradle.kts
یا<project>/<app-module>/build.gradle
)، وابستگی مربوط به کتابخانه Firebase Cloud Messaging برای اندروید را اضافه کنید. توصیه میکنیم از Firebase Android BoM برای کنترل نسخهبندی کتابخانه استفاده کنید.برای یک تجربه بهینه با Firebase Cloud Messaging ، توصیه میکنیم Google Analytics در پروژه Firebase خود فعال کنید و Firebase SDK را برای Google Analytics به برنامه خود اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.4.0")) // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-messaging") implementation("com.google.firebase:firebase-analytics") }
با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخههای سازگار کتابخانههای اندروید Firebase استفاده خواهد کرد.
(جایگزین) اضافه کردن وابستگیهای کتابخانه Firebase بدون استفاده از BoM
اگر تصمیم به استفاده از Firebase BoM ندارید، باید هر نسخه از کتابخانه Firebase را در خط وابستگی آن مشخص کنید.
توجه داشته باشید که اگر از چندین کتابخانه Firebase در برنامه خود استفاده میکنید، اکیداً توصیه میکنیم از BoM برای مدیریت نسخههای کتابخانه استفاده کنید، که تضمین میکند همه نسخهها سازگار هستند.
dependencies { // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-messaging:25.0.1") implementation("com.google.firebase:firebase-analytics:23.0.0") }
پروژه اندروید خود را با فایلهای Gradle همگامسازی کنید.
نسخههای Gradle که از افزونه Android Gradle (AGP) نسخه ۴.۲ یا قدیمیتر استفاده میکنند، باید پشتیبانی از Java 8 را فعال کنند. در غیر این صورت، این پروژههای اندروید هنگام اضافه کردن Firebase SDK با خطای build مواجه میشوند.
برای رفع این مشکل در ساخت و ساز، میتوانید یکی از دو گزینه زیر را دنبال کنید:
-
compileOptions
ذکر شده از پیام خطا را به فایلbuild.gradle.kts
یاbuild.gradle
در سطح برنامه خود اضافه کنید. - مقدار
minSdk
برای پروژه اندروید خود به ۲۶ یا بالاتر افزایش دهید.
در این سوالات متداول درباره این شکست ساخت بیشتر بدانید.
-
برنامه کلاینت را در یک موضوع مشترک کنید
برنامههای کلاینت میتوانند در هر موضوع موجود مشترک شوند، یا میتوانند یک موضوع جدید ایجاد کنند. وقتی یک برنامه کلاینت در یک موضوع جدید (موضوعی که از قبل برای پروژه Firebase شما وجود ندارد) مشترک میشود، یک موضوع جدید با آن نام در FCM ایجاد میشود و هر کلاینتی میتواند متعاقباً در آن مشترک شود.
برای اشتراک در یک موضوع، برنامه کلاینت، subscribeToTopic()
نوع Firebase Cloud Messaging را با نام موضوع FCM فراخوانی میکند. این متد یک Task
برمیگرداند که میتواند توسط یک شنونده تکمیلکننده برای تعیین موفقیتآمیز بودن اشتراک استفاده شود:
Kotlin
Firebase.messaging.subscribeToTopic("weather") .addOnCompleteListener { task -> var msg = "Subscribed" if (!task.isSuccessful) { msg = "Subscribe failed" } Log.d(TAG, msg) Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() }
Java
FirebaseMessaging.getInstance().subscribeToTopic("weather") .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { String msg = "Subscribed"; if (!task.isSuccessful()) { msg = "Subscribe failed"; } Log.d(TAG, msg); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } });
برای لغو اشتراک، برنامهی کلاینت، تابع unsubscribeFromTopic()
Firebase Cloud Messaging را به همراه نام موضوع فراخوانی میکند.
دریافت و مدیریت پیامهای موضوعی
FCM پیامهای موضوعی را مانند سایر پیامهای پاییندستی ارسال میکند.
برای دریافت پیامها، از سرویسی استفاده کنید که FirebaseMessagingService
ارثبری میکند. سرویس شما باید فراخوانیهای onMessageReceived
و onDeletedMessages
را لغو کند.
onMessageReceived
برای اکثر انواع پیامها ارائه میشود، به جز موارد استثنای زیر:
پیامهای اعلان زمانی که برنامه شما در پسزمینه است، ارسال میشوند . در این حالت، اعلان به سینی سیستم دستگاه ارسال میشود. با لمس یک اعلان توسط کاربر، بهطور پیشفرض، لانچر برنامه باز میشود.
پیامهایی که هم حاوی اعلان و هم حاوی داده هستند، وقتی در پسزمینه دریافت میشوند . در این حالت، اعلان به سینی سیستم دستگاه ارسال میشود و داده در بخشهای اضافیِ intent مربوط به اکتیویتیِ لانچر شما ارسال میشود.
به طور خلاصه:
حالت برنامه | اعلان | دادهها | هر دو |
---|---|---|---|
پیشزمینه | onMessageReceived | onMessageReceived | onMessageReceived |
پیشینه | سینی سیستم | onMessageReceived | اعلان: سینی سیستم دادهها: در موارد اضافیِ هدف. |
به تابع فراخوانی onMessageReceived
زمانهایی اختصاص داده میشود که شما را قادر میسازد به سادگی یک اعلان ارسال کنید، اما این زمانها طوری طراحی نشدهاند که به برنامه اجازه دسترسی به شبکه یا انجام کارهای اضافی را بدهند. به این ترتیب، اگر برنامه شما کار پیچیدهتری انجام میدهد، باید کارهای اضافی انجام دهید تا مطمئن شوید که برنامه میتواند کار خود را تکمیل کند.
اگر انتظار دارید که برنامه شما برای مدیریت یک پیام به نزدیک به 10 ثانیه زمان نیاز داشته باشد، باید یک کار WorkManager را برنامهریزی کنید یا از دستورالعمل WakeLock در زیر پیروی کنید. در برخی موارد، بسته به تأخیرهای پیش از فراخوانی onMessageReceived
، از جمله تأخیرهای سیستم عامل، زمان راهاندازی برنامه، مسدود شدن نخ اصلی توسط سایر عملیات یا طولانی شدن بیش از حد فراخوانیهای قبلی onMessageReceived
، ممکن است بازه زمانی برای مدیریت یک پیام کمتر از 10 ثانیه باشد. پس از انقضای این زمانسنج، برنامه شما ممکن است در معرض از بین رفتن فرآیند یا محدودیتهای اجرای پسزمینه قرار گیرد. به خاطر داشته باشید که تأخیرها برای تراکنشهای شبکه و راهاندازی برنامه میتواند قابل توجه باشد، بنابراین در صورت شک، در صورت وجود هرگونه وابستگی ناهمزمان مانند دسترسی به شبکه یا الزامات بارگذاری فشرده دادهها، برنامهریزی کنید که پردازش پیام شما طولانی مدت باشد.
ویرایش مانیفست برنامه
برای استفاده از FirebaseMessagingService
، باید موارد زیر را در مانیفست برنامه خود اضافه کنید:
<service android:name=".java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
همچنین، توصیه میشود برای سفارشیسازی ظاهر اعلانها، مقادیر پیشفرض را تنظیم کنید. میتوانید یک آیکون پیشفرض سفارشی و یک رنگ پیشفرض سفارشی تعیین کنید که هر زمان مقادیر معادل در فایل اعلان تنظیم نشده باشند، اعمال میشوند.
این خطوط را داخل تگ application
اضافه کنید تا آیکون پیشفرض سفارشی و رنگ سفارشی تنظیم شود:
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. See README(https://goo.gl/l4GJaQ) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_ic_notification" /> <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message. See README(https://goo.gl/6BKBk7) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" />
اندروید آیکون پیشفرض سفارشی را برای
- تمام پیامهای اعلان ارسال شده از آهنگساز Notifications .
- هر پیام اعلانی که به صراحت آیکون را در بار داده اعلان تنظیم نکند.
اندروید از رنگ پیشفرض سفارشی برای
- تمام پیامهای اعلان ارسال شده از آهنگساز Notifications .
- هر پیام اعلانی که صراحتاً رنگ را در بار داده اعلان تنظیم نکند.
اگر هیچ آیکون پیشفرض سفارشی تنظیم نشده باشد و هیچ آیکونی در فایل اعلان تنظیم نشده باشد، اندروید آیکون برنامه را به رنگ سفید نمایش میدهد.
نادیده گرفتن onMessageReceived
با بازنویسی (override) متد FirebaseMessagingService.onMessageReceived
، میتوانید اقداماتی را بر اساس شیء RemoteMessage دریافتی انجام دهید و دادههای پیام را دریافت کنید:
Kotlin
override fun onMessageReceived(remoteMessage: RemoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: ${remoteMessage.from}") // Check if message contains a data payload. if (remoteMessage.data.isNotEmpty()) { Log.d(TAG, "Message data payload: ${remoteMessage.data}") // Check if data needs to be processed by long running job if (needsToBeScheduled()) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob() } else { // Handle message within 10 seconds handleNow() } } // Check if message contains a notification payload. remoteMessage.notification?.let { Log.d(TAG, "Message Notification Body: ${it.body}") } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
Java
@Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer): Handle FCM messages here. // Not getting messages here? See why this may be: https://goo.gl/39bRNJ Log.d(TAG, "From: " + remoteMessage.getFrom()); // Check if message contains a data payload. if (remoteMessage.getData().size() > 0) { Log.d(TAG, "Message data payload: " + remoteMessage.getData()); if (/* Check if data needs to be processed by long running job */ true) { // For long-running tasks (10 seconds or more) use WorkManager. scheduleJob(); } else { // Handle message within 10 seconds handleNow(); } } // Check if message contains a notification payload. if (remoteMessage.getNotification() != null) { Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); } // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. }
هنگام مدیریت پیامهای FCM، دستگاه را بیدار نگه دارید
اگر برنامه شما نیاز دارد که دستگاه را هنگام پردازش یک پیام FCM بیدار نگه دارد، باید در این مدت WakeLock را نگه دارد یا باید یک WorkManager job ایجاد کند. WakeLocks برای فعالیتهای پردازشی کوتاه که ممکن است از زمانهای پیشفرض onMessageReceived
فراتر روند، به خوبی کار میکنند. برای گردشهای کاری طولانی، مانند ارسال چندین RPC سریال به سرورهای شما، استفاده از WorkManager job مناسبتر از WakeLock است. در این بخش، ما بر نحوه استفاده از WakeLocks تمرکز میکنیم. WakeLock از به خواب رفتن دستگاه در حین اجرای برنامه جلوگیری میکند، که میتواند منجر به افزایش مصرف باتری شود، بنابراین استفاده از WakeLocks باید برای مواردی که برنامه شما نباید هنگام مدیریت پیام متوقف شود، مانند موارد زیر، در نظر گرفته شود:
- اعلانهایی به کاربر که حساس به زمان هستند.
- تعاملات با چیزی خارج از دستگاه که نباید قطع شود (مانند انتقال شبکه یا ارتباط با دستگاه دیگر، مانند ساعت جفتشده).
ابتدا باید مطمئن شوید که برنامه شما مجوز WakeLock را درخواست میکند (FCM SDK به طور پیشفرض این مجوز را دارد، بنابراین معمولاً نیازی به اضافه کردن چیزی نیست).
<uses-permission android:name="android.permission.WAKE_LOCK" />
سپس برنامه شما باید در شروع فراخوانی FirebaseMessagingService.onMessageReceived()
یک WakeLock دریافت کند و آن را در پایان فراخوانی آزاد کند.
FirebaseMessagingService
سفارشی برنامه:
@Override public void onMessageReceived(final RemoteMessage message) { // If this is a message that is time sensitive or shouldn't be interrupted WakeLock wakeLock = getSystemService(PowerManager.class).newWakeLock(PARTIAL_WAKE_LOCK, "myApp:messageReceived"); try { wakeLock.acquire(TIMEOUT_MS); // handle message ... finally { wakeLock.release(); } }
نادیده گرفتن onDeletedMessages
در برخی شرایط، ممکن است FCM پیامی را ارسال نکند. این اتفاق زمانی رخ میدهد که تعداد پیامهای در انتظار برای برنامه شما روی یک دستگاه خاص در زمان اتصال، بیش از 100 باشد یا اگر دستگاه بیش از یک ماه به FCM متصل نشده باشد. در این موارد، ممکن است یک فراخوانی به FirebaseMessagingService.onDeletedMessages()
دریافت کنید. وقتی نمونه برنامه این فراخوانی را دریافت میکند، باید همگامسازی کامل را با سرور برنامه شما انجام دهد. اگر در 4 هفته گذشته پیامی به برنامه روی آن دستگاه ارسال نکرده باشید، FCM تابع onDeletedMessages()
را فراخوانی نمیکند.مدیریت پیامهای اعلان در یک برنامه در پسزمینه
وقتی برنامه شما در پسزمینه است، اندروید پیامهای اعلان را به سینی سیستم هدایت میکند. با لمس اعلان توسط کاربر، بهطور پیشفرض، لانچر برنامه باز میشود.
این شامل پیامهایی میشود که حاوی اعلان و داده هستند (و تمام پیامهای ارسالی از کنسول اعلانها). در این موارد، اعلان به سینی سیستم دستگاه تحویل داده میشود و داده در بخشهای اضافیِ intent مربوط به اکتیویتیِ لانچر شما تحویل داده میشود.
برای اطلاع از نحوهی ارسال پیام به برنامهی خود، به داشبورد گزارشدهی FCM مراجعه کنید که تعداد پیامهای ارسالی و باز شده در دستگاههای اپل و اندروید را به همراه دادههای مربوط به «نمایشها» (اعلانهای مشاهده شده توسط کاربران) برای برنامههای اندروید ثبت میکند.
ساخت درخواستهای ارسال
پس از ایجاد یک موضوع، چه با عضویت نمونههای برنامه کلاینت در موضوع در سمت کلاینت و چه از طریق API سرور ، میتوانید پیامهایی را به موضوع ارسال کنید. اگر این اولین بار است که درخواستهای ارسال برای FCM را میسازید، برای اطلاعات مهم پیشزمینه و تنظیمات، به راهنمای محیط سرور و FCM خود مراجعه کنید.
در منطق ارسال خود در backend، نام موضوع مورد نظر را همانطور که نشان داده شده است، مشخص کنید:
نود جی اس
// The topic name can be optionally prefixed with "/topics/".
const topic = 'highScores';
const message = {
data: {
score: '850',
time: '2:45'
},
topic: topic
};
// Send a message to devices subscribed to the provided topic.
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
جاوا
// The topic name can be optionally prefixed with "/topics/".
String topic = "highScores";
// See documentation on defining a message payload.
Message message = Message.builder()
.putData("score", "850")
.putData("time", "2:45")
.setTopic(topic)
.build();
// Send a message to the devices subscribed to the provided topic.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
پایتون
# The topic name can be optionally prefixed with "/topics/".
topic = 'highScores'
# See documentation on defining a message payload.
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
topic=topic,
)
# Send a message to the devices subscribed to the provided topic.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
برو
// The topic name can be optionally prefixed with "/topics/".
topic := "highScores"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Topic: topic,
}
// Send a message to the devices subscribed to the provided topic.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)
سی شارپ
// The topic name can be optionally prefixed with "/topics/".
var topic = "highScores";
// See documentation on defining a message payload.
var message = new Message()
{
Data = new Dictionary<string, string>()
{
{ "score", "850" },
{ "time", "2:45" },
},
Topic = topic,
};
// Send a message to the devices subscribed to the provided topic.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
استراحت
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"topic" : "foo-bar",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message"
}
}
}
دستور cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message": {
"topic" : "foo-bar",
"notification": {
"body": "This is a Firebase Cloud Messaging Topic Message!",
"title": "FCM Message"
}
}
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
برای ارسال پیام به ترکیبی از موضوعات، یک شرط تعیین کنید، که یک عبارت بولی است که موضوعات هدف را مشخص میکند. برای مثال، شرط زیر پیامها را به دستگاههایی ارسال میکند که در TopicA
و TopicB
یا TopicC
مشترک هستند:
"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"
FCM ابتدا هر شرط داخل پرانتز را ارزیابی میکند و سپس عبارت را از چپ به راست ارزیابی میکند. در عبارت بالا، کاربری که در هر موضوع واحدی مشترک شده باشد، پیام را دریافت نمیکند. به همین ترتیب، کاربری که در TopicA
مشترک نشده باشد، پیام را دریافت نمیکند. این ترکیبها آن را دریافت میکنند:
-
TopicA
وTopicB
-
TopicA
وTopicC
شما میتوانید تا پنج موضوع را در عبارت شرطی خود بگنجانید.
برای ارسال به یک شرط:
نود جی اس
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
const condition = '\'stock-GOOG\' in topics || \'industry-tech\' in topics';
// See documentation on defining a message payload.
const message = {
notification: {
title: '$FooCorp up 1.43% on the day',
body: '$FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
},
condition: condition
};
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
جاوا
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
String condition = "'stock-GOOG' in topics || 'industry-tech' in topics";
// See documentation on defining a message payload.
Message message = Message.builder()
.setNotification(Notification.builder()
.setTitle("$GOOG up 1.43% on the day")
.setBody("$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.")
.build())
.setCondition(condition)
.build();
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
پایتون
# Define a condition which will send to devices which are subscribed
# to either the Google stock or the tech industry topics.
condition = "'stock-GOOG' in topics || 'industry-tech' in topics"
# See documentation on defining a message payload.
message = messaging.Message(
notification=messaging.Notification(
title='$GOOG up 1.43% on the day',
body='$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.',
),
condition=condition,
)
# Send a message to devices subscribed to the combination of topics
# specified by the provided condition.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)
برو
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
condition := "'stock-GOOG' in topics || 'industry-tech' in topics"
// See documentation on defining a message payload.
message := &messaging.Message{
Data: map[string]string{
"score": "850",
"time": "2:45",
},
Condition: condition,
}
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
response, err := client.Send(ctx, message)
if err != nil {
log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)
سی شارپ
// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";
// See documentation on defining a message payload.
var message = new Message()
{
Notification = new Notification()
{
Title = "$GOOG up 1.43% on the day",
Body = "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
},
Condition = condition,
};
// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
// Response is a message ID string.
Console.WriteLine("Successfully sent message: " + response);
استراحت
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"condition": "'dogs' in topics || 'cats' in topics",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message",
}
}
}
دستور cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"notification": {
"title": "FCM Message",
"body": "This is a Firebase Cloud Messaging Topic Message!",
},
"condition": "'dogs' in topics || 'cats' in topics"
}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
مراحل بعدی
- شما میتوانید از سرور خود برای اشتراکگذاری نمونههای برنامه کلاینت در موضوعات و انجام سایر وظایف مدیریتی استفاده کنید. به مدیریت اشتراکهای موضوع در سرور مراجعه کنید.