Функции Firebase не отправляют уведомления - PullRequest
0 голосов
/ 24 августа 2018

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

У меня есть:

  • Проверено, получаю ли я уведомления на свой iPhone по определенной теме при отправке их с помощью FCM / APNS - Работает
  • проверил код и формат уведомлений - все нормально
  • Выполнены тесты, если другие функции вызываются - Рабочая
  • Телефон подписан на пуш - это
  • Устройство подписано на тему - Это так. Протестировано с толчком темы FCM.
  • Метод Swizzling включен - это

Вот код для функций:

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


exports.sentNotify = functions.https.onRequest((request, response) => {
 console.log("notification request received");
 console.log(request.body);
 let topic = "Martin";//request.body.primaryCategory;
 let hottness = request.body.hottness;
 let title = request.body.title;
 let description = request.body.description;
 let thumbnail = request.body.thumbnail;
 let link = request.body.url;

 const messagePayload = {
   notification: {
     title: title,
     body: description,
     icon: 'thumbnail',
     sound: 'default',
     badge: '0'
   },
   data:{
     link_url: link,
     category: "NEWS_CATEGORY"
   }
 };

 const options = {
        priority: "high",
        timeToLive: 60 * 60 * 24
    };

 return admin.messaging().sendToTopic(topic, messagePayload, options)
.then(() => {
    response.send("OK")
    return;
    });
});

А вот запрос, который я отправляю:

curl -X "POST" "https://us-central1-<my-app>.cloudfunctions.net/sentNotify" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d $'{
  "hotness": 7000,
  "thumbail": "thumbnail",
  "title": "Title",
  "publishedAt": "2018-08-24T12:37:08.000Z",
  "description": "This is the description",
  "primaryCategory": "General",
  "url": "https://google.com"
}'

1 Ответ

0 голосов
/ 24 августа 2018

Вы отправляете ответ клиенту перед отправкой сообщения:

response.send("OK")

Когда вы отправляете ответ от функции типа HTTPS, которая эффективно завершает функцию. Любой последующий код может не выполняться (он не является детерминированным), поскольку Cloud Functions оставляет за собой право ограничить любые дополнительные ресурсы после отправки ответа. Это означает, что ваше сообщение вообще не может быть отправлено.

Отправлять ответ только из функции HTTPS после . Вы закончите со всей работой, включая асинхронную работу (например, отправку сообщения). Это означает, что вы должны организовать отправку ответа только после окончательной доставки сообщения:

return admin.messaging().sendToTopic(topic, messagePayload, options)
.then(() => {
    response.send("OK")
})

Подробнее см. Документацию .

...