0

我正在開發一個應用程序,使用FCM REST API發送通知。 但是,當我發送通知我總是得到相同的錯誤InvalidRegistration。 當我搜索這個問題時,我知道問題出在註冊令牌格式。所以我想確保我是否發送正確的令牌。 我所做的是我認證用戶和身份驗證請求返回。FCM InvalidRegistration

{ 
    "kind": "identitytoolkit#VerifyPasswordResponse", 
    "localId": "sQFWGMTlRvd8XgbxC9T6UyyKKNW2", 
    "email": "[email protected]", 
    "displayName": "", 
    "idToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjljYjU0Zjc4OTczNTU4NjU5ZTMxNGFkYzhjMTRkYzVmNjUyMTZmZmQifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vemVhbC1kZXYiLCJhdWQiOiJ6ZWFsLWRldiIsImF1dGhfdGltZSI6MTQ5ODI5ODUxNywidXNlcl9pZCI6InNRRldHTVRsUnZkOFhnYnhDOVQ2VXl5S0tOVzIiLCJzdWIiOiJzUUZXR01UbFJ2ZDhYZ2J4QzlUNlV5eUtLTlcyIiwiaWF0IjoxNDk4Mjk4NTE3LCJleHAiOjE0OTgzMDIxMTcsImVtYWlsIjoiMDEwMjY1MjUyMDBAemVhbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZW1haWwiOlsiMDEwMjY1MjUyMDBAemVhbC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJwYXNzd29yZCJ9fQ.Uuuy7566wziSjp001WD_OwG2OdrsggwbuftCnsdpKTicVKArdayEVGq4-pBNsQOZKYNrhpTmiv86d_lbGeeuu9LNJX0xwjvslGA2EffdS1Vaf_OaBrwlp9rllTdXsIEp5wSpPUX_jSa2dck0lpU5bNPVAPjfw6_q4kmKkf6pMzjKLogGvJmtRJOuA5LMFIbJGrs57QIJfbDbghvG-etYAorgRIXwM1Xfg2eYD5s7sItwv0h9hitkH2R_Fy1yJuml51nbA6GT93YyE05QYowfmrymbfYOCYtOsfdkdL6iU0CLH8I0Cw7sQhGIx1iuQl1Wv5aNN2Z4QAiKERpt2VJ_Hw", 
    "registered": true, 
    "refreshToken": "ACXxpGEB6dkyDsmRVkaXrTshqAhQPZCSVC8kofhypeWDP473zIIOZQpAF_cMEQP6CaOB2PnyDiYX3cJdYAcG2Wcpyzcpij3s2TauyiaKqfYTy76EtvHDGZrW-FyHXc9fX1sRZWbW4uhslrEZ_tYy2axolmc7g3ZPfWAidqHjEjIzqS2moJTM5lXuvxBRlpZQcNXQFOGtr8E8", 
    "expiresIn": "3600" 
} 

所以我用idToken來發送通知。這是對的,否則我做錯了什麼。

回答

1

您使用的idToken似乎不適用於FCM的有效註冊令牌,因此出現InvalidRegistration錯誤。

您提到該值(idToken)來自身份驗證後的響應,這可能就是它的原因。根據我對auth的瞭解,通常只是確定會話並在特定時間間隔後過期(expiresIn)。

對於FCM,作爲目標所需的值是客戶端通過調用getToken生成的實際令牌。從docs

檢索當前註冊令牌

當你需要獲取當前令牌,調用爲gettoken。當權限尚未被授予時,此方法返回null。否則,它會返回一個令牌或拒絕由於錯誤而導致的許諾。

// Get Instance ID token. Initially this makes a network call, once retrieved 
    // subsequent calls to getToken will return from cache. 
    messaging.getToken() 
    .then(function(currentToken) { 
    if (currentToken) { 
     sendTokenToServer(currentToken); 
     updateUIForPushEnabled(currentToken); 
    } else { 
     // Show permission request. 
     console.log('No Instance ID token available. Request permission to generate one.'); 
     // Show permission UI. 
     updateUIForPushPermissionRequired(); 
     setTokenSentToServer(false); 
    } 
    }) 
    .catch(function(err) { 
    console.log('An error occurred while retrieving token. ', err); 
    showToken('Error retrieving Instance ID token. ', err); 
    setTokenSentToServer(false); 
    }); 
} 

通常生成的令牌來如格式:

<InstanceID>:<Actual token> 

例如爲:

abcd1234:abcdefg123456 

仔細檢查,如果你實際上是生成令牌的正確方法。

+0

我使用Javascript文檔作爲我的答案的參考。但是如果您指定了您用作客戶端的平臺,我可能會相應地更改它。 –

+0

我認爲你是對的。 –