У меня есть приложение в магазине приложений Google, и я настроил уведомления разработчиков Google в реальном времени для вызова конечной точки моего API, когда что-то меняется в любой подписке.
API вызывается правильно, и (согласно документации) я получаю имя пакета, идентификатор подписки и токен.
Дальше я хочу вызвать Purchases.subscriptions.get, чтобы получить дополнительную информацию о моей подписке.
Я пробовал много чего, но сейчас пытаюсь использовать пакет Google.Apis.AndroidPublisher.V3
nuget.
Это мой текущий код:
var googleCredentials = await GoogleCredential.FromFileAsync(filePath, cancellationToken);
var service = new AndroidPublisherService(
new BaseClientService.Initializer
{
HttpClientInitializer = googleCredentials,
ApplicationName = appname
});
var credentials = googleCredentials.UnderlyingCredential as ServiceAccountCredential;
var oauthToken = await credentials.GetAccessTokenForRequestAsync(AndroidPublisherService.Scope.Androidpublisher);
var request = new PurchasesResource.SubscriptionsResource.GetRequest(service, packageName, subscriptionId, token);
request.OauthToken = oauthToken;
var subscriptionPurchase = await request.ExecuteAsync(cancellationToken);
Я могу получить токен доступа из GetAccessTokenForRequestAsync, но получаю ошибку 401 при выполнении «SubscriptionsResource.GetRequest». (даже удалив часть о получении oauthToken, я получаю ту же ошибку)
Я получаю следующую ошибку:
The service androidpublisher has thrown an exception. HttpStatusCode is Unauthorized. Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Я смог заставить это работать.
Мне нужно:
AndroidPublisherService.Scope.Androidpublisher
Это окончательный код:
var googleCredentials = await GoogleCredential.FromFileAsync(filePath, cancellationToken);
googleCredentials = googleCredentials.CreateScoped(AndroidPublisherService.Scope.Androidpublisher);
var service = new AndroidPublisherService(new BaseClientService.Initializer
{
HttpClientInitializer = googleCredentials,
ApplicationName = appname
});
var request = new PurchasesResource.SubscriptionsResource.GetRequest(service, packageName, subscriptionId, token);
var subscriptionPurchase = await request.ExecuteAsync(cancellationToken);