A GEM FCM permite que seu back -end do Ruby envie notificações para dispositivos Android e iOS via Firebase Cloud Messaging.
$ gem install fcm
Ou no seu Gemfile
apenas inclua:
gem 'fcm'
Para o Android, você precisará de um dispositivo executando 2.3 (ou mais recente) que também possui o aplicativo Google Play Store instalado ou um emulador executando o Android 2.3 com o Google APIs. Os dispositivos iOS também são suportados.
Uma versão do Ruby suportado, atualmente: ruby >= 2.4
Para usar esta jóia, você precisa instanciar um cliente com suas credenciais do Firebase:
fcm = FCM . new (
GOOGLE_APPLICATION_CREDENTIALS_PATH ,
FIREBASE_PROJECT_ID
)
GOOGLE_APPLICATION_CREDENTIALS_PATH
O GOOGLE_APPLICATION_CREDENTIALS_PATH
deve conter suas credenciais de Firebase.
A maneira mais fácil de fornecê -los é passar aqui um caminho absoluto para um arquivo com suas credenciais:
fcm = FCM . new (
'/path/to/credentials.json' ,
FIREBASE_PROJECT_ID
)
De acordo com a natureza secreta deles, você pode não querer tê -los em seu repositório. Nesse caso, outra solução suportada é passar por um StringIO
que contém suas credenciais:
fcm = FCM . new (
StringIO . new ( ENV . fetch ( 'FIREBASE_CREDENTIALS' ) ) ,
FIREBASE_PROJECT_ID
)
Para migrar para http v1, consulte: https://firebase.google.com/docs/cloud-messaging/migrate-v1
fcm = FCM . new (
GOOGLE_APPLICATION_CREDENTIALS_PATH ,
FIREBASE_PROJECT_ID
)
message = {
'token' : "000iddqd" , # send to a specific device
# 'topic': "yourTopic",
# 'condition': "'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)",
'data' : {
payload : {
data : {
id : 1
}
} . to_json
} ,
'notification' : {
title : notification . title_th ,
body : notification . body_th ,
} ,
'android' : { } ,
'apns' : {
payload : {
aps : {
sound : "default" ,
category : " #{ Time . zone . now . to_i } "
}
}
} ,
'fcm_options' : {
analytics_label : 'Label'
}
}
fcm . send_v1 ( message ) # or fcm.send_notification_v1(message)
Com as mensagens do grupo de dispositivos, você pode enviar uma única mensagem para várias instâncias de um aplicativo em execução em dispositivos pertencentes a um grupo. Normalmente, "Grupo" refere -se a um conjunto de dispositivos diferentes que pertencem a um único usuário. No entanto, um grupo também pode representar um conjunto de dispositivos em que a instância do aplicativo funciona de maneira altamente correlacionada. Para usar esse recurso, você precisará primeiro de uma classe FCM
inicializada.
O número máximo de membros permitidos para uma chave de notificação é 20. https://firebase.google.com/docs/cloud-messaging/android/device-group#managing_device_groups
Em seguida, você precisará de uma chave de notificação que possa criar para um específico key_name
que precisa ser nomeado exclusivamente por aplicativo, caso você tenha vários aplicativos para o mesmo project_id
. Isso garante que as notificações acessem apenas o aplicativo de destino pretendido. O método create
fará isso e retornará o token notification_key
, que representa o grupo de dispositivos, na resposta:
project_id
é o sender_id em suas configurações de nuvem. https://firebase.google.com/docs/cloud-messaging/concept-options#senderid
params = { key_name : "appUser-Chris" ,
project_id : "my_project_id" ,
registration_ids : [ "4" , "8" , "15" , "16" , "23" , "42" ] }
response = fcm . create ( * params . values )
Para enviar mensagens para grupos de dispositivos, use a API HTTP V1, enviar mensagens para um grupo de dispositivos é muito semelhante ao envio de mensagens para um dispositivo individual, usando o mesmo método para autorizar solicitações de envio. Defina o campo token para a chave de notificação do grupo
message = {
'token' : "NOTIFICATION_KEY" , # send to a device group
# ...data
}
fcm . send_v1 ( message )
Você também pode adicionar/remover tokens de registro para/para uma determinada notification_key
de algum project_id
. Por exemplo:
params = { key_name : "appUser-Chris" ,
project_id : "my_project_id" ,
notification_key : "appUser-Chris-key" ,
registration_ids : [ "7" , "3" ] }
response = fcm . add ( * params . values )
params = { key_name : "appUser-Chris" ,
project_id : "my_project_id" ,
notification_key : "appUser-Chris-key" ,
registration_ids : [ "8" , "15" ] }
response = fcm . remove ( * params . values )
As mensagens de tópico do FCM permitem que seu servidor de aplicativos envie uma mensagem para vários dispositivos que optaram por um tópico específico. Com base no modelo de publicação/inscrição, uma instância do aplicativo pode ser assinada por não mais que 2000 tópicos. O envio para um tópico é muito semelhante ao envio para um dispositivo individual ou a um grupo de usuários, no sentido de que você pode usar o método fcm.send_v1
, onde o topic
corresponde à expressão regular "/topics/[a-zA-Z0-9-_.~%]+"
:
message = {
'topic' : "yourTopic" , # send to a device group
# ...data
}
fcm . send_v1 ( message )
Ou você pode usar o fcm.send_to_topic
auxiliar:
response = fcm . send_to_topic ( "yourTopic" ,
notification : { body : "This is a FCM Topic Message!" } )
Mensagens de condição de tópico do FCM para enviar uma mensagem para uma combinação de tópicos, especifique uma condição, que é uma expressão booleana que especifica os tópicos de destino.
message = {
'condition' : "'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)" , # send to topic condition
# ...data
}
fcm . send_v1 ( message )
Ou você pode usar o fcm.send_to_topic_condition
auxiliar:
response = fcm . send_to_topic_condition (
"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)" ,
notification : {
body : "This is an FCM Topic Message sent to a condition!"
}
)
Para enviar para combinações de vários tópicos, exija que você defina uma chave de condição para uma condição booleana que especifica os tópicos de destino. Por exemplo, para enviar mensagens para dispositivos que se inscreveram em Topica e tópicos ou tópicos :
'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)
O FCM primeiro avalia quaisquer condições entre parênteses e depois avalia a expressão da esquerda para a direita. Na expressão acima, um usuário inscrito em qualquer tópico único não recebe a mensagem. Da mesma forma, um usuário que não se inscreve no Topica não recebe a mensagem. Essas combinações recebem:
Você pode incluir até cinco tópicos em sua expressão condicional e parênteses são suportados. Operadores suportados: &&
, ||
, !
. Observe o uso para!:
!('TopicA' in topics)
Com essa expressão, quaisquer instâncias de aplicativos que não se inscrevam no Topica, incluindo instâncias de aplicativos que não se inscreverem em nenhum tópico, recebem a mensagem.
O método send_to_topic_condition
nesta biblioteca permite especificar uma condição de vários tópicos para o qual enviar para a carga útil de dados.
response = fcm . send_to_topic_condition (
"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)" ,
notification : {
body : "This is an FCM Topic Message sent to a condition!"
}
)
Dado um token de registro e um nome de tópico, você pode adicionar o token ao tópico usando a API do servidor de ID do Google Instância.
topic = "YourTopic"
registration_token = "12" # a client registration token
response = fcm . topic_subscription ( topic , registration_token )
# or unsubscription
response = fcm . topic_unsubscription ( topic , registration_token )
Ou você pode gerenciar mapas de relacionamento para várias instâncias de aplicativos API do Google ID Server. Gerenciar relacionamento
topic = "YourTopic"
registration_tokens = [ "4" , "8" , "15" , "16" , "23" , "42" ] # an array of one or more client registration tokens
response = fcm . batch_topic_subscription ( topic , registration_tokens )
# or unsubscription
response = fcm . batch_topic_unsubscription ( topic , registration_tokens )
Dado um token de registro, você pode recuperar informações sobre o token usando a API do servidor de ID do Google Instância.
registration_token = "12" # a client registration token
response = fcm . get_instance_id_info ( registration_token )
Para obter informações detalhadas sobre o ID da instância, você pode passar um hash options
opcionais para o método get_instance_id_info
:
registration_token = "12" # a client registration token
options = { "details" => true }
response = fcm . get_instance_id_info ( registration_token , options )
Você pode encontrar um guia para implementar um aplicativo cliente Android para receber notificações aqui: configure um aplicativo cliente FCM no Android.
O guia para configurar um aplicativo iOS para obter notificações está aqui: Configurando um aplicativo cliente FCM no iOS.
http_options
para initialize
o método e a opção timeout
da lista de permissõesAPI_KEY
depreciadasend
depreciadosend_with_notification_key
subscribe_instance_id_to_topic
unsubscribe_instance_id_from_topic
batch_subscribe_instance_ids_to_topic
Methodbatch_unsubscribe_instance_ids_from_topic
Method send_to_topic_condition
Methodsend_to_topic
Google::Auth::ServiceAccountCredentials
#103faraday
de 1 a 2 #101DEFAULT_TIMEOUT
para faraday
#96get_instance_id_info
opção params #98Muito obrigado a @excid3 @jsparling @jensljungblad
>= 2.4
faraday
, alterando a versão de dependência para faraday 1.0.0
httparty
por faraday
recover_notification_key
. Atualize a versão no fcm.gemspec
com VERSION
e atualize a seção README.md
## ChangeLog
.
# set the version
# VERSION="1.0.7"
gem build fcm.gemspec
git tag -a v ${VERSION} -m " Releasing version v ${VERSION} "
git push origin --tags
gem push fcm- ${VERSION} .gem