firebase / firebase/firebase-admin-dotnet
Error when sending message using a quota project
- Dominant language
- C#
- Stars
- 408
- Forks
- 146
- Avg merge
- 22h 7m
- Merged PRs (30d)
- 1
Description
### [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 ClientBuilder.
at Google.Apis.Http.ConfigurableMessageHandler.CheckValidAfterInterceptors(HttpRequestMessage request)
at Google.Apis.Http.ConfigurableMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.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.
Contributor guide
Assessment
This issue has not been assessed yet.