Wie beheben Sie 400 schlechte Anforderungsfehler, während Sie versuchen, Nachrichten über die neue FCM API V1 zu senden?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie beheben Sie 400 schlechte Anforderungsfehler, während Sie versuchen, Nachrichten über die neue FCM API V1 zu senden?

by Anonymous » 14 Feb 2025, 14:19

Ich versuche, von Legacy FCM (Firebase Cloud Messaging) API zur neuen FCM API V1 zu migrieren. Zu diesem Zweck habe ich ein paar Dinge auf der FCM -Seite gemäß der FCM -Dokumentation gemacht. Ich habe das Service -Konto erstellt und die JSON -Datei zur Authentifizierung von Anforderungen heruntergeladen. Mein Code ist in C#, also habe ich auf C# die folgenden Änderungen vorgenommen: < /p>

[*] verwendet OAuth 2.0 zur Authentifizierung. < /Li>
Verwendete die heruntergeladene JSON -Datei, um die Anmeldeinformationen zu erhalten, und diese Anmeldeinformationen zum Generieren des Zugriffs -Tokens verwendet. com/v1/yourProjectId/Nachrichten: Senden
Aktualisierte die JSON -Payload -Struktur. Ich habe geschrieben, um dies zu erreichen: < /p>
PersUser persUser = PersUser.GetPersUser();
string pushToken = persUser.PushNotificationToken;
if (persUser != null && !String.IsNullOrEmpty(pushToken))
{
string senderId = string.Empty;

// Load credentials from the JSON key file
GoogleCredential credential;
using (var stream = new FileStream(@"JSON_FILE_PATH", FileMode.Open, FileAccess.Read))
{
credential = GoogleCredential.FromStream(stream)
.CreateScoped("https://www.googleapis.com/auth/firebase.messaging");
}
string accessToken = String.Empty;
// Obtain an access token
if (credential != null)
{
var token = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
accessToken = Convert.ToString(token);
}

senderId = ConfigurationManager.AppSettings["FIREBASESENDERID"];

var httpWebRequest = (HttpWebRequest)System.Net.WebRequest.Create("https://fcm.googleapis.com/v1/projects/ ... sages:send");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Headers.Add(string.Format("Authorization: Bearer {0}", accessToken));
httpWebRequest.Method = "POST";

var body = new object();

body = new
{
token = pushToken,
notification = new
{
title = "Patient Flow",
body = message,
sound = soundFileName
},
data = new
{
type = notificationType
}
};

string jsonPayload = String.Empty;
var serializer = new JavaScriptSerializer();
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = jsonPayload = serializer.Serialize(body);
streamWriter.Write(json);
streamWriter.Flush();
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string httpResult = streamReader.ReadToEnd();

if (httpResponse.StatusCode != HttpStatusCode.OK)
{
Logger.Write(TraceTyp.DEBUG, String.Empty, "PushNotificationProcessor.SendNotification", string.Format("Push notification for {0} was not successfully delivered.", httpResponse), String.Empty);
}
}
return true;
}
return false;
< /code>
Wenn ich dies debugg, sehe ich einen 400 schlechten Anforderungsfehler unter: < /p>
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
< /code>
Ich habe auch die Lösung ausprobiert, die in Firebase Cloud Messaging Device Group Management über HTTP V1 -Auth vorgeschlagen wurde, aber das hat nicht geholfen. Was ich hier fehlt. Wohin gehe ich möglicherweise falsch?

Top