Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Android'de konu mesajları

Yayınlama / abone olma modeline bağlı olarak, FCM konu mesajlaşması, belirli bir konuyu seçen birden fazla cihaza mesaj göndermenize olanak tanır. Konu mesajlarını gerektiği gibi oluşturursunuz ve FCM, iletiyi doğru cihazlara güvenilir bir şekilde yönlendirmeyi ve teslim etmeyi yönetir.

Örneğin, yerel bir gelgit tahmini uygulamasının kullanıcıları bir "gelgit akıntıları uyarıları" konusunu seçebilir ve belirli alanlarda optimum tuzlu su balıkçılığı koşulları hakkında bildirimler alabilir. Bir spor uygulamasının kullanıcıları, tuttukları takımların canlı maç skorlarındaki otomatik güncellemelere abone olabilir.

Konular hakkında akılda tutulması gereken bazı noktalar:

  • Konu mesajları, en çok hava durumu gibi içerikler veya halka açık diğer bilgiler için uygundur.
  • Konu mesajları, gecikme yerine aktarım hızı için optimize edilmiştir . Tek cihazlara veya küçük cihaz gruplarına hızlı ve güvenli teslimat için mesajları konulara değil kayıt jetonlarına hedefleyin .
  • Kullanıcı başına birden fazla cihaza mesaj göndermeniz gerekiyorsa, bu kullanım durumları için cihaz grubu mesajlaşmasını düşünün.
  • Konu mesajları, her konu için sınırsız aboneliği destekler. Ancak FCM şu alanlarda sınırlar uygular:
    • Bir uygulama örneği 2000'den fazla konuya abone olamaz.
    • Uygulama örneklerine abone olmak için toplu içe aktarmayı kullanıyorsanız her istek 1000 uygulama örneğiyle sınırlıdır.
    • Yeni aboneliklerin sıklığı proje başına oranla sınırlıdır. Kısa bir süre içinde çok fazla abonelik isteği gönderirseniz, FCM sunucuları 429 RESOURCE_EXHAUSTED ("kota aşıldı") yanıtıyla yanıt verir. Üstel geri çekilme ile yeniden deneyin.

İstemci uygulamasını bir konuya abone olun

İstemci uygulamaları mevcut herhangi bir konuya abone olabilir veya yeni bir konu oluşturabilir. Bir istemci uygulaması yeni bir konu adına (Firebase projeniz için halihazırda mevcut olmayan) abone olduğunda, FCM'de o adda yeni bir konu oluşturulur ve daha sonra herhangi bir müşteri buna abone olabilir.

Bir konuya abone olmak için istemci uygulaması, FCM konu adıyla Firebase Cloud Messaging subscribeToTopic() çağırır. Bu yöntem, bir tamamlama dinleyicisi tarafından aboneliğin başarılı olup olmadığını belirlemek için kullanılabilen bir Task döndürür:

Java

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

Aboneliği iptal etmek için istemci uygulaması, konu adıyla Firebase Cloud Messaging unsubscribeFromTopic() çağırır.

Sunucudaki konu aboneliklerini yönetin

Firebase Admin SDK , sunucu tarafından temel konu yönetimi görevlerini gerçekleştirmenize olanak tanır. Kayıt jetonları göz önüne alındığında, sunucu mantığını kullanarak istemci uygulama örneklerine toplu olarak abone olabilir ve abonelikten çıkabilirsiniz.

İstemci uygulama örneklerine mevcut herhangi bir konuya abone olabilir veya yeni bir konu oluşturabilirsiniz. API'yi bir istemci uygulamasını yeni bir konuya (Firebase projeniz için halihazırda mevcut olmayan) abone yapmak için kullandığınızda, FCM'de o adda yeni bir konu oluşturulur ve daha sonra herhangi bir istemci buna abone olabilir.

İlgili cihazları bir konuya abone yapmak için Firebase Admin SDK abonelik yöntemine kayıt jetonlarının bir listesini iletebilirsiniz:

Node.js

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

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

Java

// 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");

Python

# 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')

Git

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

C #

// 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");

Admin FCM API, kayıt jetonlarını uygun yönteme geçirerek cihazların bir konuya olan aboneliğini iptal etmenize de olanak tanır:

