Error when sending message using a quota project

Aperta
#444 0 commenti 2 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
csharp, google-cloud
Ambito
api, backend

Direzione di ricerca

Inizia riproducendo il problema tramite FirebaseApp.Create, FirebaseMessaging.GetMessaging e FirebaseMessaging.SendAsync utilizzando una credenziale creata con CreateWithQuotaProject. Esamina lo stack trace attraverso FirebaseMessagingClient.SendAsync e ConfigurableMessageHandler.CheckValidAfterInterceptors per determinare perché l’header x-goog-user-project viene rifiutato. Il lavoro è completato quando i messaggi vengono inviati in modo affidabile senza l’InvalidOperationException.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

api: messaging
[REQUIRED] Step 2: Describe your environment

We are running our API on Google's cloud run.

  • Firebase SDK version: FirebaseAdmin version 3.1.0
  • Firebase Product: Messaging
  • .NET version: 8.0
[REQUIRED] Step 3: Describe the problem
Steps to reproduce:

We are creating a FirebaseApp and retrieving the FirebaseMessaging instance via this code:

public FirebaseMessaging GetFirebaseMessaging()
{
   var apiKey = _contextService.ApiKey;

   var app = _apps.GetOrAdd(apiKey, key =>
   {
       var projectId = $"{_firebaseSettings.Value.ProjectIdPrefix}{key[..8]}-{key[^12..]}";
       var credential = GoogleCredential.GetApplicationDefault().CreateWithQuotaProject(projectId);

       var options = new AppOptions
       {
           Credential = credential,
           ProjectId = projectId,
           HttpClientFactory = _httpClientFactory
       };

       return FirebaseApp.Create(options, key);
   });

   return FirebaseMessaging.GetMessaging(app);
}

With the value returned by the previous method, we send a message using the following code:

var messageId = await messaging.SendAsync(message, cancellationToken);

but we sometimes get the following error:

System.InvalidOperationException: x-goog-user-project header can only be added through the credential or through the <Product>ClientBuilder.
   at Google.Apis.Http.ConfigurableMessageHandler.CheckValidAfterInterceptors(HttpRequestMessage request)
   at Google.Apis.Http.ConfigurableMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at FirebaseAdmin.Util.ErrorHandlingHttpClient`1.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at FirebaseAdmin.Util.ErrorHandlingHttpClient`1.SendAndReadAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at FirebaseAdmin.Util.ErrorHandlingHttpClient`1.SendAndDeserializeAsync[TResult](HttpRequestMessage request, CancellationToken cancellationToken)
   at FirebaseAdmin.Messaging.FirebaseMessagingClient.SendAsync(Message message, Boolean dryRun, CancellationToken cancellationToken)
   at FirebaseAdmin.Messaging.FirebaseMessaging.SendAsync(Message message, Boolean dryRun, CancellationToken cancellationToken)
   at FirebaseAdmin.Messaging.FirebaseMessaging.SendAsync(Message message, CancellationToken cancellationToken)
   at Campaigns.Data.Clients.PushNotificationClient.SendPushNotificationAsync(SendPushNotification pushNotification, CancellationToken cancellationToken) in /src/campaign/src/Campaigns.Data/Clients/PushNotificationClient.cs:line 33

I may be missing something, but the x-goog-user-project header is added automatically via the SDK.

Lingua principale
C#
Stelle
408
Fork
147
Merge medio
1g 3h
PR unite (30g)
10

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di firebase/firebase-admin-dotnet

Tutte le issue di firebase/firebase-admin-dotnet

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.