来自 FCM 的成功响应,但没有通知

Posted

技术标签:

【中文标题】来自 FCM 的成功响应,但没有通知【英文标题】:Success response from FCM but no notification 【发布时间】: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的值是多少?可以记录吗? 是的,我已经这样做了,而且两边的令牌值相同 【参考方案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);
);

【讨论】:

我认为那位应该没问题,我得到一个令牌并将其传递给服务器端。

以上是关于来自 FCM 的成功响应,但没有通知的主要内容,如果未能解决你的问题,请参考以下文章

Firebase FCM 推送通知停止工作 iOS 11.1.1

如何使用 Firebase 获取通知响应数据?

FCM iOS 项目未收到通知 - FCM 控制台显示成功但设备未收到

如何知道来自 FCM 的通知是不是没有到达目标设备?

FCM 通知在发布模式下工作,但*不是*来自 Play 商店

使用 Parse Server 的 FCM 推送通知