如何将客户端 Firebase 云消息传递令牌传递到 Google Cloud Function?

4

我正在实现在Firebase Firestore文档更改时出现推送通知的功能。我使用了react-native-firebase模块。我的Google云函数监听Firestore的更改,然后通过firebase-admin发送消息。

谷歌的参考文档显示你可以指定一个设备进行信息推送:

// 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应用中的客户端,我使用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 Cloud消息传递令牌存储在除异步存储之外的其他地方,还是有一种方法可以直接在Google Cloud函数内部访问它?看起来我应该将认证令牌存储在Firestore中,并使用Cloud函数访问Firestore。这是最好的做法吗?

1个回答

4
您不需要使用AsyncStorage来访问令牌,它可以直接从您的代码中获取,例如:fcmToken = await firebase.messaging().getToken();
从那里,您可以通过以下方式将其发送到回调云函数中:
var sendMessage = firebase.functions().httpsCallable('sendMessage');
addMessage({ token: fcmToken }).then(function(result) {
  // ...
});

这是基于文档中这里的示例。然后,您可以在Cloud Functions代码中使用此值通过Admin SDK调用FCM API发送消息。
或者像这样将其存储在数据库中,例如Cloud Firestore:
db.collection("tokens").add(docData).then(function() {
    console.log("Token successfully written to database!");
});

这是基于文档中的示例。您可以从数据库中读取此值,并在云函数中使用它,通过调用Admin SDK来调用FCM API再次发送消息。


2
设备令牌会随可调用函数自动发送。https://firebase.google.com/docs/reference/functions/providers_https_.callablecontext.html#instanceidtoken - Doug Stevenson
2
哦,太酷了。我不知道那个。 在这种情况下更容易的是,您可以从 context.instanceIdToken 在可调用的云函数中获取实例ID令牌。 - Frank van Puffelen
请注意,在客户端应用程序中,如果您在身份验证后保存了新用户,则运行firestore()。collection(users).doc(uid).get()时,原始响应对象包括fcmToken,因此您可以将其写入数据库,然后使用用户ID在云函数中获取它,这是一个示例:https://github.com/firebase/functions-samples/blob/master/fcm-notifications/functions/index.js - user6144056

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接