This small Scala Library makes it easy to send a notification through the FCM HTTP API. It allows you to:
- Send a message to single/multiple devices
- Handle updated tokens
- Handle deleted/invalid tokens
This library makes use of the STTP HTTP Client and the Circe JSON library.
- Scala 2.13.x/2.12.x
Either construct an instance of DefaultFcmSender
and supply the necessary parameters or use your favorite DI framework.
Bind the DefaultFcmSender
to use it in your application:
bind(classOf[FcmSender]).to(classOf[DefaultFcmSender])
Bind the DefaultFirebaseAuthenticator
:
bind(classOf[FirebaseAuthenticator]).to(classOf[DefaultFirebaseAuthenticator])
The FcmSender
needs configuration, easiest is to use a Typesafe Config file to configure FCM. In your application.conf
add the following configuration:
fcm {
endpoint = "<Google endpoint e.g.: https://fcm.googleapis.com/v1/{parent=projects/*}/messages:send"
key-file = "Path to the JSON key file"
validate-only = true # If true FCM will only validate your notifications but not send them!
token-endpoint = "<Google token endpoint, optional, defaults to: https://www.googleapis.com/oauth2/v4/token>"
}
Bind the DefaultFcmConfigProvider
dependency to read the configuration from the application.conf
, in case of Google Guice:
bind(classOf[FcmConfigProvider]).to(classOf[DefaultFcmConfigProvider])
You can also provide your own implementation of the FcmConfigProvider
trait to get needed configuration.
By default the FcmConfigProvider
defaults to an async based STTP client; this can be overriden in your own FcmConfigProvider
implementation.
Implement the trait io.ceratech.fcm.TokenRepository
in your codebase to handle deleted tokens from the FCM server. The library expects an instance of the trait to be injectable. E.g. add the binding in code:
bind(classOf[TokenRepository]).to(classOf[MyTokenRepository])
Inject an instance of io.ceratech.fcm.FcmSender
into your desired class and call sendMessage(FcmNotification, token)
. The FcmMessage
case class contains the fields you can supply to FCM.