プッシュ通知の送信にGoogle FCMを使用するアプリケーションがあります。
ユーザーのグループにプッシュ通知を送信すると、一部のユーザーに対してMismatchSenderId
の応答が返されます。それでも、すべてのユーザーがまったく同じアプリケーションを使用しています。一部のユーザーは成功の応答を取得でき、他のユーザーはMismatchSenderIdを取得できますか?
私は多くのことを研究し、FCMが必要とするすべての前提条件を追加したことを確認しました。
助言がありますか?
編集:
サンプル応答:
{"multicast_id":5340432438815499122,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}
編集2:
サーバー側の送信コード(PHP)は次のとおりです。
$fields = array
(
'to' => $token,
'data' => $data
);
$headers = array
(
'Authorization: key=AIza**************************',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, true );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode($fields) );
curl_exec( $ch );
curl_close( $ch );
更新:
この問題はSDKの更新で解決されたようです。現在、最新のcom.google.firebase:firebase-messaging:9.6.1
を使用していますが、「MismatchSenderId」は取得できません。
同じ問題がありました。それを理解するのに何時間も費やした後、私はこの解決策を見つけました:
これがお役に立てば幸いです。ありがとう
これは私のために働いた:
別のfirebaseプロジェクト(プロジェクト2など)のサーバーキーを使用していました。 Androidプロジェクト(Say Project 1)にリンクされているのと同じサーバーキーを使用しましたが、機能しました。私の経験では、1つのAndroidプロジェクト全体に対して1つのfirebaseアプリを使用することで問題が解決したようです。
私の場合、プロジェクトの資格情報を間違えただけです。あるプロジェクトではgoogle-services.jsonを使用し、別のプロジェクトではサーバーキーを使用しています。
私のために働くもの:
senderIdがFCMコンソールのプロジェクト番号と異なることがわかりました
したがって、google-services.jsonを再ダウンロードしましたが、すべて正常に動作します
アプリからすべての解析コード(ライブラリ、AndroidManifestのレシーバーなど)を必ず削除してください。プッシュ通知が断続的に機能していないことがわかりました。私の観察から、それは新規インストールで動作しますが、Playストアからのアプリの更新では動作しません。
Parseの内部の何かがFCMと競合していたと思います(ParseはGCMを使用しているため、GCMとFCMを同時に使用する必要があると推測しています)。すべてのParseレシーバーとライブラリを取り出してすぐに、うまくいきました。
応答「MismatchSenderId」により、これはFireBaseとローカルの「google-services.json」との不一致です。両方のマニフェストが一致することを確認する必要があります
FireBaseコンソールで「YourProject> Project OverView> Cloud Messaging」に移動すると、Androidプロジェクトの「google-services.json」と一致する必要がある「SenderID」が表示されます。
あなたができる最善のことは、「一般」タブから最終的なjsonファイルをダウンロードして、プロジェクトに配置することです。
この問題を解決するために何時間も費やしました。トークンが異なるFCMアカウント設定(google-services.json)を使用して生成され、通知が異なるFCMアカウントを使用して設定されていることがわかりました。両方を同期したとき、それは魅力のように機能しました。
check gcm_sender_id manifest.jsonで不一致の場合-正しいが、新しい送信者IDの新しいサブスクライバーを作成する必要があります。既存の加入者が壊れます。
実際、この問題には多くの理由があります。無効なトークンが渡されたことが原因です。あるアプリから生成された同じトークンを渡し、別のアプリで同じトークンを使用していました。トークンが更新されると、うまくいきます。
プッシュ通知を送信しようとしたときに同じエラーが発生しました。更新されたgoogle-services.jsonファイルを取得して、置き換えます。私のために働いた。
こんにちは、GCMでデバイスIDが作成されると、新しいサーバーキーを使用してFCM経由でプッシュメッセージを送信できないため、古いAPIキーを使用する必要があることに気付きました。
私は同じ問題を抱えていたので、次のように修正しました。
出来上がり...
これに何日も費やしました。
私の場合、Postmanを使用して、mismatchsenderidエラーを取得するには、この blog に従いました。以前は、messaging/mismatched-credential
を取得していましたが、クライアントアプリが複数のプロジェクトを使用していると人々は報告していました。
ただし、私にとっては、1対1のWebアプリとプロジェクトがあります。 しかし、私はデフォルトのポート4200でng serve
を介してすべてのアプリをホストします。 AngularFireMessaging.requestToken
を使用するクライアントWebアプリからの同じトークン-このトークンは常に、開発中の最初のfirebaseアプリの実行で作成されたトークンでした。
回避策として、異なるポートで異なるアプリ/プロジェクトを開始し、それぞれのプロジェクトに適切なトークンを取得します。
Firebaseの初期化を更新するとうまくいきます.
<script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
<script>
// Initialize Firebase
// TODO: Replace with your project's customized code snippet
var config = {
apiKey: "<API_KEY>",
authDomain: "<PROJECT_ID>.firebaseapp.com",
databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
storageBucket: "<BUCKET>.appspot.com",
messagingSenderId: "<SENDER_ID>",
};
firebase.initializeApp(config);
</script>
参考までに。 swear私がテストしていたAndroidアプリは、最新/最高のgoogle-services.jsonファイルを使用してビルドされ、FCMから送信できたにもかかわらず、このエラーに遭遇しました。アプリのコンソール。 Clean Project
を実行した後にアプリを再構築し、登録したFCMトークンでアプリに送信できるようになりました。ですから、壁に頭を打ちつけすぎる前に、きれいに再構築してみてください。
「MismatchSenderId」ステータスを取得している理由を理解するのに大きな苦労がありました。ルートbuild.gradle
にgms依存関係を追加しましたが、実際にはアプリbuild.gradle
でgmsプラグインを適用していませんでした。
アプリbuild.gradle
にこの行がない場合、これが通知が機能しない理由である可能性があります:apply plugin: 'com.google.gms.google-services'
たぶんこれは誰かを助けることができます
私にとって問題は、コルドバでphonegap-plugin-Push
を使用し、phonegapアプリでアプリをテストしていたことでした。
これに関する問題は、このプラグインの何らかの理由で、phonegapアプリがそれをインターセプトし、送信者IDが何であってもダミーの登録キーを返すことです。
したがって、(すべてのキーが正しい限り)動作させるには、エミュレーター、またはUSB経由のAndroidエミュレーションを使用して、プログラムを別の方法でテストします。そして、あなたの鍵は一致します。
うまくいけば、これで誰かの時間を節約できます。
あなたはおそらく私がやっていたことをやっている。 GCMトークンはFCMと同じではなくなりました。 FCMではなくGCMトークンIDをプルしているかどうかを確認してください。 FirebaseInstanceIdServiceをオーバーライドして、正しいIDを取得するようにしてください。ある時点では同じだと思っていましたが、今は違います。テストを記録して見ました。その後、他の人が安全だと言うようにgoogle-services.jsonも更新します。