nikoksr/notify

View on GitHub
service/fcm/README.md

Summary

Maintainability
Test Coverage
# Firebase Cloud Messaging (FCM)

[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/nikoksr/notify/service/fcm)

## Prerequisites

Navigate to Firebase [console](https://console.firebase.google.com/), login with your Google account and create a new project.
You will find the `Server Key` in the project settings screen under `Cloud Messaging` tab. When the server is up and running
you can add Firebase to your applications following the instructions in the `Engage/Cloud Messaging` section. 

To test the integration with a device you can use [FCM toolbox](https://simonmarquis.github.io/FCM-toolbox). You can also download the app
to your mobile, create a device token and test the reachability of your device.

## Usage

```go
package main

import (
    "context"
    "log"

    "github.com/nikoksr/notify"
    "github.com/nikoksr/notify/service/fcm"
)

func main() {
    fcmSvc, err := fcm.New("server_api_key")
    if err != nil {
        log.Fatalf("fcm.New() failed: %s", err.Error())
    }

    fcmSvc.AddReceivers("deviceToken1")

    notifier := notify.New()
    notifier.UseServices(fcmSvc)

    // Use context.Background() if you want to send a simple notification message.
    ctx := context.Background()

    // Optionally, you can include additional data in the message payload by adding the corresponding value to the context.
    ctxWithData := context.WithValue(ctx, fcm.DataKey, map[string]interface{}{
        "some-key":  "some-value",
        "other-key": "other-value",
    })

    // Optionally, you can specify a total of retry attempts per each message by adding the corresponding value to the context.
    ctxWithDataAndRetries := context.WithValue(ctxWithData, fcm.RetriesKey, 3)

    err = notifier.Send(ctxWithDataAndRetries, "subject", "message")
    if err != nil {
        log.Fatalf("notifier.Send() failed: %s", err.Error())
    }

    log.Println("notification sent")
}
```