Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Birden fazla cihaza mesaj gönderin

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Firebase Cloud Messaging, bir mesajı birden çok cihaza hedeflemenin iki yolunu sunar:

  • Belirli bir konuyu seçmiş birden fazla cihaza mesaj göndermenize olanak sağlayan konu mesajlaşma .
  • Tanımladığınız bir gruba ait birden fazla cihaza mesaj göndermenize olanak sağlayan cihaz grubu mesajlaşma .

Bu eğitici, FCM için Admin SDK veya REST API kullanarak uygulama sunucunuzdan konu mesajları göndermeye ve bunları bir android uygulamasında alıp işlemeye odaklanır. Hem arka planda hem de ön planda olan uygulamalar için mesaj işlemeyi ele alacağız. Bunu başarmak için tüm adımlar, kurulumdan doğrulamaya kadar ele alınmaktadır.

SDK'yı kurun

Bu bölüm, FCM için bir Android istemci uygulaması kurduysanız veya İlk Mesajınızı Gönderme adımlarını tamamladıysanız, tamamladığınız adımları kapsayabilir.

Sen başlamadan önce

  • Android Studio'yu en son sürümüne yükleyin veya güncelleyin.

  • Projenizin şu gereksinimleri karşıladığından emin olun:

    • API seviyesi 19 (KitKat) veya üzerini hedefler
    • Android 4.4 veya üstünü kullanır
    • Şu sürüm gereksinimlerini karşılamayı içeren Jetpack (AndroidX) kullanır:
      • com.android.tools.build:gradle v3.2.1 veya üstü
      • compileSdkVersion 28 veya üstü
  • Uygulamanızı çalıştırmak için fiziksel bir cihaz kurun veya bir öykünücü kullanın.
    Google Play hizmetlerine bağımlı olan Firebase SDK'larının , cihazın veya öykünücünün Google Play hizmetlerinin yüklü olmasını gerektirdiğini unutmayın.

  • Google hesabınızı kullanarak Firebase'de oturum açın.

Halihazırda bir Android projeniz yoksa ve yalnızca bir Firebase ürününü denemek istiyorsanız, hızlı başlangıç ​​örneklerimizden birini indirebilirsiniz.

Bir Firebase projesi oluşturun

Firebase'i Android uygulamanıza eklemeden önce Android uygulamanıza bağlanmak için bir Firebase projesi oluşturmanız gerekir. Firebase projeleri hakkında daha fazla bilgi edinmek için Firebase Projelerini Anlayın sayfasını ziyaret edin.

Uygulamanızı Firebase'e kaydedin

Firebase'i Android uygulamanızda kullanmak için uygulamanızı Firebase projenize kaydetmeniz gerekir. Uygulamanızı kaydetmeye genellikle uygulamanızı projenize "eklemek" denir.

  1. Firebase konsoluna gidin.

  2. Projeye genel bakış sayfasının ortasında, kurulum iş akışını başlatmak için Android simgesine ( ) veya Uygulama ekle'ye tıklayın.

  3. Android paket adı alanına uygulamanızın paket adını girin.

  4. (İsteğe bağlı) Diğer uygulama bilgilerini girin: Uygulama takma adı ve Hata ayıklama imzalama sertifikası SHA-1 .

  5. Uygulamayı kaydet'i tıklayın.

