Основываясь на Firebase Admin SDK и унаследованном протоколе сервера Http, я использую два решения для отправки сообщения
Но два решения не могут определить, является ли это успехом или неудачей.Как это определить?
первое решение использовало SDK
public static async Task Send()
{
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromFile(
Path.Combine(Environment.CurrentDirectory,"service-account-file.json"))
});
var message = new MulticastMessage()
{
Notification = new Notification()
{
Body = "TestBody",
Title = "TestTitle"
},
Tokens = new List<string>(){ TokenA, TokenB}
};
var respon = await FirebaseMessaging.DefaultInstance.SendMulticastAsync(message);
Console.WriteLine(respon);
}
ответ показывает:
{
"FailureCount": 1,
"SuccessCount": 1,
"Responses": [
{
"Exception": null,
"IsSuccess": true
"MessageId": "projects/pushtest-8f822/messages/0:1562899661229611%5d0d01f35d0d01f3
},
{
"Exception": "Google.Apis.Resuest.RequestError......",
"IsSuccess": false
"MessageId": null
}
]
}
Второе решение использовать устаревший протокол сервера Http
public static async Task SendHttp()
{
var data = new
{
registration_ids = new[] { TokenB, TokenA },
notification = new
{
body = "body",
title = "title"
}
};
string jsonMessage = JsonConvert.SerializeObject(data);
var request = new HttpRequestMessage(HttpMethod.Post, "https://fcm.googleapis.com/fcm/send");
request.Headers.TryAddWithoutValidation("Authorization", $"key={ServerKey}");
request.Headers.TryAddWithoutValidation("Sender", $"id={SenderId}");
request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
request.Content = new StringContent(jsonMessage, Encoding.UTF8, "application/json");
using (var client = new HttpClient())
{
var result = await client.SendAsync(request);
var responseBody = result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
}
}
responseBody показывает
{
"multicast_id": 8518242433263494716,
"success": 1,
"failure": 1,
"canonical_ids": 0,
"results": [
{
"error": "NotRegistered"
},
{
"message_id": "0:1562899978685796%5d0d01f35d0d01f3"
}
]
}
Я хотел бы получить результат / ответ, который может идентифицировать TokenA и TokenB, которые являются успешными и неудачными
Обновление: я найду способопределить, какой токен отправлен успешно или неудачно, но о нем не пишут никаких документов.Если токены (SDK) или registration_ids, нажмите TokenA, затем TokenB.результат покажет тот же порядок с результатом.