FCM返回MismatchSenderId

时间:2018-06-25 21:20:39

标签: android firebase google-cloud-messaging firebase-cloud-messaging

我认为我已经完成了将我的消息传递应用程序从GCM转换为FCM的所有必要步骤,但无法正常工作。 FCM当前正在重用MismatchSenderId。

我在AndroidManifest.xml中定义了以下服务。

<service
         android:name=".MyFcmListenerService">
         <intent-filter>
             <action android:name="com.google.firebase.MESSAGING_EVENT" />
         </intent-filter>
     </service>
     <service
         android:name=".MyFirebaseInstanceIDService">
         <intent-filter>
             <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
         </intent-filter>
     </service>

现在,由于消息被拒绝,下面的侦听器代码永远不会执行

public class MyFcmListenerService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage message)
    {
        String from = message.getFrom();
        Map data = message.getData();
        String debug = "what is in data?";
        //todo Process incoming message here
    }

实例ID服务的代码如下。 。

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService
{
    private static final String TAG = "MyFirebaseIIDService";
    @Override
    public void onTokenRefresh() {

        String regToken = FirebaseInstanceId.getInstance().getToken();
        //store token in shared memory
        SPHelper.setTempString(GlobalStuff.GCT, "fcmtoken", regToken);
    }
}

我的Firebase控制台上的发件人ID与我的google-services.json中的项目编号匹配。它们都是相同的12位数字。我为控制台定义了两个变体:com.deanblakely.myapp和com.deanblakely.myapp.debug,这两个变体也包含在我的json文件中。

在完成所有工作之后,我再次下载了google-services.json以确保它与我所拥有的相同。不是。最新的json增加了这一行,但对我的问题没有影响。

"storage_bucket": "optimal-xxxxxx-824.appspot.com"

以下C#代码在我的服务器上运行,并执行Post to FCM。除了FCM URL,这是我相同的GCM发布代码。 (“ regid”实际上是目标电话的FCM令牌。)

   private string FCMPostToPhone(string regid, string apiKey, string postData)
    {

    //This posts the message to Firebase Cloud Messaging (FCM)

    string PostString = "{ \"registration_ids\": [ \"" + regid + "\" ], \"data\":" + postData + "}";

    byte[] byteArray = Encoding.UTF8.GetBytes(PostString);
    Logger.log("Post to FCM = " + PostString);
    HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://fcm.googleapis.com/fcm/send");
    Request.Method = "POST";
    Request.KeepAlive = false;
    Request.ContentType = "application/json";
    Request.Headers.Add(string.Format("Authorization: key={0}", apiKey));
    Request.ContentLength = byteArray.Length;
    Stream dataStream = Request.GetRequestStream();
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
    //  SEND MESSAGE
    try
    {
        WebResponse Response = Request.GetResponse();
        HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode;
        if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden))
        {
            Logger.log("Unauthorized - need new token");

        }
        else if (!ResponseCode.Equals(HttpStatusCode.OK))
        {
            Logger.log("Response from web service isn't OK");
        }
        //HttpStatusCode.
        StreamReader Reader = new StreamReader(Response.GetResponseStream());
        string responseLine = Reader.ReadToEnd();
        Reader.Close();
        Logger.log("Post Response from GCM = " + responseLine);

以下是从上面的代码制作的实际日志,显示了FCM的MimatchSenderId错误(尽管显示为GCM)。 (该消息看起来很怪异,因为它已全部加密)。

  

6/25/2018 12:08:43 PMDBAWP7发布到GCM = {“ registration_ids”:[   “ eBGLX0_IzPI:APA91bGKIRz6Qu-W-OrFjB2vY5_yS8EanepiZjkz83borQw2bvHwWLvuzNSQAr3WStWDY2ijALLBAnGgqq64jWfW2YHMkAImgEKdAWZnJY1YKNJYK1JYK1J1Y2YQ1Y2BQH2Y1B   ],   “数据”:{ “消息”: “9FnAod3oemeAH0iw8oojG5WNnmcqmiGLjIjESex0mHY \ u003d \ n”, “aeskey”: “tSFErur1I8O1ADjhP5UTNdpryNwVw156bTr9Hz70 // jpJoUIcEE41KOjkrt8yKpQQpSgqgj2A2 / GMDXOzIN2wEVnKRqJir7Ylp85DHuj2Z0swOnEuYPUTHXv3z6iQXZlVrw65EP6TrpqyAnCppejqxuDAC2wtQI1zpfRWIlBs9sSnsucOxtpBEbIAo2AdWaBAnL9JtzuMc / XG / IzLKFsH5 + DBOwQccWM4MfK8RbpVmS0RUxzSBbkUi2RBVW86ZP6vzAdliR9qCRVzr2K / X7 / 7IvCdmpzT5V2LM0xBiXA0Vr8BBBOygXVxM4HYplNS8C7C6eSeb / JzoGD8qj / hMvDTw \ u003d \ u003d”,“fromLang “:”英语“,” fromPhoneKey“:” gbsamsung“,” fromUsername“:”“,” mine“:” y“,” subActive“:” n“,” timeSentGMT“:” 2018-06-25   19:08:43“,” toPhoneKey“:” emulator27“,” tran“:” ## 03“}}

     

6/25/2018 12:08:44 PMDBAWP7来自GCM的帖子回复=   {“ multicast_id”:5172924974567668915,“成功”:0:“失败”:1,“ canonical_ids”:0,“结果”:[{“错误”:“ MismatchSenderId”}]}}

在我的项目中,我没有使用代码中的SENDER_ID进行任何操作。

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题。我发现,甚至有多个google-services.xml文件(由合并引起),即使文件名不同(例如google-services_LOCAL_46008),也可能包含在构建中,从而导致ID错误。检查包含google-services.xml的文件夹中只有一个文件。我删除了所有无关的xml文件,它起作用了。