Firebase yapılandırma dosyası ekleyin

  1. Firebase Android yapılandırma dosyasını ( google-services.json ) indirin ve uygulamanıza ekleyin:

    1. Firebase Android yapılandırma dosyanızı almak için google-services.json'u İndir'i tıklayın.

    2. Yapılandırma dosyanızı uygulamanızın modül (uygulama düzeyi) kök dizinine taşıyın.

  2. google-services.json yapılandırma dosyanızdaki değerleri Firebase SDK'ları tarafından erişilebilir hale getirmek için Google services Gradle eklentisine ( google-services ) ihtiyacınız vardır.

    1. Kök düzeyinde (proje düzeyinde) Gradle dosyanızda ( <project>/build.gradle ), Google hizmetleri eklentisini bir buildscript bağımlılığı olarak ekleyin:

      buildscript {
      
          repositories {
            // Make sure that you have the following two repositories
            google()  // Google's Maven repository
            mavenCentral()  // Maven Central repository
          }
      
          dependencies {
            ...
      
            // Add the dependency for the Google services Gradle plugin
            classpath 'com.google.gms:google-services:4.3.14'
          }
      }
      
      allprojects {
        ...
      
        repositories {
          // Make sure that you have the following two repositories
          google()  // Google's Maven repository
          mavenCentral()  // Maven Central repository
        }
      }
      
    2. Modül (uygulama düzeyi) Gradle dosyanıza (genellikle <project>/<app-module>/build.gradle ), Google hizmetleri eklentisini ekleyin:

      plugins {
          id 'com.android.application'
      
          // Add the Google services Gradle plugin
          id 'com.google.gms.google-services'
          ...
      }
      

Uygulamanıza Firebase SDK'ları ekleyin

  1. Modülünüzde (uygulama düzeyinde) Gradle dosyanızda (genellikle <project>/<app-module>/build.gradle ), Firebase Cloud Messaging Android kitaplığı için bağımlılığı ekleyin. Kitaplık sürümü oluşturmayı kontrol etmek için Firebase Android BoM'yi kullanmanızı öneririz.

    Firebase Cloud Messaging ile optimum deneyim için, Firebase projenizde Google Analytics'i etkinleştirmenizi ve Google Analytics için Firebase SDK'sını uygulamanıza eklemenizi öneririz.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.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'yi kullanarak uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.

    (Alternatif) BoM kullanmadan Firebase kitaplık bağımlılıkları ekleyin

    Firebase Malzeme Listesini kullanmamayı seçerseniz, her bir Firebase kitaplık sürümünü bağımlılık satırında belirtmeniz gerekir.

    Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM'yi kullanmanızı şiddetle tavsiye ettiğimizi unutmayın; bu, tüm sürümlerin uyumlu olmasını sağlar.

    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:23.1.0'
        implementation 'com.google.firebase:firebase-analytics:21.2.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.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-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    Firebase Android BoM'yi kullanarak uygulamanız her zaman Firebase Android kitaplıklarının uyumlu sürümlerini kullanır.

    (Alternatif) BoM kullanmadan Firebase kitaplık bağımlılıkları ekleyin

    Firebase Malzeme Listesini kullanmamayı seçerseniz, her bir Firebase kitaplık sürümünü bağımlılık satırında belirtmeniz gerekir.

    Uygulamanızda birden fazla Firebase kitaplığı kullanıyorsanız kitaplık sürümlerini yönetmek için BoM'yi kullanmanızı şiddetle tavsiye ettiğimizi unutmayın; bu, tüm sürümlerin uyumlu olmasını sağlar.

    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-ktx:23.1.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.2.0'
    }
    

  2. Android projenizi Gradle dosyalarıyla senkronize edin.

İstemci uygulamasını bir konuya abone olma

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

Bir konuya abone olmak için, istemci uygulaması FCM konu adıyla Firebase Cloud Messaging subscribeToTopic() 'i çağırır. Bu yöntem, bir tamamlama dinleyicisi tarafından aboneliğin başarılı olup olmadığını belirlemek için kullanılabilecek 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 = "Subscribed";
                if (!task.isSuccessful()) {
                    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 = "Subscribed"
        if (!task.isSuccessful) {
            msg = "Subscribe failed"
        }
        Log.d(TAG, msg)
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
    }

Abonelikten çıkmak için, istemci uygulaması konu adıyla Firebase Cloud Messaging unsubscribeFromTopic() öğesini çağırır.

Konu mesajlarını alın ve işleyin

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

