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