Следующее консольное приложение .NET8 пытается отправить push-уведомление с помощью нового API Firebase V1.
Я создаю токен-носитель JWT Firebase из сгенерированного консолью Firebase файла Configuration.json, который содержит:
{
"type": "service_account",
"project_id": "myProject",
"private_key_id": "my private key id",
"private_key": "-----BEGIN PRIVATE KEY-----\n DATA \n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-XXXX.gserviceaccount.com",
"client_id": "999999999999",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/met ... ccount.com",
"universe_domain": "googleapis.com"
}
При попытке отправить запрос происходит сбой. Он возвращает:
{
"error": {
"code": 401,
"message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/ ... le-project.",
"status": "UNAUTHENTICATED"
}
}
В Visual Studio я вижу, что токен, возвращенный из GetJwtToken, является действительным токеном JWT, срок действия которого истекает за час.
Какая очевидная ошибка? Я делая? Я ошибаюсь, что ему нужен токен JWT?
Существует ли процедура Firebase, которая выдаст мне ожидаемый «токен доступа OUath 2»?
using Google.Apis.Auth.OAuth2;
using RestSharp;
class Program {
static async Task Main(string[] args) {
// Send notification
await SendNotificationAsync();
}
public static async Task SendNotificationAsync() {
const string kMyToken = "myToken";
// Get JWT token
var bearerToken = await GetJwtToken();
// Create client
var client = new RestClient("https://fcm.googleapis.com/v1");
// Create request
var request = new RestRequest("projects/myProject/messages:send", Method.Post);
// Set auth header
request.AddHeader("Authorization", "Bearer " + bearerToken);
// Set content type
request.AddHeader("Content-Type", "application/json");
// Construct notification payload
var payload = new {
message = new {
token = kMyToken,
notification = new {
title = "Test Title",
subtitle = "Test Sub-title",
body = "Test body.",
content_available = true
},
data = new {
key_1 = "posJob",
key_2 = "Value for key_2"
}
}
};
// Add payload to request
request.AddJsonBody(payload);
// Send request
var response = await client.ExecuteAsync(request);
}
public static async Task GetJwtToken() {
try {
// Read credentials file
var json = File.ReadAllText("credentials.json");
// Parse JSON credentials
var credentials = GoogleCredential.FromJson(json);
var scopes = "https://www.googleapis.com/auth/firebase.messaging";
var accessToken = await credentials.UnderlyingCredential.GetAccessTokenForRequestAsync(scopes);
return accessToken;
} catch (Exception ex) {
Console.WriteLine($"Exception: {ex.Message}");
return "";
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/779 ... ith-net8-c
Как создать токен OAuth 2 для API push-уведомлений Firebase V1 с .NET8 C# в Windows? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение