Ошибка: токены регистрации предоставлены для sendToDevice ()

Теперь я работаю над своим последним проектом. Я пытаюсь отправить уведомление с помощью облачной функции firebase, когда она запускает onUpdate, но у меня возникает ошибка. Я следил за учебником на YouTube и на веб-сайте, но не понимаю. Кстати, я новичок в firebase. ниже Вот мой код index.js: -

const functions = require('firebase-functions');

//Firebase function and handling notification logic

const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.pushNotification = functions.database.ref('/Sensor').onWrite(( change,context) => {

const sensor = change.after.val();

const payload = {
        notification: {

            Title: "Alert",
            Body: "Open pipe detect !",
            icon: "default"
            }
        };

    return admin.messaging().sendToDevice(sensor.token, payload)
    .then((response)=> {
    return console.info("Successfully sent message:", response);
    });
  });

структура проекта такая:

**water-system**    
    +--Sensor  
        +---Pipe
        +---pipeName
        +---solenoid
        +---status  // trigger on this update


+---User
     +---Id1
         +---email
         +---name 
         +---token // token store by this user
     +---Id2
     +---Id3
         +---token // also store token

Поэтому, когда дочерний узел Sensor был обновлен, он отправит уведомление пользователю, у которого хранится токен (пользователь id1 и id3). Рад, если кто-нибудь помог мне решить эту проблему

какая у тебя ошибка?

Jay Lane 25.07.2018 06:28
firebase.google.com/docs/cloud-messaging/admin/send-messages в документации здесь выглядит как токен, если массив строк
Jay Lane 25.07.2018 06:31

Я получаю эту ошибку @JayLane Ошибка: токены регистрации, предоставленные для sendToDevice (), должны быть непустой строкой или непустым массивом.

dejulz Zul 25.07.2018 06:36

@JayLane: Здесь используется устаревший API sendToDevice ().

Bob Snyder 25.07.2018 06:36

@BobSnyder только что заметил

Jay Lane 25.07.2018 06:36

В вашей БД Sensor не имеет дочернего значения для token

Bob Snyder 25.07.2018 06:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
288
1

Ответы 1

Попробуйте сохранить токены в таком формате:

  "tokens" : {
    "cXyVF6oUGuo:APA91bHTSUPy31JjMVTYK" : true,
    "deL50wnXUZ0:APA91bGAF-kWMNxyP6LGH" : true,
    "dknxCjdSQ1M:APA91bGFkKeQxB8KPHz4o" : true,
    "eZunoQspodk:APA91bGzG4J302zS7sfUW" : true
  }

Всякий раз, когда вы хотите написать новый токен, просто выполните набор:

firebase.app().database().ref(`/user/${uid}/tokens/${token}`).set(true);

И чтобы создать массив для sendToDevice:

  const tokensList = Object.keys(tokens.val());
  return admin.messaging().sendToDevice(tokensList, payload);

Другие вопросы по теме