FCM возвращает MismatchSenderId - PullRequest
0 голосов
/ 26 июня 2018

Я думаю, что выполнил каждый шаг, необходимый для преобразования моего приложения обмена сообщениями из 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
    }

Код службы экземпляра выглядит следующим образом.,.

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 совпадает с номером проекта в моем 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.Это мой код публикации GCM, за исключением URL-адреса FCM.(«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);

Ниже приведены фактические журналы, сделанные из приведенного выше кода, показывающие ошибку MimatchSenderId от FCM (хотя в нем указано GCM).(Сообщение выглядит странно, потому что это все шифруется)

6/25/2018 12:08:43 PMDBAWP7 сообщение для GCM = { "registration_ids":. [ "EBGLX0_IzPI: APA91bGKIRz6Qu-W-OrFjB2vY5_yS8EanepiZjkz83borQw2bvHwWLvuzNSQAr3WStWDY2ijALLBAnGgq64jWfW2YHMkAImgEKdAWZvgj7m1MXgpB9_2zH7uRdLUQNAG2jmEK3YzHYxgJBQTq_Cgz1mOpNxbDeLU3A"], "данные": { "Сообщение": "9FnAod3oemeAH0iw8oojG5WNnmcqmiGLjIjESex0mHY \ u003d \ п", "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 "}}

6/25/2018 12:08:44 PMDBAWP7 Опубликовать ответ от GCM = {" multicast_id ": 5172924974567668915," success ": 0," fail ": 1," canonical_ids ": 0," results ": [{" error ":" MismatchSenderId "}]}

Нигде вмой проект я делаю что-нибудь с SENDER_ID в моем коде.

1 Ответ

0 голосов
/ 02 августа 2018

У меня просто была похожая проблема.Я обнаружил, что существует более одного файла google-services.xml (вызванного слиянием), даже с разными именами (например, google-services_LOCAL_46008), которые, вероятно, были включены в сборку, вызывая неправильный идентификатор.Проверьте свою папку, которая содержит google-services.xml, что есть только один файл.Один я удалил все посторонние XML-файлы, все заработало.

...