【问题标题】:Success response from FCM but no notification来自 FCM 的成功响应,但没有通知
【发布时间】:2018-04-08 17:15:31
【问题描述】:

在客户端我请求许可并将令牌发送到服务器

messaging.requestPermission()
.then(function() {
    console.log('Notification permission granted.');
    return messaging.getToken();
})
.then((token) => {
    if (token) {
        const body = JSON.stringify({
            token,
            stopId: 'BKK_F02550',
            routeId: 'BKK_0205',
        });
        const headers = {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        };
        console.log(token, 'token');
        fetch('/api/test', {method: 'post', body, headers});
    } else {
        console.log('No Instance ID token available. Request permission to generate one.');
    }
})
.catch(function(err) {
    console.log('Unable to get permission to notify.', err);
});

在服务器端,我将请求发送到 FCM:

app.post('/api/test', (req, res) => {
    const body = {
        "to": req.body.token,
        "notification":{
            "title":"Portugal vs. Denmark",
            "body":"great match!"
        }
    }

    const headers = {
        Authorization: `key=${serverKey}`,
        'Content-Type': 'application/json'
    }

    fetch('https://fcm.googleapis.com/fcm/send', body, headers)
        .then(data => res.status(200).json(data))
        .catch(error => console.log('failure', error))
})

我收到成功响应,但在客户端没有收到通知。我觉得响应对象的要点是:{size: 0, timeout: 0}。

【问题讨论】:

  • 从服务器端,req.body.token的值是多少?可以记录吗?
  • 是的,我已经这样做了,而且两边的令牌值相同

标签: javascript firebase push-notification firebase-cloud-messaging progressive-web-apps


【解决方案1】:

我不确定,但我认为您的客户端代码存在顺序问题。与return messaging.getToken()返回一样;永远不会出现剩余的代码,你会看到,我试图在下面重新组织。 (我不确定下一个问题,但会在之后检查)。

messaging.requestPermission()
.then(function() {
    console.log('Notification permission granted.');
    .then((token) => {
          if (token) {
              const body = JSON.stringify({
                  token,
                  stopId: 'BKK_F02550',
                  routeId: 'BKK_0205',
              });
              const headers = {
                  'Accept': 'application/json',
                  'Content-Type': 'application/json',
              };
              console.log(token, 'token');
              fetch('/api/test', {method: 'post', body, headers});
          } else {
              console.log('No Instance ID token available. Request permission to generate one.');
          }
      })
   return messaging.getToken();
 })
.catch(function(err) {
    console.log('Unable to get permission to notify.', err);
});

【讨论】:

  • 我认为那位应该没问题,我得到一个令牌并将其传递给服务器端。
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 2020-01-23
  • 2020-04-25
  • 2020-04-22
  • 2016-05-13
  • 1970-01-01
相关资源
最近更新 更多