Мое приложение использует fcmTokens, назначенные пользователю и сохраненные в документе Firestore, для отслеживания установок приложения и входов в систему. Когда пользователь выходит из приложения, я удаляю fcmToken из документа Firestore и запускаю InstanceID.instanceID().deleteID
.
Однако, когда у пользователя неправильный inte rnet 'InstanceID.instanceID (). DeleteID' запускается снова, когда приложение запускается в следующий раз. В этом случае fcmToken в документе Firestore не удаляется. Теоретически я мог бы также выполнить запрос в приложении и найти этот токен во всех пользовательских документах Firestore и удалить его там, но я бы предпочел использовать облачные функции, чтобы проверить, действительны ли fcmTokens пользователя. Если нет, я хочу удалить их. Я начал писать следующую облачную функцию, но получаю сообщение о том, что
Не удалось расшифровать маркер Firebase ID. Убедитесь, что вы передали всю строку JWT, которая представляет собой идентификатор токена. См. https://firebase.google.com/docs/auth/admin/verify-id-tokens для получения подробной информации о том, как получить идентификационный токен.
Я предполагаю, что я использую неправильную функцию, и fcmTokens не совпадают с идентификационными токенами? Есть ли способ проверить действительность fcmToken, аналогично тому, как я проверяю здесь (несуществующий) идентификатор токена. Или я должен каким-то образом использовать идентификаторы токенов вообще для управления указанным устройством c логином? (Я использую прослушиватель моментальных снимков, который прослушивает изменения fcmToken, и я выхожу из системы при удалении указанного c fcmToken.)
Вот моя облачная функция:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
var userA_UID = ""
exports.checkFcmToken = functions.firestore.document('registeredUsers/{userA_UID}').onUpdate(async (snapshot, context) => {
userA_UID = context.params.userA_UID;
const userInfo = await admin.firestore().collection('registeredUsers').doc(userA_UID).get();
const fcmTokens = userInfo.data()['fcmTokens'];
if (fcmTokens !== undefined) {
if (fcmTokens.length > 0) {
for (let fcmToken of fcmTokens) {
checkToken(fcmToken)
}
}
}
function checkToken(fcmToken) {
//will delete token from document array if invalid
admin.auth().verifyIdToken(fcmToken)
.then((decodedToken) => {
let uid = decodedToken.uid;
console.log(uid)
throw new Error('Error!')
}).catch((error) => {
console.log(error)
});
}
})