É possível inscrever um app cliente em um tópico no servidor ou no cliente:
No servidor, usando o Firebase Admin SDK.
No cliente, usando a API do lado do cliente no seu app.
Gerenciar inscrições em tópicos usando o SDK Admin
Com o Firebase Admin SDK é possível executar tarefas básicas de gerenciamento de tópicos do lado do servidor. Com os tokens de registro, é possível fazer e cancelar a inscrição de instâncias do app clienteem massa usando a lógica do servidor.
É possível inscrever instâncias de apps cliente em qualquer tópico ou criar um novo tópico. Se você usar a API para fazer a inscrição de um app cliente em um novo tópico que ainda não existe no seu projeto do Firebase, um novo tópico com esse nome será criado no FCM e qualquer cliente poderá se inscrever nele depois.
É possível transferir uma lista dos tokens de registro ao método Firebase Admin SDK para inscrever os dispositivos correspondentes em um tópico:
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);
});
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')
Go
// 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");
Com o Firebase Admin SDK, também é possível cancelar a inscrição de dispositivos em um tópico passando tokens de registro para o método adequado:
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);
});
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')
Go
// 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");
Os métodos subscribeToTopic()
e unsubscribeFromTopic()
retornam um objeto
que contém a resposta do FCM. O tipo de retorno tem o mesmo
formato, independentemente do número de tokens de registro especificados na
solicitação.
Em caso de erro (falhas de autenticação, token ou tópico inválido etc.), esses métodos resultam em um erro. Para ver uma lista completa de códigos de erros, incluindo descrições e etapas de solução de problemas, consulte Erros do Firebase Admin SDK.
Gerenciar inscrições em tópicos no app cliente
As instâncias de apps clientes também podem ser inscritas ou ter a inscrição cancelada em tópicos diretamente do seu app usando os SDKs do Firebase. O FCM tenta novamente em caso de falhas iniciais para garantir que a inscrição seja bem-sucedida.
Escolha sua plataforma:
Android
Os apps clientes podem ser inscritos em qualquer tópico atual ou podem criar um novo tópico. Quando um app cliente for inscrito em um novo nome de tópico que ainda não existe no seu projeto do Firebase, um novo tópico com esse nome será criado no FCM e qualquer cliente poderá se inscrever nele posteriormente.
Para se inscrever em um tópico, o app cliente chama o subscribeToTopic()
do Firebase Cloud Messaging com o nome do tópico do FCM. Esse método
retorna um Task
, que pode ser usado por um listener de conclusão para determinar se
a inscrição foi bem-sucedida:
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(); } });
Para cancelar a inscrição, o app cliente chama o unsubscribeFromTopic()
do Firebase Cloud Messaging
com o nome do tópico.
iOS
Os apps clientes podem ser inscritos em qualquer tópico atual ou podem criar um novo tópico. Quando um app cliente for inscrito em um novo nome de tópico que ainda não existe no seu projeto do Firebase, um novo tópico com esse nome será criado no FCM e qualquer cliente poderá se inscrever nele posteriormente.
Para se inscrever em um tópico, chame o método de inscrição na thread principal do seu aplicativo. O FCM não é thread-safe, ou seja, não está pronto para ter uma instância utilizada entre várias threads simultaneamente. Se a solicitação de inscrição falhar, o FCM vai repetir a tentativa automaticamente. Nos casos em que a inscrição não pode ser concluída, ela emite um erro que você captura em um manipulador de conclusão, conforme mostrado abaixo:
Swift
Messaging.messaging().subscribe(toTopic: "weather") { error in print("Subscribed to weather topic") }
Objective-C
[[FIRMessaging messaging] subscribeToTopic:@"weather" completion:^(NSError * _Nullable error) { NSLog(@"Subscribed to weather topic"); }];
Essa chamada faz uma
solicitação assíncrona ao back-end do FCM e inscreve o cliente
no tópico. Antes de chamar subscribeToTopic:topic
, use o retorno de chamada didReceiveRegistrationToken
para conferir se a
instância do app cliente já recebeu um token de registro.
Sempre que o app é iniciado,
o FCM verifica a inscrição em todos os tópicos solicitados. Para
cancelar a inscrição, chame unsubscribeFromTopic:topic
para que o FCM faça o cancelamento em segundo plano.
C++
Para fazer a assinatura de um tópico, chame
::firebase::messaging::Subscribe
do seu aplicativo. Isso cria uma solicitação assíncrona ao back-end do FCM
e inscreve o cliente no tópico.
::firebase::messaging::Subscribe("example");
Se a solicitação de inscrição falhar inicialmente, o FCM vai repetir a tentativa até que consiga fazer a inscrição no tópico. Sempre que o app é iniciado, o FCM verifica a inscrição em todos os tópicos solicitados.
Para cancelar a inscrição, chame ::firebase::messaging::Unsubscribe
para que o FCM faça o cancelamento em segundo plano.
Unity
Para fazer a assinatura de um tópico, chame
Firebase.Messaging.FirebaseMessaging.Subscribe
usando seu aplicativo. Isso cria uma solicitação assíncrona ao back-end do FCM
e inscreve o cliente no tópico.
Firebase.Messaging.FirebaseMessaging.Subscribe("/topics/example");
Se a solicitação de inscrição falhar inicialmente, o FCM vai repetir a tentativa até que consiga fazer a inscrição no tópico. Sempre que o app é iniciado, o FCM verifica a inscrição em todos os tópicos solicitados.
Para cancelar a inscrição, chame
Firebase.Messaging.FirebaseMessaging.Unsubscribe
para que o FCM faça o cancelamento em segundo plano.
Gerenciamento de tópicos do lado do servidor legado (descontinuado)
Para entender o que são IDs de instância, acesse a página de IDs de instância. Para mais detalhes sobre os endpoints descontinuados, consulte as referências da API Instance ID.