source

FCM이 MismatchSenderId를 가져오는 중

ittop 2023. 7. 1. 09:59
반응형

FCM이 MismatchSenderId를 가져오는 중

Google FCM을 사용하여 푸시 알림을 보내는 애플리케이션이 있습니다.

에 푸시 때, 는 " ▁of"라는 응답을 .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"가 더 이상 표시되지 않습니다.

파이어베이스가 서버 키를 새 버전으로 업그레이드했습니다.이전 키 대신 새 키를 사용합니다.

설정으로 이동->프로젝트 설정->클라우드 메시징 탭

enter image description here

이 솔루션을 찾았습니다.

  • 먼저 서버 키가 올바른지 확인합니다. AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • 그러면 79XXXXXXXXXXXX와 같은 보낸 사람 ID가 맞는지 확인합니다.
  • 주요 문제는 장치에 있었습니다.알림을 보내야 하는 ID(UDID)입니다.사실 우리가 FCM에서 안드로이드 쪽에 탔던 DeviceId는 GCM과 다릅니다.FCM에서 GCM이 생성한 DeviceId를 사용할 수 없습니다.

그냥 참고로.테스트 중인 안드로이드 앱이 최신/최고의 Google-services.json 파일로 빌드되어 FCM 콘솔에서 앱으로 전송할 수 있음을 맹세했음에도 불구하고 이 오류가 발생했습니다.나는 앱을 한 후에 다시 만들었습니다.Clean Project그리고 이제 등록된 FCM 토큰으로 앱으로 보낼 수 있습니다.그래서, 어쩌면 너무 오랫동안 벽에 머리를 부딪치기 전에 깨끗한 재건을 시도할지도 모릅니다.

효과적인 솔루션:

  • 현재 안드로이드 프로젝트가 어떤 파이어베이스 프로젝트에 연결되어 있는지 확인하고 해당 프로젝트의 서버 키를 사용합니다.

다른 파이어베이스 프로젝트의 서버 키를 사용하고 있었습니다(예: 프로젝트 2).안드로이드 프로젝트(Say Project 1)와 연동된 것과 동일한 서버 키를 사용했는데 작동했습니다.제 경험상, 하나의 안드로이드 프로젝트 전체에 하나의 파이어베이스 앱을 사용하는 것이 문제를 해결하는 것처럼 보였습니다.

저의 경우 프로젝트 자격 증명을 잘못 알고 있었습니다. 한 프로젝트에서 Google-services.json을 사용하고 다른 프로젝트에서 서버 키를 사용하는 것입니다.

우리는 이 문제를 해결하기 위해 몇 시간을 보냈습니다.토큰은 서로 다른 FCM 계정 설정(google-services.json)을 사용하여 생성되고 알림은 서로 다른 FCM 계정을 사용하여 설정된 것으로 확인되었습니다.우리가 둘 다 동기화했을 때 그것은 매력적으로 작동했습니다.

아래와 같이 올바른 키를 입력하여 문제를 해결했습니다.

이 그림과 같은 서버복사

그리고 이 코드를 이 사진처럼 우체부에게 복사합니다.

그리고 몸은 이 사진처럼 입니다.