Node.js

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

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

Java

// 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");

Python

# 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')

Git

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

C #

// 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() ve unsubscribeFromTopic() yöntemleri, FCM'den gelen yanıtı içeren bir nesne ile sonuçlanır. İade türü, talepte belirtilen kayıt jetonlarının sayısına bakılmaksızın aynı biçime sahiptir.

Bir hata durumunda (kimlik doğrulama hataları, geçersiz simge veya konu vb.) Bu yöntemler bir hatayla sonuçlanır. Açıklamalar ve çözüm adımları dahil olmak üzere hata kodlarının tam listesi için Yönetici FCM API Hataları sayfasına bakın .

Konu mesajlarını alın ve yönetin

FCM, konu mesajlarını diğer aşağı akış mesajlarıyla aynı şekilde iletir.

FirebaseMessagingService genişleten bir hizmet kullanın. Hizmetiniz onMessageReceived ve onDeletedMessages geri aramalarını geçersiz onDeletedMessages . Herhangi bir mesajı aldıktan sonra 20 saniye içinde işlemelidir (Android Marshmallow'da 10 saniye). Zaman penceresi, onMessageReceived çağrılmadan önce ortaya çıkan işletim sistemi gecikmelerine bağlı olarak daha kısa olabilir. Bu sürenin sonunda, Android O'nun arka plan yürütme sınırları gibi çeşitli işletim sistemi davranışları, çalışmanızı tamamlama yeteneğinizi etkileyebilir. Daha fazla bilgi için mesaj önceliğine genel bakışımıza bakın .

onMessageReceived , aşağıdaki istisnalar dışında çoğu ileti türü için sağlanır:

  • Uygulamanız arka plandayken gönderilen bildirim mesajları . Bu durumda bildirim, cihazın sistem tepsisine iletilir. Kullanıcının bir bildirime dokunduğu varsayılan olarak uygulama başlatıcıyı açar.

  • Arka planda alındığında hem bildirim hem de veri yükü içeren mesajlar . Bu durumda, bildirim cihazın sistem tepsisine iletilir ve veri yükü, başlatıcı Etkinliğinizin niyetinin ekstralarında teslim edilir.

Özetle:

Uygulama durumu Bildirim Veri Her ikisi de
Ön plan onMessageReceived onMessageReceived onMessageReceived
Arka fon Sistem tepsisi onMessageReceived Bildirim: sistem tepsisi
Veriler: niyetin ekstralarında.
Mesaj türleri hakkında daha fazla bilgi için bkz. Bildirimler ve veri mesajları .

Uygulama bildirimini düzenleyin

FirebaseMessagingService kullanmak için aşağıdakileri uygulama manifestinize eklemeniz gerekir:

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Ayrıca, bildirimlerin görünümünü özelleştirmek için varsayılan değerler ayarlamanız önerilir. Bildirim yükünde eşdeğer değerler ayarlanmadığında uygulanacak özel bir varsayılan simge ve özel bir varsayılan renk belirtebilirsiniz.

Özel varsayılan simgeyi ve özel rengi ayarlamak için application etiketinin içine şu satırları ekleyin:

<!-- 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 için özel varsayılan simgeyi görüntüler

  • Notifications oluşturucudan gönderilen tüm bildirim mesajları.
  • Bildirim yükünde açıkça simgeyi ayarlamayan herhangi bir bildirim mesajı.

Android, özel varsayılan rengi kullanır

  • Notifications oluşturucudan gönderilen tüm bildirim mesajları.
  • Bildirim yükünde rengi açıkça ayarlamayan herhangi bir bildirim mesajı.

Özel bir varsayılan simge ayarlanmazsa ve bildirim yükünde simge ayarlanmazsa, Android uygulama simgesini beyaz olarak görüntüler.

onMessageReceived geçersiz kıl

Yöntem geçersiz kılarak FirebaseMessagingService.onMessageReceived , alınan dayalı eylemleri gerçekleştirebilirsiniz RemoteMessage nesne ve mesaj verilerini almak:

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

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 geçersiz onDeletedMessages

Bazı durumlarda, FCM bir mesaj göndermeyebilir. Bu, bağlandığı anda belirli bir cihazda uygulamanız için bekleyen çok fazla mesaj (> 100) olduğunda veya cihaz FCM'ye bir aydan uzun bir süredir bağlanmadığında meydana gelir. Bu durumlarda, FirebaseMessagingService.onDeletedMessages() için bir geri arama alabilirsiniz Uygulama örneği bu geri aramayı aldığında, uygulama sunucunuzla tam bir senkronizasyon gerçekleştirmelidir. Son 4 hafta içinde o cihazdaki uygulamaya mesaj göndermediyseniz, FCM onDeletedMessages() .

Arka planda çalışan bir uygulamada bildirim mesajlarını yönetin

Uygulamanız arka planda olduğunda, Android bildirim mesajlarını sistem tepsisine yönlendirir. Kullanıcı bildirime dokunduğunda varsayılan olarak uygulama başlatıcı açılır.

Bu, hem bildirim hem de veri yükü içeren mesajları (ve Bildirimler konsolundan gönderilen tüm mesajları) içerir. Bu durumlarda, bildirim cihazın sistem tepsisine iletilir ve veri yükü, başlatıcı Etkinliğinizin niyetinin ekstralarında teslim edilir.

Uygulamanıza mesaj teslimi hakkında bilgi edinmek için, iOS ve Android cihazlarda gönderilen ve açılan mesajların sayısının yanı sıra Android uygulamaları için "gösterimler" (kullanıcılar tarafından görülen bildirimler) verilerini kaydeden FCM raporlama panosuna bakın.

Arka Plan Kısıtlı Uygulamalar (Android P veya daha yeni)

FCM, kullanıcı tarafından arka plan kısıtlamasına getirilen uygulamalara mesajlar göndermeyebilir (örneğin: Ayar -> Uygulamalar ve Bildirim -> [uygulama adı] -> Pil aracılığıyla). Uygulamanız arka plan kısıtlamasından kaldırıldığında, uygulamaya yeni mesajlar daha önce olduğu gibi teslim edilecektir. Kayıp mesajları ve diğer arka plan kısıtlama etkilerini önlemek için Android vitals tarafından listelenen kötü davranışlardan kaçının. Bu davranışlar, Android cihazının kullanıcıya uygulamanızın arka planda kısıtlanmasını önermesine neden olabilir. Uygulamanız isBackgroundRestricted () kullanarak arka planda kısıtlanmış olup olmadığını kontrol edebilir.

Gönderme istekleri oluşturun

Bir konu oluşturduktan sonra, istemci uygulama örneklerini istemci tarafındaki konuya abone olarak veya sunucu API'si aracılığıyla konuya mesaj gönderebilirsiniz. Bu, FCM için ilk kez gönderme istekleri oluşturuyorsanız, önemli arka plan ve kurulum bilgileri için sunucu ortamınız ve FCM kılavuzuna bakın.

Arka uçtaki gönderme mantığınızda, gösterilen şekilde istediğiniz konu adını belirtin:

Node.js

// The topic name can be optionally prefixed with "/topics/".
var topic = 'highScores';

var message = {
  data: {
    score: '850',
    time: '2:45'
  },
  topic: topic
};

// Send a message to devices subscribed to the provided topic.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Java

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

Python

# 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)

Git

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

C #

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

DİNLENME

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 komutu:

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

Bir konu kombinasyonuna mesaj göndermek için, hedef konuları belirten bir mantıksal ifade olan bir koşul belirtin. Örneğin, aşağıdaki koşul, TopicA ve TopicB veya TopicC abone olan cihazlara mesajlar gönderecektir:

"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"

FCM önce parantez içindeki herhangi bir koşulu değerlendirir ve ardından ifadeyi soldan sağa doğru değerlendirir. Yukarıdaki ifadede, herhangi bir konuya abone olan bir kullanıcı mesajı almaz. Benzer şekilde, TopicA abone olmayan bir kullanıcı mesajı almaz. Bu kombinasyonlar onu alıyor:

  • TopicA ve TopicB
  • TopicA ve TopicC

Koşullu ifadenize en fazla beş konu ekleyebilirsiniz.

Bir koşula göndermek için:

Node.js

// 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 = {
  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.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Java

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

Python

# 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)

Git

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

C #

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

DİNLENME

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 komutu:

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

Sonraki adımlar