FCM获取MismatchSenderId


82

我有一个使用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”。


3
MismatchSenderId表示您的客户端正在向与要发送的服务器不同的服务器注册。您所有的客户都在注册同一个项目吗?您还可以在问题中包含MismatchSenderId响应吗?
亚瑟·汤普森

是的,相同的项目,相同的应用程序,相同的服务器密钥。
TareK Khoury

您能否显示发送此消息的代码?我可能知道问题的原因
。– AnZ

3
@TareKhoury,谢谢。首先。请确保您使用授权密钥Server Key(可在火力控制台中发现,在服务器选项卡),而不是API_KEYgoogle-service.json。其次,确保您设置了正确的目的地。例如,to" : "/topics/yourtopic"如果您想向所有设备发送消息(它们应该首先订阅该主题)。或尝试发送到特定设备,然后需要键入设备令牌(在cec5gH04....92IyHrB2K
Firebase

3
在过去两年中,有没有人设法解决问题?
Dylanthepiguy

Answers:


35

Firebase已将其服务器密钥升级到新版本。使用新密钥代替旧密钥。

转到设置->项目设置->云消息传递选项卡

在此处输入图片说明


如果您使用服务器密钥或旧版服务器密钥,则没有任何区别
R15,19年

23

我找到了这个解决方案:

  • 首先,我检查服务器密钥是否正确,例如AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • 然后,我检查发件人ID(如79XXXXXXXX)也正确。
  • 主要问题在于我必须向其发送通知的device_ID(UDID)。实际上,我们在FCM中在Android方面获得的DeviceId与GCM不同。您不能在FCM中使用GCM创建的DeviceId

你帮了我很多忙 我不得不要求应用程序开发人员在代码中包含发件人ID,然后我的FCM API KEY起作用了。非常感谢。
路易斯·米兰尼斯

3
当我们将后端和Android应用程序升级到FCM时,我们如何才能向用户发送推送通知,说明后端已在GCM令牌中进行了注册。?
Pinkesh Darji '18


喂伙计。您将senderId放在哪里?我看到我没有使用它,并且几天前我已经能够发送通知。在此先感谢队友
voghDev

您好@voghDev,使用FCM Api(fcm.googleapis.com/fcm/send)从后端在标头中发送senderId,并在应用程序侧使用相同的SenderId创建UDID(device_Id)
Nauman Khan,

15

这为我工作:

  • 检查您的当前ANDROID项目已与哪个FIREBASE项目链接,并使用该 项目中的服务器密钥

我正在使用另一个Firebase项目(例如Project 2)中的Server key。我使用了与我的android项目链接的相同服务器密钥(说Project 1),它起作用了。以我的经验,为一个完整的android项目使用一个firebase应用似乎可以解决问题。


我面临着同样的情况。链接到android应用的旧项目。并且新项目的服务器密钥不起作用(返回错误MismatchSenderId)。在删除旧项目中的android应用后,新项目中的新服务器密钥就可以使用了。
vk26 '19


7

仅供参考。即使我发誓我正在测试的android应用程序是使用最新/最出色的google-services.json文件构建的,但我仍然可以从FCM控制台发送到该应用程序,但我还是遇到了此错误。完成a之后,我重新构建了应用程序Clean Project,现在我可以将其注册的FCM令牌发送到应用程序。因此,在将头部撞到墙上的时间过长之前,请尝试进行干净的重建。


6

我们花了几个小时来解决这个问题。我们发现令牌是使用其他FCM帐户设置(google-services.json)生成的,而通知是使用其他FCM帐户设置的。当我们两者同步时,它就像一个魅力。


这也发生在我身上。确保100%确保为您的手机生成的令牌是正确的构建环境(dev / alpha / prod)
ehacinom

4

我发现senderId该项目与FCM控制台中的项目编号不同,
因此我重新下载了google-services.json,一切正常


3
  • 我交叉验证了所有凭据

  • 添加了新的服务器密钥并删除了旧的服务器密钥

  • 再次下载google-services.json

什么都没解决

然后我只需要清理项目然后重建项目即可。


你救了我的一天:D
团Lu

3

输入正确的密钥即可解决我的问题,如下所示。

复制服务器密钥如上图所示 在此处输入图片说明

然后将此代码复制到像这样的邮递员中 在此处输入图片说明

身体像这张照片一样

在此处输入图片说明 注意:

  • 您必须在服务器密钥头中添加key =
  • 确保正确输入标题键(Authorization =“ key = ...”和ContentType =“ application / json”)
  • 您已将请求发送到正确的地址https://fcm.googleapis.com/fcm/send和Post方法)

2

确保从应用程序(库,AndroidManifest中的接收器等)中删除所有解析代码。我发现间歇性的推送通知无效。根据我的观察,它将适用于全新安装,但不适用于Play商店中的应用更新。

