Ошибка Firebase: регистрационные токены, предоставляемые sendToDevice (), должны быть непустой строкой или непустым массивом - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу отправлять пользователям уведомление, когда им отправляется запрос на добавление в друзья с использованием облачных сообщений firebase, но когда запрос отправляется, он возвращает эту ошибку в журнал функций firebase

Ошибка: токен регистрации), предоставляемое sendToDevice (), должно быть непустой строкой или непустым массивом.в FirebaseMessagingError.Error (родной) в FirebaseMessagingError.FirebaseError [как конструктор] (/user_code/node_modules/firebase-admin/lib/utils/error.js:39:28)

это Javaкод, который я использую

'use strict'

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.sendNotification = functions.database.ref('/Notifications/{user_id}/{notification_id}').onWrite((change, context) => {
	const user_id = context.params.user_id;
	const notification_id = context.params.notification_id;

	console.log('We Have A Notification for :', user_id);

	if (!change.after.val()){
		return console.log("A Notification Has Been Deleted From The Database: ", notification_id)
	}

	const deviceToken = admin.database().ref(`/Notifications/${user_id}/${notification_id}`).once('value');

	return deviceToken.then(result => {

		const token_id = result.val();

		const payload = {
			notification: {
				title: "Friend Request",
				body: "You just got a new friend request",
				icon: "default"
			}
		};
	
		return admin.messaging().sendToDevice(token_id, payload ).then(Response =>{
	
			console.log('this is the notification')
		});
	

	});


});

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

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

const deviceToken = admin.database().ref(`/Notifications/${user_id}/${notification_id}`).once('value');

она должна была быть

const deviceToken = admin.database().ref(`/Users/${user_id}/device_token`).once('value');
0 голосов
/ 24 ноября 2018

Звучит так, будто token_id - это null или пустая строка.Скорее всего, это потому, что /Notifications/${user_id}/${notification_id} не существует в вашей базе данных, например, когда токен для целевого пользователя отсутствует.

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

const deviceToken = admin.database().ref(`/Notifications/${user_id}/${notification_id}`).once('value');

return deviceToken.then(result => {
    if (!result.exists() || result.val() === "") return false;

    const token_id = result.val();

    const payload = {
        notification: {
            title: "Friend Request",
            body: "You just got a new friend request",
            icon: "default"
        }
    };

    return admin.messaging().sendToDevice(token_id, payload ).then(Response =>{ 
        console.log('this is the notification')
    });
});
...