İletileri almak için FirebaseMessagingService genişleten bir hizmet kullanın. Hizmetiniz onMessageReceived ve onDeletedMessages geri aramalarını geçersiz kılmalıdır. Herhangi bir mesajı aldıktan sonra 20 saniye içinde (Android Marshmallow'da 10 saniye) işlemelidir. Zaman penceresi, onMessageReceived çağırmadan önce meydana gelen işletim sistemi gecikmelerine bağlı olarak daha kısa olabilir. Bu süreden sonra, Android O'nun arka planda yürütme sınırları gibi çeşitli işletim sistemi davranışları, işinizi 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 mesaj türü için sağlanır:

  • Uygulamanız arka plandayken gönderilen bildirim mesajları . Bu durumda bildirim, cihazın sistem tepsisine iletilir. Bir bildirime dokunan kullanıcı, 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 amacının ekstralarında teslim edilir.

Özetle:

Uygulama durumu Bildirim Veri İkisi birden
ön plan onMessageReceived onMessageReceived onMessageReceived
Arka fon Sistem tepsisi onMessageReceived Bildirim: sistem tepsisi
Veri: 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 uygulama bildiriminize aşağıdakileri 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 bu satırları application etiketinin içine 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, aşağıdakiler için özel varsayılan simgeyi görüntüler:

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

Android, aşağıdakiler için özel varsayılan rengi kullanır:

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

Herhangi bir özel varsayılan simge ayarlanmadıysa ve bildirim yükünde hiçbir simge ayarlanmadıysa, Android, uygulama simgesini beyaz olarak görüntüler.

onMessageReceived geçersiz kıl

FirebaseMessagingService.onMessageReceived yöntemini geçersiz kılarak, alınan RemoteMessage nesnesine dayalı eylemler gerçekleştirebilir ve mesaj verilerini alabilirsiniz:

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

Silinmiş Mesajları Geçersiz onDeletedMessages

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

Arka planlı bir uygulamada bildirim mesajlarını işleme

Uygulamanız arka plandayken Android, bildirim mesajlarını sistem tepsisine yönlendirir. Bildirime dokunan bir kullanıcı, varsayılan olarak uygulama başlatıcıyı açar.

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

Uygulamanıza ileti teslimine ilişkin bilgi için, Android uygulamaları için "gösterimler" (kullanıcılar tarafından görülen bildirimler) verileriyle birlikte Apple ve Android cihazlarda gönderilen ve açılan iletilerin sayısını kaydeden FCM raporlama panosuna bakın.

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

FCM, kullanıcı tarafından arka plan kısıtlamasına tabi tutulan uygulamalara mesaj iletemez (örneğin: Ayar -> Uygulamalar ve Bildirim -> [uygulama adı] -> Pil yoluyla). Uygulamanız arka plan kısıtlamasından kaldırıldığında, uygulamaya yeni mesajlar daha önce olduğu gibi teslim edilecektir. Kayıp iletileri ve arka plandaki diğer kısıtlama etkilerini önlemek için, Android vitals çabası tarafından listelenen kötü davranışlardan kaçındığınızdan emin olun. Bu davranışlar, Android cihazının kullanıcıya uygulamanızın arka planda kısıtlanmasını önermesine yol açabilir. Uygulamanız, arka planda kısıtlı olup olmadığını şu şekilde kontrol edebilir: isBackgroundRestricted() .

Gönderme istekleri oluştur

Bir konu oluşturduktan sonra, ya istemci tarafında konuya istemci uygulama örnekleri aboneliği yaparak ya da sunucu API'si aracılığıyla konuya mesaj gönderebilirsiniz. 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österildiği gibi istediğiniz konu adını belirtin:

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

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

piton

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

Gitmek

// 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 boole ifadesi olan bir koşul belirtin. Örneğin, aşağıdaki koşul, TopicA ve TopicB veya TopicC abone olan cihazlara mesaj gönderir:

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

FCM önce parantez içindeki koşulları 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. Aynı şekilde TopicA abone olmayan bir kullanıcı da mesajı almaz. Bu kombinasyonlar bunu alır:

  • 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.
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);
  });

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

piton

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

Gitmek

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