我开发了一个使用FCM REST API
发送通知的应用程序。但是,当我发送通知时,我总是会遇到相同的错误InvalidRegistration
。当我谷歌搜索问题时,我知道问题是在注册令牌格式中。因此,我想确保我是否要发送正确的令牌。我要做的是对用户进行身份验证,验证请求返回。
{
"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
发送通知。是对还是我做错了什么。
您使用的idToken
似乎不是FCM的有效注册令牌,因此InvalidRegistration
错误。
您提到该值(idToken
(来自身份验证后的响应,这可能是它的意思。据我所知,它通常只是在特定间隔(expiresIn
(之后确定会话并过期。
对于FCM,所需值作为目标是通过调用getToken
从客户端生成的实际令牌。从文档中:
检索当前注册令牌
当您需要检索当前令牌时,请致电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
仔细检查您是否实际上是生成令牌的正确方法。
我也遇到了这个问题。问题是我的设备令牌长度在数据库表中的长度。当我将其更改为255时,它可以正常工作。