我正在开发一个使用FCM REST API
发送通知的应用。
但是当我发送通知时,我总是得到相同的错误InvalidRegistration
。
当我用Google搜索问题时,我知道问题出在注册令牌格式中。所以我想确定我是否发送了正确的令牌。
我所做的是验证用户身份并返回身份验证请求。
{
"kind": "identitytoolkit#VerifyPasswordResponse",
"localId": "sQFWGMTlRvd8XgbxC9T6UyyKKNW2",
"email": "01026525200@zeal.com",
"displayName": "",
"idToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjljYjU0Zjc4OTczNTU4NjU5ZTMxNGFkYzhjMTRkYzVmNjUyMTZmZmQifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vemVhbC1kZXYiLCJhdWQiOiJ6ZWFsLWRldiIsImF1dGhfdGltZSI6MTQ5ODI5ODUxNywidXNlcl9pZCI6InNRRldHTVRsUnZkOFhnYnhDOVQ2VXl5S0tOVzIiLCJzdWIiOiJzUUZXR01UbFJ2ZDhYZ2J4QzlUNlV5eUtLTlcyIiwiaWF0IjoxNDk4Mjk4NTE3LCJleHAiOjE0OTgzMDIxMTcsImVtYWlsIjoiMDEwMjY1MjUyMDBAemVhbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImZpcmViYXNlIjp7ImlkZW50aXRpZXMiOnsiZW1haWwiOlsiMDEwMjY1MjUyMDBAemVhbC5jb20iXX0sInNpZ25faW5fcHJvdmlkZXIiOiJwYXNzd29yZCJ9fQ.Uuuy7566wziSjp001WD_OwG2OdrsggwbuftCnsdpKTicVKArdayEVGq4-pBNsQOZKYNrhpTmiv86d_lbGeeuu9LNJX0xwjvslGA2EffdS1Vaf_OaBrwlp9rllTdXsIEp5wSpPUX_jSa2dck0lpU5bNPVAPjfw6_q4kmKkf6pMzjKLogGvJmtRJOuA5LMFIbJGrs57QIJfbDbghvG-etYAorgRIXwM1Xfg2eYD5s7sItwv0h9hitkH2R_Fy1yJuml51nbA6GT93YyE05QYowfmrymbfYOCYtOsfdkdL6iU0CLH8I0Cw7sQhGIx1iuQl1Wv5aNN2Z4QAiKERpt2VJ_Hw",
"registered": true,
"refreshToken": "ACXxpGEB6dkyDsmRVkaXrTshqAhQPZCSVC8kofhypeWDP473zIIOZQpAF_cMEQP6CaOB2PnyDiYX3cJdYAcG2Wcpyzcpij3s2TauyiaKqfYTy76EtvHDGZrW-FyHXc9fX1sRZWbW4uhslrEZ_tYy2axolmc7g3ZPfWAidqHjEjIzqS2moJTM5lXuvxBRlpZQcNXQFOGtr8E8",
"expiresIn": "3600"
}
所以我使用idToken
发送通知。这是对的还是我做错了什么。
答案 0 :(得分: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>
e.g:
abcd1234:abcdefg123456
仔细检查您是否真的是生成令牌的正确方法。
答案 1 :(得分:0)
我也遇到了这个问题。问题是我在数据库表中的设备令牌列长度。当我将其更改为255时,它可以工作。