fcm.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package server
  2. import (
  3. "context"
  4. "log"
  5. firebase "firebase.google.com/go"
  6. "firebase.google.com/go/messaging"
  7. "github.com/rotisserie/eris"
  8. "x.sikey.com.cn/serverx/zlog"
  9. )
  10. type FirebaseMessageServer struct {
  11. app *firebase.App
  12. }
  13. func NewFirebaseMessageServer() *FirebaseMessageServer {
  14. conf := &firebase.Config{
  15. ServiceAccountID: "firebase-adminsdk-uycdi@sikey-watch.iam.gserviceaccount.com",
  16. }
  17. app, err := firebase.NewApp(context.Background(), conf)
  18. if err != nil {
  19. log.Fatalln(err)
  20. }
  21. return &FirebaseMessageServer{app: app}
  22. }
  23. func (f *FirebaseMessageServer) Send(ctx context.Context, token string, message *Message) error {
  24. client, err := f.app.Messaging(ctx)
  25. if err != nil {
  26. return eris.Wrap(err, "unable to create fcm client connect")
  27. }
  28. bytes, _ := message.MarshalBinary()
  29. messaging := &messaging.Message{
  30. Token: token,
  31. Data: map[string]string{"message": string(bytes)},
  32. Notification: &messaging.Notification{
  33. Title: "title",
  34. Body: "body",
  35. },
  36. }
  37. resultName, err := client.Send(ctx, messaging)
  38. if err != nil {
  39. zlog.Error("unable to send fcm message: ", err)
  40. return eris.Wrap(err, "unable to send fcm message")
  41. }
  42. zlog.Infof("Successfully sent message: %s", resultName)
  43. return nil
  44. }