Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

پیام رسانی موضوعی در Android

بر اساس مدل انتشار/اشتراک ، پیام های موضوعی FCM به شما امکان می دهد تا به چند دستگاهی که در یک موضوع خاص تصمیم گرفته اند پیام ارسال کنید. شما پیامهای موضوعی را در صورت نیاز می نویسید و FCM مسیریابی و ارسال پیام را به طور قابل اعتماد به دستگاه های مناسب انجام می دهد.

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

نکاتی که باید در مورد موضوعات رعایت شود:

  • پیام های موضوعی برای محتواهایی مانند آب و هوا یا سایر اطلاعات عمومی در دسترس است.
  • پیام از موضوعات را برای توان به جای تاخیر بهینه شده است. برای سریع، تحویل امن به دستگاه های تک یا گروه های کوچک از دستگاه های، پیام هدف به نشانه ثبت نام ، نه موضوع است.
  • اگر شما نیاز به ارسال پیام به دستگاه های مختلف برای هر کاربر، در نظر پیام های گروه دستگاه برای کسانی که موارد استفاده کنید.
  • پیام های موضوعی از اشتراک نامحدود برای هر موضوع پشتیبانی می کند. با این حال ، FCM محدودیت هایی را در موارد زیر اعمال می کند:
    • یک نمونه برنامه را می توان در بیش از 2000 موضوع مشترک کرد.
    • اگر شما با استفاده واردات دسته ای برای عضویت در نمونه برنامه، هر یک درخواست به 1000 نمونه برنامه های محدود شده است.
    • فراوانی اشتراک های جدید در هر پروژه محدود به نرخ است. اگر شما بیش از حد بسیاری از درخواست اشتراک ارسال در یک دوره کوتاه از زمان، سرور FCM با پاسخ خواهد داد 429 RESOURCE_EXHAUSTED ( "بیش از سهمیه مجاز") استفاده نمود. دوباره امتحان کنید.

برنامه مشتری را در یک موضوع مشترک کنید

برنامه های مشتری می توانند در هر موضوع موجود مشترک شوند ، یا می توانند یک موضوع جدید ایجاد کنند. هنگامی که یک برنامه سرویس گیرنده با نام موضوع جدیدی (که برای پروژه Firebase شما وجود ندارد) مشترک می شود ، یک موضوع جدید با آن نام در FCM ایجاد می شود و هر مشتری می تواند متعاقباً در آن مشترک شود.

برای عضویت در یک موضوع، برنامه ی کلاینت خواستار فایربیس ابر پیام subscribeToTopic() با نام موضوع FCM. این روش یک Task است که می تواند توسط یک شنونده از اتمام استفاده برای تعیین اینکه آیا اشتراک موفق:

جاوا

FirebaseMessaging.getInstance().subscribeToTopic("weather")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                String msg = getString(R.string.msg_subscribed);
                if (!task.isSuccessful()) {
                    msg = getString(R.string.msg_subscribe_failed);
                }
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin+KTX

Firebase.messaging.subscribeToTopic("weather")
        .addOnCompleteListener { task ->
            var msg = getString(R.string.msg_subscribed)
            if (!task.isSuccessful) {
                msg = getString(R.string.msg_subscribe_failed)
            }
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        }

برای لغو اشتراک، برنامه ی کلاینت خواستار فایربیس ابر پیام unsubscribeFromTopic() با نام موضوع.

مدیریت اشتراک موضوعات در سرور

فایربیس محیط مدیریت SDK اجازه می دهد تا شما را به انجام اساسی وظایف مدیریت موضوع را از سمت سرور. با توجه به نشانه (های) ثبت نام آنها ، می توانید نمونه برنامه های سرویس گیرنده را به صورت عمده با استفاده از منطق سرور مشترک و لغو کنید.

می توانید نمونه برنامه های مشتری را در هر موضوع موجود مشترک کنید ، یا می توانید یک موضوع جدید ایجاد کنید. وقتی از API برای مشترک شدن یک برنامه مشتری در یک موضوع جدید (موضوعی که قبلاً برای پروژه Firebase شما وجود ندارد) استفاده می کنید ، یک موضوع جدید با این نام در FCM ایجاد می شود و هر مشتری می تواند متعاقباً در آن مشترک شود.

می توانید لیستی از نشانه های ثبت نام را به روش اشتراک SDK سرپرست Firebase منتقل کنید تا دستگاه های مربوطه را در یک موضوع مشترک کنید:

Node.js

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  'YOUR_REGISTRATION_TOKEN_1',
  // ...
  'YOUR_REGISTRATION_TOKEN_n'
];

// Subscribe the devices corresponding to the registration tokens to the
// topic.
getMessaging().subscribeToTopic(registrationTokens, topic)
  .then((response) => {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully subscribed to topic:', response);
  })
  .catch((error) => {
    console.log('Error subscribing to topic:', error);
  });

جاوا

// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n"
);

// Subscribe the devices corresponding to the registration tokens to the
// topic.
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were subscribed successfully");

