Golang: Реализация push-уведомлений с помощью FCM

1. Основное знакомство с firebase и токеном устройства
Токен устройства — это главный участник, отвечающий за push-уведомления. Это не причудливое слово, это просто идентификатор, который уникален для каждого устройства. Когда мы устанавливаем какое-либо приложение, уникальный токен нашего устройства хранится на его сервере, с помощью которого оно может уведомлять нас.

Firebase — это инструмент, используемый для рассылки уведомлений на приложения/мобильные устройства/планшеты.
Он предоставляет параметры для настройки облачной службы обмена сообщениями (FCM), которая используется для push-уведомлений.

Примечание: Конфигурационные файлы firebase, используемые на стороне приложения (файл google_services.json для android и GoogleService-Info.plist для iOS) и ключ service_account должны быть созданы для того же проекта в консоли firebase.

В этом блоге мы рассмотрим, как отправляются push-уведомления с помощью Golang и Firebase.

Давайте перейдем к реализации.

2. Настройка ключа аутентификации Firebase
Необходимые пакеты:
firebase.google.com/go
firebase.google.com/go/messaging
Всегда лучше использовать конфиденциальные данные в зашифрованном формате. Для этого я сохранил ключ учетной записи сервиса в формате base64 в переменной окружения.

Здесь FIREBASE_AUTH_KEY содержит ключ учетной записи сервиса в кодировке base64.

Сначала давайте декодируем ключ учетной записи службы.

func getDecodedFireBaseKey() ([]byte, error) {

  fireBaseAuthKey := os.Getenv("FIREBASE_AUTH_KEY")

  decodedKey, err :=  base64.StdEncoding.DecodeString(fireBaseAuthKey)
  if err != nil {
     return nil, err
  }

  return decodedKey, nil
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Приведенный выше метод вернет декодированный ключ учетной записи службы, который будет использован в следующем шаге.

Получите расшифрованный ключ и инициализируйте приложение firebase, используя приведенный ниже код.

decodedKey, err := getDecodedFireBaseKey()
if err != nil {
   return err
}

opts :=  []option.ClientOption{option.WithCredentialsJSON(decodedKey)}

// Initialize firebase app
app, err := firebase.NewApp(context.Background(), nil, opts...)

if err != nil {
   log.Debug("Error in initializing firebase app: %s", err)
   return err
}
Вход в полноэкранный режим Выйти из полноэкранного режима

3. Инициализируйте клиент firebase
Создайте fcmClient для обмена сообщениями (push-уведомления).

fcmClient, err := app.Messaging(context.Background())

if err != nil {
   return err
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Наконец, давайте напишем код для отправки уведомления.

4. Отправка Push-уведомлений на одно устройство

response, err := fcmClient.Send(context.Background(), &messaging.Message{

  Notification: &messaging.Notification{
    Title: "Congratulations!!",
    Body: "You have just implement push notification",
  },
    Token: "sample-device-token", // it's a single device token
})

if err != nil {
     return err
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Приведенный выше код отправит push-уведомление на одно устройство.

5. Отправка Push-уведомлений на несколько устройств
Рассмотрим сценарий, в котором вам нужно отправить уведомление на несколько устройств. Это будет почти то же самое, что и отправка push-уведомления на одно устройство, только нужно заменить метод Send() в fcmClient на SendMulticast().

response, err := fcmClient.SendMulticast(context.Background(), &messaging.MulticastMessage{
   Notification: &messaging.Notification{
     Title: "Congratulations!!",
     Body:  "You have just implement push notification",
   },
   Tokens: deviceTokens, // it's an array of device tokens
  })

  if err != nil {
     return err
  }

log.Debug("Response success count : ", response.SuccessCount)
log.Debug("Response failure count : ", response.FailureCount)
Вход в полноэкранный режим Выход из полноэкранного режима

Ура!!! Вы реализовали push-уведомления в своем проекте Golang 🎊.
Переменная ответа будет содержать счетчик успехов и счетчик неудач отправленных уведомлений.

Полный код можно найти на сайте FCM with Golang. Вызовите SendPushNotification() и бум !!! Проверьте получение уведомления в приложении.

Между тем, вы также можете проверить в журнале отладки, так как в нем есть SuccessCount и failureCount. Это поможет проверить, на сколько токенов были отправлены уведомления. В случае обнаружения failureCount > 0, вы должны проверить, передаете ли вы действительный токен устройства или нет.

Оцените статью
devanswers.ru
Добавить комментарий