La GEM FCM permite que su backend de Ruby envíe notificaciones a los dispositivos Android e iOS a través de mensajes de nube Firebase.
$ gem install fcm
o en su Gemfile
solo inclúyalo:
gem 'fcm'
Para Android, necesitará un dispositivo que ejecute 2.3 (o más nuevo) que también tenga instalada la aplicación Google Play Store, o un emulador con Android 2.3 con Google API. Los dispositivos iOS también son compatibles.
Una versión de Ruby compatible, actualmente: ruby >= 2.4
Para usar esta gema, debe instanciar a un cliente con sus credenciales de Firebase:
fcm = FCM . new (
GOOGLE_APPLICATION_CREDENTIALS_PATH ,
FIREBASE_PROJECT_ID
)
GOOGLE_APPLICATION_CREDENTIALS_PATH
GOOGLE_APPLICATION_CREDENTIALS_PATH
está destinado a contener sus credenciales de Firebase.
La forma más fácil de proporcionarlos es pasar aquí una ruta absoluta a un archivo con sus credenciales:
fcm = FCM . new (
'/path/to/credentials.json' ,
FIREBASE_PROJECT_ID
)
Según su naturaleza secreta, es posible que no desee tenerlos en su repositorio. En ese caso, otra solución compatible es pasar un StringIO
que contenga sus credenciales:
fcm = FCM . new (
StringIO . new ( ENV . fetch ( 'FIREBASE_CREDENTIALS' ) ) ,
FIREBASE_PROJECT_ID
)
Para migrar a 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)
Con la mensajería del grupo de dispositivos, puede enviar un solo mensaje a una instancia múltiple de una aplicación que se ejecuta en dispositivos que pertenecen a un grupo. Por lo general, "grupo" refiere un conjunto de dispositivos diferentes que pertenecen a un solo usuario. Sin embargo, un grupo también podría representar un conjunto de dispositivos donde la instancia de la aplicación funciona de manera altamente correlacionada. Para usar esta función, primero necesitará una clase FCM
inicializada.
El número máximo de miembros permitidos para una clave de notificación es 20. Https://firebase.google.com/docs/cloud-messaging/android/device-group#managing_device_groups
Luego, necesitará una clave de notificación que pueda crear para un key_name
particular que debe ser nombrado de manera única por aplicación en caso de que tenga múltiples aplicaciones para el mismo project_id
. Esto asegura que las notificaciones solo vayan a la aplicación objetivo prevista. El método create
hará esto y devolverá la notification_key
de token_key, que representa el grupo de dispositivos, en la respuesta:
project_id
es el remitente_id en la configuración de su nube. 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 mensajes a los grupos de dispositivos, use la API HTTP V1, enviar mensajes a un grupo de dispositivos es muy similar a enviar mensajes a un dispositivo individual, utilizando el mismo método para autorizar las solicitudes de envío. Establezca el campo Token en la clave de notificación del grupo
message = {
'token' : "NOTIFICATION_KEY" , # send to a device group
# ...data
}
fcm . send_v1 ( message )
También puede agregar/eliminar tokens de registro a/desde una notification_key
particular_key de algún project_id
. Por ejemplo:
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 )
FCM Topic Messaging permite que su servidor de aplicaciones envíe un mensaje a múltiples dispositivos que han optado por un tema en particular. Basado en el modelo Publish/suscripción, una instancia de la aplicación puede suscribirse a no más de 2000 temas. Enviar a un tema es muy similar a enviar a un dispositivo individual o a un grupo de usuarios, en el sentido de que puede usar el método fcm.send_v1
donde el topic
coincide con la expresión regular "/topics/[a-zA-Z0-9-_.~%]+"
:
message = {
'topic' : "yourTopic" , # send to a device group
# ...data
}
fcm . send_v1 ( message )
O puede usar el fcm.send_to_topic
Helper:
response = fcm . send_to_topic ( "yourTopic" ,
notification : { body : "This is a FCM Topic Message!" } )
Mensaje de condición de tema FCM para enviar un mensaje a una combinación de temas, especifique una condición, que es una expresión booleana que especifica los temas objetivo.
message = {
'condition' : "'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)" , # send to topic condition
# ...data
}
fcm . send_v1 ( message )
O puede usar el fcm.send_to_topic_condition
ayudante:
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 a combinaciones de múltiples temas, requiere que establezca una clave de condición en una condición booleana que especifique los temas objetivo. Por ejemplo, para enviar mensajes a dispositivos que se suscribieron a TOPICA y TopicB o TopicC :
'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)
FCM primero evalúa cualquier condición entre paréntesis y luego evalúa la expresión de izquierda a derecha. En la expresión anterior, un usuario suscrito a cualquier tema único no recibe el mensaje. Del mismo modo, un usuario que no se suscribe a Topica no recibe el mensaje. Estas combinaciones lo reciben:
Puede incluir hasta cinco temas en su expresión condicional, y los paréntesis son compatibles. Operadores compatibles: &&
, ||
!
. ¡Tenga en cuenta el uso para!:
!('TopicA' in topics)
Con esta expresión, cualquier instancia de aplicaciones que no se suscriba a TOPICA, incluidas las instancias de aplicaciones que no se suscriben a ningún tema, reciba el mensaje.
El método send_to_topic_condition
dentro de esta biblioteca le permite especificar una condición de múltiples temas a los que enviar a la carga útil de datos.
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 un token de registro y un nombre de tema, puede agregar el token al tema utilizando la API del servidor de ID de ID de Google Instance.
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 )
O puede administrar mapas de relaciones para múltiples instancias de aplicaciones API de servidor de identificación de instancias de Google. Gestionar la relación
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 un token de registro, puede recuperar información sobre el token utilizando la API del servidor de ID de ID de Google Instance.
registration_token = "12" # a client registration token
response = fcm . get_instance_id_info ( registration_token )
Para obtener información detallada sobre el ID de instancia, puede pasar un hash opcional options
al 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 )
Puede encontrar una guía para implementar una aplicación de cliente de Android para recibir notificaciones aquí: configure una aplicación de cliente FCM en Android.
La guía para configurar una aplicación iOS para recibir notificaciones está aquí: configurar una aplicación de cliente FCM en iOS.
http_options
para initialize
el método y la opción de timeout
de la lista blancaAPI_KEY
en desacuerdosend
desaprobadosend_with_notification_key
subscribe_instance_id_to_topic
unsubscribe_instance_id_from_topic
Methodbatch_subscribe_instance_ids_to_topic
batch_unsubscribe_instance_ids_from_topic
método send_to_topic_condition
send_to_topic
Google::Auth::ServiceAccountCredentials
#103faraday
de 1 a 2 #101DEFAULT_TIMEOUT
a faraday
#96get_instance_id_info
de la opción parámetros #98Muchas gracias a @excid3 @jsparling @jensljungblad
>= 2.4
faraday
cambiando la versión de dependencia a faraday 1.0.0
httparty
con faraday
recover_notification_key
. Actualice la versión en fcm.gemspec
con VERSION
y actualice la sección 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