پایتون

# These registration tokens come from the client FCM SDKs.
registration_tokens = [
    'YOUR_REGISTRATION_TOKEN_1',
    # ...
    'YOUR_REGISTRATION_TOKEN_n',
]

# Subscribe the devices corresponding to the registration tokens to the
# topic.
response = messaging.subscribe_to_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were subscribed successfully')

برو

// These registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}

// Subscribe the devices corresponding to the registration tokens to the
// topic.
response, err := client.SubscribeToTopic(ctx, registrationTokens, topic)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were subscribed successfully")

سی شارپ

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Subscribe the devices corresponding to the registration tokens to the
// topic
var response = await FirebaseMessaging.DefaultInstance.SubscribeToTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were subscribed successfully");

API Admin FCM همچنین به شما این امکان را می دهد تا با انتقال نشانه های ثبت نام به روش مناسب ، اشتراک دستگاه ها را از یک موضوع لغو کنید:

Node.js

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  'YOUR_REGISTRATION_TOKEN_1',
  // ...
  'YOUR_REGISTRATION_TOKEN_n'
];

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
getMessaging().unsubscribeFromTopic(registrationTokens, topic)
  .then((response) => {
    // See the MessagingTopicManagementResponse reference documentation
    // for the contents of response.
    console.log('Successfully unsubscribed from topic:', response);
  })
  .catch((error) => {
    console.log('Error unsubscribing from topic:', error);
  });

جاوا

// These registration tokens come from the client FCM SDKs.
List<String> registrationTokens = Arrays.asList(
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n"
);

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
TopicManagementResponse response = FirebaseMessaging.getInstance().unsubscribeFromTopic(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were unsubscribed successfully");

پایتون

# These registration tokens come from the client FCM SDKs.
registration_tokens = [
    'YOUR_REGISTRATION_TOKEN_1',
    # ...
    'YOUR_REGISTRATION_TOKEN_n',
]

# Unubscribe the devices corresponding to the registration tokens from the
# topic.
response = messaging.unsubscribe_from_topic(registration_tokens, topic)
# See the TopicManagementResponse reference documentation
# for the contents of response.
print(response.success_count, 'tokens were unsubscribed successfully')

برو

// These registration tokens come from the client FCM SDKs.
registrationTokens := []string{
	"YOUR_REGISTRATION_TOKEN_1",
	// ...
	"YOUR_REGISTRATION_TOKEN_n",
}

// Unsubscribe the devices corresponding to the registration tokens from
// the topic.
response, err := client.UnsubscribeFromTopic(ctx, registrationTokens, topic)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were unsubscribed successfully")

سی شارپ

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Unsubscribe the devices corresponding to the registration tokens from the
// topic
var response = await FirebaseMessaging.DefaultInstance.UnsubscribeFromTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were unsubscribed successfully");

subscribeToTopic() و unsubscribeFromTopic() روش نتایج در یک شیء شامل پاسخ از FCM. نوع بازگشت بدون در نظر گرفتن تعداد توکن های ثبت شده در درخواست دارای همان فرمت است.

در صورت بروز خطا (خطاهای احراز هویت ، رمز معتبر یا موضوع و غیره) این روش ها منجر به خطا می شود. برای یک لیست کامل از کدهای خطا، از جمله شرح و مراحل وضوح، و مدیریت FCM خطاها API .

دریافت و مدیریت پیام های موضوعی

FCM پیامهای موضوعی را مانند سایر پیامهای پایین دست ارائه می دهد.

برای دریافت پیام، استفاده از یک سرویس است که گسترش FirebaseMessagingService . خدمات شما باید نادیده گرفتن onMessageReceived و onDeletedMessages تماس مجدد. این باید هر پیامی را در عرض 20 ثانیه پس از دریافت (10 ثانیه در Android Marshmallow) مدیریت کند. پنجره زمان ممکن است بسته به تاخیر سیستم عامل پیش از فراخوانی متحمل تواند کوتاه تر onMessageReceived . پس از آن زمان، رفتارهای سیستم عامل های مختلف از جمله آندروید O و محدودیت اعدام پس زمینه ممکن است با توانایی خود را برای تکمیل کار خود را دخالت. برای کسب اطلاعات بیشتر در مرور کلی ما را ببینید اولویت پیام .

onMessageReceived است برای بسیاری از انواع پیام ارائه شده، با استثنا زیر:

  • پیام های اطلاع رسانی تحویل داده زمانی که برنامه خود را در پس زمینه است. در این حالت ، اعلان به سینی سیستم دستگاه تحویل داده می شود. با ضربه زدن روی اعلان ، راه انداز برنامه به طور پیش فرض باز می شود.

  • پیغام با هر دو اطلاع رسانی و بار دادهای، هنگامی که در پس زمینه دریافت کرده است. در این حالت ، اعلان به سینی سیستم دستگاه تحویل داده می شود و بار داده ها به صورت اضافی از هدف راه انداز فعالیت شما تحویل داده می شود.

به طور خلاصه:

حالت برنامه اطلاع داده ها هر دو
پیش زمینه onMessageReceived onMessageReceived onMessageReceived
زمینه سینی سیستم onMessageReceived اعلان: سینی سیستم
داده ها: در موارد اضافی قصد.
برای کسب اطلاعات بیشتر در مورد انواع پیام، و اطلاعیه ها و داده های پیام .

مانیفست برنامه را ویرایش کنید

برای استفاده از 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" />

Android نماد پیش فرض سفارشی برای

  • همه پیام های اطلاع رسانی ارسال شده از آهنگساز اطلاعیه .
  • هر پیام اعلانی که به صراحت نماد آن را در بار اعلان تنظیم نکند.

اندروید از رنگ پیش فرض سفارشی برای

  • همه پیام های اطلاع رسانی ارسال شده از آهنگساز اطلاعیه .
  • هر پیام اعلانی که به صراحت رنگ را در بار اعلان مشخص نکند.

اگر هیچ نماد پیش فرض سفارشی تنظیم نشده و هیچ نمادی در بار اعلان تنظیم نشده باشد ، Android نماد برنامه را به رنگ سفید نمایش می دهد.

نادیده گرفتن onMessageReceived

توسط فارغ روش FirebaseMessagingService.onMessageReceived ، شما می توانید اقدامات بر اساس دریافت انجام RemoteMessage شی و دریافت داده ها پیام:

جاوا

@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.
}

