0

FCM REST APIを使用して通知を送信するアプリを開発しました。 しかし通知を送信すると、私はいつも同じエラーInvalidRegistrationを受け取ります。 私が問題を探ったとき、私は問題が登録トークン形式であることを知りました。私は正しいトークンを送信しているかどうかを確認したい。 私はユーザー認証を行い、認証要求が返されます。FCM無効な登録

{ 
    "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から:あなたは入手トークンをコールし、現在のトークンを取得する必要がある場合

トークン現在の登録を取得します。アクセス権が付与されていない場合、このメソッドはnullを返します。それ以外の場合は、トークンを返すか、エラーのために約束を拒否します。あなたが実際にトークンを生成するための正しい方法なら

<InstanceID>:<Actual token> 

例えば:

abcd1234:abcdefg123456 

ダブルチェック:

// 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); 
    }); 
} 

通常、生成されたトークンのような形式で提供されます。

+0

私は答えの参考にJavascriptのドキュメントを使用しました。しかし、クライアントとして使用しているプラ​​ットフォームを指定すると、それに応じて変更することができます。 –

+0

あなたは正しいと思います。 –

関連する問題