enter image description here 참고:

  • 헤더의 Server 키 앞에 key=를 추가해야 합니다.
  • 헤더 키(인증 = "key=..." 및 내용)를 올바르게 입력했는지 확인합니다.유형 = "application/json")
  • 요청을 올바른 주소(https://fcm.googleapis.com/fcm/send 및 게시 방법)로 보냈습니다.
  • 모든 자격 증명을 교차 검증했습니다.

  • 새 서버 키 추가 및 이전 서버 키 삭제

  • Google-services.json을 다시 다운로드했습니다.

아무것도 문제를 해결하지 못했습니다.

그런 다음 프로젝트를 청소하고 프로젝트를 다시 만듭니다.그 후에는 잘 작동합니다.

나는 그것을 발견했습니다.senderIdFCM 콘솔의 프로젝트 번호와 다릅니다.
구글 을 다시 다운로드했고 이 잘 합니다. ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ

앱(라이브러리, Android Manifest의 수신기 등)에서 모든 Parse 코드를 제거해야 합니다.간헐적으로 푸시 알림이 작동하지 않는 것을 발견했습니다.제가 관찰한 바로는, 그것은 새로운 설치에서는 작동할 것이지만 플레이 스토어의 앱 업데이트에서는 작동하지 않을 것입니다.

저는 Parse 내부의 무언가가 FCM과 충돌했다고 생각합니다(Parse는 GCM을 사용하므로 GCM과 FCM을 동시에 사용하는 것과 관련이 있다고 생각합니다).파서 수신기와 라이브러리를 모두 뜯어내자마자 일이 잘 풀렸습니다.

사실 이 문제에는 여러 가지 이유가 있습니다.잘못된 토큰이 전달되었기 때문입니다.한 앱에서 생성된 동일한 토큰을 전달하고 다른 앱에서 동일한 토큰을 사용하고 있었습니다.일단 토큰이 업데이트되면 저에게 효과가 있습니다.

react-native - node.js 프로젝트에서도 동일한 문제가 있었습니다.안드로이드로 알림을 보내고 싶었습니다.모든 것이 잘 설정되고 작동했습니다(즉, node.js에서 알림을 보내고 안드로이드 장치에서 알림을 받을 수 있었습니다).

며칠 후, 저는 다른 파이어베이스 계정을 사용해야 했기 때문에 제 프로젝트의 안드로이드/앱 폴더에 있는 구글-services.json 파일을 변경하고 프로젝트를 다시 만들었습니다.그런데 서버에서 알림을 다시 보내려고 하니 오류가 발생했습니다.

{.............
  errorInfo: {
    code: 'messaging/mismatched-credential',
    message: 'SenderId mismatch'
  },
  codePrefix: 'messaging'
}

솔루션:

app/build/generated/res/google-services/{build_type}/values/values.xml 위치의 XML 파일이 새 Google-services.json에 따라 자동으로 업데이트되지 않았습니다.이전 Google-services.json 파일의 이전 값으로 여전히 구성되어 있습니다.values.xml 파일을 수동으로 변경해야 했습니다.

app/build/generated/res/google-services/{build_type}/values/values.xml 파일의 모양입니다(google-services.json에 따라 자동으로 업데이트되지 않으면 수동으로 변경해야 합니다)-

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <! -- Present in all applications -->
    <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>

    <! -- Present in applications with the appropriate services configured -->
    <string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
    <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
    <string name="ga_trackingId" translatable="false">UA-65557217-3</string>
    <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
    <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="project_id" translatable="false">mydemoapp</string>

</resources> 

다음 링크를 참조할 수 있습니다.

  1. https://firebase.google.com/docs/projects/multiprojects
  2. JSON 파일 처리 중: https://developers.google.com/android/guides/google-services-plugin#processing_the_json_file .

저는 이것에 몇 시간을 소비했고 마침내 그것을 알아냈습니다.이 문제는 보낸 사람 응용 프로그램이 사용 중인 서비스 계정이 수신자가 사용 중인 서비스 계정과 다른 경우에 발생합니다.

은 수신서계다통확수있다습니인을 통해 알 수.Firebase -> Project Overview -> Project Settings -> Service Accounts 새로운 할 때 합니다.FirebaseApp보낸 사람:

FileInputStream serviceAccount = new FileInputStream("YOUR_PATH_TO_GENERATED_KEY.json");
GoogleCredentials googleCredentials = GoogleCredentials.fromStream(serviceAccount);
FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(googleCredentials).build();
firebaseApp =  FirebaseApp.initializeApp(options);

푸시 알림을 보내기 전에 이 초기화를 한 번 수행해야 합니다.

저의 경우, 저는 모든 것을 올바르게 수행했고 여전히 이 문제를 안고 있었습니다.수신기 앱에 사용된 "google-services.json"을 몇 가지 변경했는데 AndroidStudio가 내 새 파일을 사용하지 않는다는 것을 알게 되었습니다.솔루션은 매우 간단했습니다.

AndroidStudio -> Build -> Clean Project 빌드> ->Rebuild Project

불일치 발송인 ID 정보cm에 대한 이 오류를 제거하기 위해

{"multicast_id":7751536172966571167,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}

오류가 발생했습니다.

  1. 그래서 우리는 먼저 FCM에서 MyDemoApplication과 같은 애플리케이션을 등록해야 했습니다.

  2. 후 키 "FCM"을 합니다.AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHU 즉 발송인 ID입니다.346252831806이런 형식입니다.

  3. Android Studio에서 우리의 프로젝트는 FCM이 만든 프로젝트, 즉 MyDemoApplication에 연결됩니다.

  4. 그리고 가장 중요한 단계는 장치 토큰 또는 등록 ID에 필요한 것입니다.이러한 토큰은 Android Studio에서 생성해야 합니다.

  5. 그 후 웹 API 프로젝트에서 Sender Id와 API 키를 사용하면 반드시 알림을 받을 수 있습니다.

가 현재 앱에 더한 후 이 했습니다. 패키지 을 사용하는 것 . 이 하려면 eatch 포함하는 하고 FCM을 . 따라서 문제를 해결하려면 해당 패키지 이름과 함께 플레이버를 위한 앱을 추가하고 업데이트해야 합니다.google-services.json각 향미(패키지 이름)에 대한 클라이언트 정보가 포함된 최신 생성 파일입니다.

manifest.json의 gcm_sender_id가 일치하지 않으면 확인하십시오. 일치하지 않지만 새 보낸 사람 ID에 대해 새 구독자를 만들어야 합니다.기존 구독자가 중단됩니다.

응답 "MismatchSenderId"에 따르면 FireBase와 로컬 "google-services.json"이 일치하지 않습니다. 두 매니페스트가 일치하는지 확인해야 합니다.

FireBase 콘솔에서 "Your Project > Project Overview > Cloud Messaging"으로 이동하면 "Sender"가 표시됩니다.ID"는 Android 프로젝트의 "google-services.json"과 일치해야 합니다.

가장 좋은 방법은 "일반" 탭에서 최종 json 파일을 다운로드하여 프로젝트에 배치하는 것입니다.

푸시 알림을 보내려고 할 때도 같은 오류가 발생했습니다.업데이트된 Google-services.json 파일을 가져와 파일로 대체합니다.나를 위해 일했습니다.

우체부의 fcm api "https://fcm.googleapis.com/fcm/send "을 사용하여 알림을 보내려고 했습니다.서버 키는 정상이고 토큰은 정상적으로 붙여넣었지만 "MismatchSenderId" 오류가 계속 발생했습니다.

그런 다음 안드로이드 측의 Gradle 파일에 다음과 같은 종속성을 도입했습니다.

implementation platform('com.google.firebase:firebase-bom:25.12.0') 

그리고 그것은 장치에서 알림을 받기 시작했습니다.

Google-service.json 파일의 "package_name"이 build.gradle(app) 파일의 applicationId인지 확인합니다.

  "client_info": {
    "mobilesdk_app_id": "",
    "android_client_info": {
      "package_name": "" // -> your applicationId
    }
  }

저는 파이어베이스를 사용한 지 5년 만에 이 문제의 원인을 발견했습니다.

물론 이전 프로젝트에 대한 새로운 Google-services.json 파일을 가져오려고 할 때 이런 일이 발생했습니다.

새 파일을 받으면 최신 버전의 Google 서비스를 사용해야 합니다.

classpath 'com.google.gms:google-services:$.$.$'

다음과 같은 반응 네이티브 Firebase 옵션을 기록하여 앱에서 어떤 Google-services.j를 사용하고 있는지 확인할 수 있습니다.

console.log(JSON.stringify(messaging().app.options));

메시지 SenderId 등이 인쇄됩니다.

반응 네이티브 프로젝트의 저에게 그 이유는 구글-services.json을 새 프로젝트로 교체한 후 프로젝트를 청소하지 않았기 때문입니다.

실행 후:

gradlew clean (in android folder) 

알림이 작동하기 시작했습니다.에뮬레이터를 중지하고 데이터를 지우고 다시 시작했습니다.

이 경우 UI 전송은 FCM 토큰을 백엔드로 보내고 백엔드 전송은 필요할 때 알림을 보냅니다.따라서 문제는 FCM 토큰이 잘못된 Google-services.json으로 생성되었으며 백엔드에서 올바른 새 값을 사용하고 있으며 불일치가 발생했다는 것입니다.

전송되지 않음 - 요청된 엔티티를 찾을 수 없음 및 SenderId 불일치라는 두 가지 오류가 발생했습니다. 여기서도 답변을 찾고 있었습니다.

Firebase Cloud Messaging in Firebase Cloud Functions를 사용하여 푸시 알림을 보내려고 할 때 요청한 엔티티를 찾을 수 없습니다.

"네이티브 네이티브": "0.68.1",

"@filename-native-firebase/app": "^15.1.1",

"@https-native-firebase/firebase/firebase": "^15.1.1",

파이어베이스 초기화 업데이트가 가능합니다.

<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>

나에게 문제는 내가 그것을 사용하고 있다는 것이었습니다.phonegap-plugin-push코르도바에서, 폰갭 앱으로 앱을 테스트합니다.

이 플러그인의 문제는 어떤 이유에서인지 폰갭 앱이 이 플러그인을 가로채서 어떤 발신자 ID를 가지고 있든 상관없이 더미 등록 키를 반환한다는 것입니다.

따라서 모든 키가 제대로 작동하는 한 프로그램을 에뮬레이터나 usb를 통한 안드로이드 에뮬레이션으로 다른 방법으로 테스트하는 것입니다.그리고 당신의 열쇠는 일치할 것입니다.

이것이 누군가에게 시간을 좀 절약해 주기를 바랍니다.

당신은 아마도 내가 하던 일을 하고 있을 것입니다.GCM 토큰이 더 이상 FCM과 동일하지 않습니다.FCM 대신 GCM 토큰 ID를 풀링하는지 확인합니다. Firebase를 덮어씁니다.InstanceIdService 및 올바른 ID를 확인합니다. 한때는 동일하다고 생각했지만 지금은 그렇지 않습니다. 테스트를 기록하고 보았습니다. 그렇게 한 후 다른 사람들이 말하는 것처럼 Google-services.json도 업데이트합니다.

이 일로 며칠을 허비했습니다.

저의 경우, 저는 이 블로그를 팔로우하여 포스트맨을 사용하고 mismatchsenderid 오류를 받았습니다.전에, 저는.messaging/mismatched-credential그리고 사람들은 그들의 클라이언트 앱이 여러 프로젝트를 사용했다고 보고했습니다.

하지만, 저는 일대일, 웹 앱, 프로젝트를 가지고 있습니다. 하지만, 저는 모든 앱을 호스팅합니다.ng serve기본 포트 4200에 있습니다.따라서 개발 중인 프로젝트/앱 쌍에 관계없이 클라이언트 웹 앱에서 항상 다음을 사용하여 동일한 토큰을 얻습니다.AngularFireMessaging.requestToken이 토큰은 항상 개발 중인 파이어베이스 앱을 처음 실행할 때 생성된 토큰이었습니다.

해결 방법으로 다른 포트에서 다른 앱/프로젝트를 시작하고 각 프로젝트에 적합한 토큰을 얻습니다.

토큰의 첫에는 FCM 토큰이 잘렸습니다).:는 )입니다.MismatchSenderId

스크립트를 수정하고 이제 모든 것이 정상적으로 작동합니다.

나의 경우 누군가가 애플 개발 포털에서 내 앱에 대한 APN SSL 인증서를 삭제했습니다.

  • 새 인증서를 만들어야 했습니다.식별자 / My AppId / Push Notifications / Edit.
  • 그런 다음 콘솔에서 프로젝트 설정 / 클라우드 메시징 / iOS 앱 구성 / APN 인증서를 Firebase 프로젝트에 업로드했습니다.

이것으로 문제가 해결되었습니다.

나의 경우는 매우 간단했습니다.데이터베이스에서 잘못된 registrationId를 뽑고 있었습니다.제가 정확한 아이디를 뽑은 후에, 그것은 작동했습니다.

제가 왜 "MismatchSenderId" 상태를 얻었는지 이해하는 데 큰 어려움을 겪었습니다.을 root에 했습니다.build.gradle 제 는 사실 앱에서 이었습니다.build.gradle.

이ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠbuild.gradle하지 않는 수 : 이이알작않동는이수있다습니유일지하것림.apply plugin: 'com.google.gms.google-services'

언급URL : https://stackoverflow.com/questions/37863106/fcm-getting-mismatchsenderid

반응형