【问题标题】:FCM returning MismatchSenderIdFCM 返回 MismatchSenderId
【发布时间】:2018-08-02 22:24:45
【问题描述】:

我认为我已完成将消息传递应用程序从 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
    }

instance 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 到 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)。 (消息看起来很奇怪,因为它都是加密的)。

2018 年 6 月 25 日 12:08:43 PMDBAWP7 发布到 GCM = { "registration_ids": [ “eBGLX0_IzPI:APA91bGKIRz6Qu-W-OrFjB2vY5_yS8EanepiZjkz83borQw2bvHwWLvuzNSQAr3WStWDY2ijALLBAnGgq64jWfW2YHMkAImgEKdAWZvgj7m1MXgpB9_2zH7uRdLUQNAG2jmEK3YzHYxgJBgzd” ], "data":{"Message":"9FnAod3oemeAH0iw8oojG5WNnmcqmiGLjIjESex0mHY\u003d\n","aeskey":"tSFErur1I8O1ADjhP5UTNdpryNwVw156bTr9Hz70//jpJoUIcEE41KOjkrt8yKpQQpSgqgj2A2/GMDXOzIN2wEVnKRqJir7Ylp85DHuj2Z0swOnEuYPUTHXv3z6iQXZlVrw65EP6TrpqyAnCppejqxuDAC2wtQI1zpfRWIlBs9sSnsucOxtpBEbIAo2AdWaBAnL9JtzuMc/xG/IzLKFsH5+DBOwQccWM4MfK8RbpVmS0RUxzSBbkUi2RBVW86ZP6vzAdliR9qCRVzr2K/x7/7IvCdmpzT5V2LM0xBiXA0Vr8BBBOygXVxM4HYplNS8C7C6eSeb/JzoGD8qj/hMvDTw\u003d\u003d","fromLang ":"English","fromPhoneKey":"gbsamsung","fromUsername":"","mine":"y","subActive":"n","timeSentGMT":"2018-06-25 19:08:43","toPhoneKey":"emulator27","tran":"##03"}}

2018 年 6 月 25 日 12:08:44 PMDBAWP7 来自 GCM 的回复 = {"multicast_id":5172924974567668915,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}

在我的项目中,我没有在代码中使用 SENDER_ID 做任何事情。

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-06-26
    • 2016-10-18
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多