鍍金池/ 問答/網(wǎng)絡安全  HTML/ pwa推送報錯:WebPushError, 是怎么回事?

pwa推送報錯:WebPushError, 是怎么回事?

name: 'WebPushError',
  message: 'Received unexpected response code',
  statusCode: 400,
  headers:
   { 'content-type': 'text/html; charset=UTF-8',
     date: 'Fri, 24 Aug 2018 11:16:39 GMT',
     expires: 'Fri, 24 Aug 2018 11:16:39 GMT',
     'cache-control': 'private, max-age=0',
     'x-content-type-options': 'nosniff',
     'x-frame-options': 'SAMEORIGIN',
     'x-xss-protection': '1; mode=block',
     server: 'GSE',
     'alt-svc': 'quic=":443"; ma=2592000; v="44,43,39,35"',
     'accept-ranges': 'none',
     vary: 'Accept-Encoding',
     connection: 'close' },
  body: '<HTML>\n<HEAD>\n<TITLE>UnauthorizedRegistration</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>UnauthorizedRegistration</H1>\n<H2>Error 400</H2>\n</BODY>\n</HTML>\n',
  endpoint: 'https://fcm.googleapis.com/fcm/send/cMYLTEcm8xg:APA91bGz2y5mBVOUTi4T57Lbcq_re9IMHdnuq7tVXPfQ0IHuGtKv5Y_HNRAmglqjsvFNLisTvjRqRlmG3oi5Fu_lEnUp3nB9inN2xKRs_Wh92hZA0X_70P7h5BnhmPG15ZyrjIKMbpCg' 
}

源代碼
server.js

app.post('/register', function(req, res) {
    var endpoint = req.body.endpoint
    // var key = req.body.key 
    // var authSecret = req.body.authSecret
    // console.log(saveSubscriptionToDatabase)
    // //保存用戶注冊信息
    // saveRegistrationDetails(endpoint, key, authSecret)
    // console.log(11)
    const pushSubscription = {
      endpoint: req.body.endpoint,
      keys: {
        auth: req.body.authSecret,
        p256dh: req.body.key
      }
    }
    var body = "thank u for registering"
    var iconUrl = "http://localhost:3001/icon.png"
    console.log(pushSubscription)
    //推送消息
    webpush.sendNotification(pushSubscription,
      new Buffer(JSON.stringify({
          msg: body,
          url: "http://localhost:3001/pwa",
          icon: iconUrl
      }), 'utf8')
    ).then( response => {
        res.sendStatus(201)
    }).catch(err => {
        console.log(err)
    })
})
 if("serviceWorker" in navigator) {
            navigator.serviceWorker.register("/sw.js")
            .then(function(registration) {
                return registration.pushManager.getSubscription()    //獲取訂閱,如果沒有訂閱就 訂閱
                    .then( subscription => {
                        if(subscription) return null
                        return registration.pushManager.subscribe({     
                            userVisibleOnly: true,
                            applicationServerKey: urlBase64ToUint8Array(vapidPublicKey)
                        })
                        .then( subscription => {   
                            console.log(subscription)
                            var rawKey = subscription.getKey ? subscription.getKey('p256dh') : ''
                            var key = rawKey ? btoa(String.fromCharCode.apply(null, new Uint8Array(rawKey))) : ''
                            var rawAuthSecret = subscription.getKey ? subscription.getKey('auth') : ''
                            var authSecret = rawAuthSecret ? btoa(String.fromCharCode.apply(null, new Uint8Array(rawAuthSecret))) : ''
                            //注冊用戶
                            return fetch('/register', {
                                method: 'post',
                                headers: new Headers({
                                    "content-type": "application/json"
                                }),
                                body: JSON.stringify({
                                    endpoint: subscription.endpoint,
                                    key: key,
                                    authSecret: authSecret
                                })
                            }) 
                        })
                        .catch( err => {
                            console.log('注冊失敗',err)
                            // console.log('注冊失敗!')
                        })
                    }) 
            })
            .catch(function(err) {
                console.log("err", err)
            })
        }
回答
編輯回答
病癮

你確定你的電腦能直接訪問google???

2017年6月21日 03:08