Как получить токен обмена сообщениями облачной базы на стороне клиента в облачной функции Google? - PullRequest
0 голосов
/ 29 октября 2019

Я работаю над внедрением push-уведомлений, которые появляются при смене документа пожарного депо. Я использую модуль response-native-firebase. Моя облачная функция Google прослушивает изменения в firestore, а затем отправляет сообщения через firebase-admin.

Справка Google гласит, что вы можете указать одно устройство для сообщения с:

// This registration token comes from the client FCM SDKs.
var registrationToken = 'YOUR_REGISTRATION_TOKEN';

var message = {
  data: {
    score: '850',
    time: '2:45'
  },
  token: registrationToken
};

// Send a message to the device corresponding to the provided
// registration token.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

на стороне клиента в моем приложении-ответе. Я получаю токен, используя react-native-firebase:

function getToken() {
  let fcmToken = await AsyncStorage.getItem("fcmToken");
  if (!fcmToken) {
    fcmToken = await firebase.messaging().getToken();
    if (fcmToken) {
      await AsyncStorage.setItem("fcmToken", fcmToken);
    }
  }
}

Должен ли я хранить токен облачного обмена сообщениями Google где-нибудь, кроме асинхронного хранилища, или есть ли способ получить к нему доступ как есть, в моей функции облака Google? Похоже, мне следует хранить токен аутентификации внутри хранилища и обращаться к нему с помощью облачных функций. это лучший способ сделать это?

1 Ответ

1 голос
/ 29 октября 2019

Вам не нужен AsyncStorage для доступа к токену, он доступен прямо с fcmToken = await firebase.messaging().getToken(); в вашем коде.

Оттуда вы можете либо отправить его в облачную функцию обратного вызова с чем-то вроде:

var sendMessage = firebase.functions().httpsCallable('sendMessage');
addMessage({ token: fcmToken }).then(function(result) {
  // ...
});

Это основано на примере в документации здесь . Затем вы можете использовать это значение в своем коде Cloud Functions для отправки сообщения, вызвав API FCM через Admin SDK.

Или сохраните его в базе данных, такой как Cloud Firestore, с чем-то вроде этого:

db.collection("tokens").add(docData).then(function() {
    console.log("Token successfully written to database!");
});

Который основан на примере в документации здесь . Затем вы можете прочитать это значение из базы данных в облачной функции и использовать его для повторной отправки сообщения, вызвав API FCM через Admin SDK.

...