Firebase Cloud Messaging ( FCM ) Library using golang ( Go ) Updated for App Engine Forked from github.com/NaySoftware/go-fcm
This library uses HTTP/JSON Firebase Cloud Messaging connection server protocol
- Send messages to a topic
- Send messages to a device list
- Message can be a notification or data payload
- Supports condition attribute (fcm only)
- Instace Id Features
- Get info about app Instance
- Subscribe app Instance to a topic
- Batch Subscribe/Unsubscribe to/from a topic
- Create registration tokens for APNs tokens
go get github.com/keyops/go-fcm
https://godoc.org/github.com/keyops/go-fcm
https://firebase.google.com/docs/cloud-messaging/http-server-ref
https://firebase.google.com/docs/cloud-messaging/
https://developers.google.com/instance-id/reference/server
a note from firebase console
Firebase Cloud Messaging tokens have replaced server keys for
sending messages. While you may continue to use them, support
is being deprecated for server keys.
serverKey variable will also hold the new FCM token by Firebase Cloud Messaging
Firebase Cloud Messaging token can be found in:
- Firebase project settings
- Cloud Messaging
- then copy the Firebase Cloud Messaging token
serverKey is the server key by Firebase Cloud Messaging
Server Key can be found in:
- Firebase project settings
- Cloud Messaging
- then copy the server key
[will be deprecated by firabase as mentioned above!]
Retry should be implemented based on the requirements. Sending a request will result with a "FcmResponseStatus" struct, which holds a detailed information based on the Firebase Response, with RetryAfter (response header) if available - with a failed request. its recommended to use a backoff time to retry the request - (if RetryAfter header is not available).
package main
import (
"fmt"
"github.com/keyops/go-fcm"
)
const (
serverKey = "YOUR-KEY"
topic = "/topics/someTopic"
)
func main() {
data := map[string]string{
"msg": "Hello World1",
"sum": "Happy Day",
}
c := fcm.NewFcmClient(serverKey)
c.NewFcmMsgTo(topic, data)
status, err := c.Send()
if err == nil {
status.PrintResults()
} else {
fmt.Println(err)
}
}
package main
import (
"fmt"
"github.com/keyops/go-fcm"
)
const (
serverKey = "YOUR-KEY"
)
func main() {
data := map[string]string{
"msg": "Hello World1",
"sum": "Happy Day",
}
ids := []string{
"token1",
}
xds := []string{
"token5",
"token6",
"token7",
}
c := fcm.NewFcmClient(serverKey)
c.NewFcmRegIdsMsg(ids, data)
c.AppendDevices(xds)
status, err := c.Send()
if err == nil {
status.PrintResults()
} else {
fmt.Println(err)
}
}