Kotlin+KTX

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}")

        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.
    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.
}

نادیده گرفتن onDeletedMessages

در برخی موارد ، FCM ممکن است پیامی ارائه ندهد. این امر زمانی اتفاق می افتد که پیام های زیادی (> 100) برای برنامه شما در یک دستگاه خاص در زمان اتصال یا اگر دستگاه بیش از یک ماه به FCM وصل نشده باشد ، در انتظار است. در این موارد، شما ممکن است پاسخ به تماس به دریافت FirebaseMessagingService.onDeletedMessages() هنگامی که به عنوان مثال برنامه این پاسخ به تماس دریافت، آن را باید یک همگام سازی کامل با سرور برنامه خود را انجام دهد. اگر شما یک پیام به برنامه را در آن دستگاه در 4 هفته گذشته فرستاده نشد، FCM خواهد پاسخ نمی onDeletedMessages() .

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

وقتی برنامه شما در پس زمینه است ، Android پیام های اعلان را به سینی سیستم هدایت می کند. با ضربه زدن روی اعلان ، راه انداز برنامه به طور پیش فرض باز می شود.

این شامل پیام هایی می شود که حاوی اعلان و بار بار داده (و همه پیام های ارسال شده از کنسول اعلان ها) است. در این موارد ، اعلان به سینی سیستم دستگاه تحویل داده می شود ، و بار داده ها در موارد اضافی از هدف راه انداز فعالیت شما تحویل داده می شود.

بینش به تحویل پیام را به برنامه خود را، مشاهده داشبورد FCM گزارش ، که سوابق تعدادی از پیام های ارسال شده و برای "برداشت" (اطلاعیه دیده شده توسط کاربران) برای برنامه های آندروید باز به دستگاه های iOS و آندروید، همراه با داده.

برنامه های محدود در پس زمینه (Android P یا جدیدتر)

FCM ممکن است پیام را به برنامه های که به قرار گرفتند ارائه نمی محدودیت پس زمینه توسط کاربر (مانند از طریق: تنظیمات -> نرم افزار و اطلاع رسانی -> [درباره APPNAME] -> باتری). پس از حذف برنامه شما از محدودیت پس زمینه ، پیامهای جدید به برنامه مانند قبل تحویل داده می شود. به منظور جلوگیری از پیام های از دست داده و دیگر اثرات محدودیت پس زمینه، مطمئن شوید که برای جلوگیری از رفتارهای بد ذکر شده توسط اعضای حیاتی و موثر آندروید تلاش. این رفتارها می تواند باعث شود دستگاه Android به کاربر توصیه کند برنامه شما دارای پس زمینه باشد. برنامه شما می توانید بررسی کنید اگر پس زمینه محدود با استفاده از است: isBackgroundRestricted () .

ساخت درخواست های ارسال

بعد از اینکه شما یک موضوع، هم با اشتراک موارد برنامه سرویس گیرنده به موضوع در سمت سرویس گیرنده و یا از طریق ایجاد کرده اند API سرور ، شما می توانید پیام به موضوع ارسال. اگر این اولین بار خود را ساخت درخواست ارسال برای FCM است، راهنمای به دیدن محیط سرور خود را و FCM برای پس زمینه های مهم و اطلاعات راه اندازی.

در منطق ارسال خود در پشت سر ، نام موضوع مورد نظر را مطابق شکل مشخص کنید:

Node.js

// 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

می توانید حداکثر پنج موضوع را در بیان شرطی خود قرار دهید.

برای ارسال به شرط:

Node.js

// 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

مراحل بعدی