我认为Parse内部的某些内容与FCM冲突(Parse使用GCM,因此我猜想它与同时使用GCM和FCM有关)。一旦我删除了所有Parse接收器和库,一切就变的很好。


2

实际上,此问题有很多原因。我的是因为传递了无效的令牌。我正在传递从一个应用程序生成的相同令牌,并在另一应用程序中使用相同的令牌。令牌更新后,它对我有用。


2

为了消除不匹配发件人ID在fcm中的错误

{"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. 之后,在Web API项目中使用发件人ID和API密钥,您肯定会收到通知


1

检查manifest.json中的gcm_sender_id如果不匹配-正确,但是您需要为新的发送者ID设置新的订阅者。现有订户中断。


1

根据响应“ MismatchSenderId”,这是FireBase与本地“ google-services.json”之间的不匹配,您必须确保两个清单都匹配

在FireBase控制台中,转到“ YourProject> Project OverView> Cloud Messaging”,您将看到“ SenderID”,该名称必须与Android项目中的“ google-services.json”匹配。

最好的办法是从“常规”选项卡下载最终的json文件,并将其放在您的项目中。



0

我遇到了同样的问题,并按以下方式修复它:

  1. 转到您的Google FCM控制台
  2. 选择你的应用
  3. 在左侧菜单中找到设置图标(标准轮)
  4. 单击它,然后单击项目设置
  5. 现在复制您的服务器密钥并将其粘贴到php中

瞧...


0

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

0

对我来说,问题是我正在使用 phonegap-plugin-pushin cordova,phonegap应用程序测试了该应用程序。

问题在于,由于某种原因,无论您使用什么发送者ID,phonegap应用都会拦截该插件并返回虚拟注册密钥。

因此,要使其正常工作(只要您拥有正确的所有键),就是使用模拟器或通过USB的android仿真以其他方式测试程序。并且您的密钥将匹配。

希望这可以节省一些时间。


0

你可能在做什么我在做什么。GCM令牌与FCM不再相同。检查您是否提取GCM令牌ID而不是FCM。只需覆盖FirebaseInstanceIdService并确保您获得正确的ID。我以为他们曾经是同一个人,但现在却不一样。我登录了测试,看到了。在您这样做之后,还像其他人所说的那样安全地更新了google-services.json。


0

我在这上浪费了几天。

就我而言,我跟随该博客使用Postman并获得mismatchsenderid错误。以前,我遇到了messaging/mismatched-credential,并且有人报告他们的客户端应用程序使用了多个项目。

但是,对我来说,我是一对一的,一个Web应用程序和一个项目。 但是,我通过ng serve默认端口4200托管所有应用程序。因此,无论我在开发哪个项目/应用程序对,我总是会使用以下方式从客户端Web应用程序获得相同的令牌AngularFireMessaging.requestToken-该令牌始终是我有史以来第一个创建的令牌在开发中运行Firebase应用程序。

解决方法是,我在不同的端口上启动不同的应用程序/项目,并为各个项目获取适当的令牌。


0

注意:我已经截断了FCM令牌的第一部分(在之前:),错误是MismatchSenderId

修复了我的脚本,现在一切正常。


0

以我为例,有人在Apple开发门户网站中为我的应用程序删除了APN SSL证书。

  • 我需要创建新证书:标识符/我的AppId /推送通知/编辑。
  • 然后,我从控制台将它们上传到Firebase项目:项目设置/云消息传递/ iOS应用程序配置/ APNS证书。

这样就解决了问题。


0

就我而言,这非常简单。我从数据库中提取了错误的registrationId。在提取正确的ID之后,它就可以了。


0

我在本机-node.js项目中遇到了相同的问题。我想在android中发送通知。一切都已设置并正常运行(即,我能够从node.js发送通知并在Android设备上接收通知)。

几天后,我不得不使用另一个Firebase帐户,因此我在项目的android / app文件夹中更改了google-services.json文件,并重建了该项目。但是,当我尝试再次从服务器发送通知时,出现错误-

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

解:

根据新的google-services.json,未自动更新以下位置的XML文件: app / build / generated / res / google-services / {build_type} /values/values.xml。它仍然包含我之前的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

0

我很难弄清楚为什么我得到了“ MismatchSenderId”状态。我在根目录中添加了gms依赖项,build.gradle但我的错误实际上是未在应用程序中应用gms插件build.gradle

如果您在应用程序中没有此行build.gradle,这可能是通知不起作用的原因: apply plugin: 'com.google.gms.google-services'


0

我注意到,在GCM中创建设备ID时,您无法使用新的服务器密钥通过FCM发送推送消息,而必须使用旧的API密钥。


0

我试图使用邮递员的fcm api“ https://fcm.googleapis.com/fcm/send”发送通知。服务器密钥正常,令牌粘贴得很好,但仍然出现错误“ MismatchSenderId”。

然后在android端的gradle文件中介绍了follwoing依赖性。

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

它开始在设备上接收通知



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.