.NET 用户:我希望这个答案可以为某人省去很多悲伤。
正如@Christophe Fondacci 在 2015 年指出的那样,几年前公认的解决方案效果很好。
现在是2017 2020 年,这个过程变得更加容易和快捷。
我的用例是验证应用内订阅,我的移动应用将订阅购买信息发送到我的 RESTful 服务器,该服务器反过来联系 Google 以验证订阅购买。
该策略是创建一个代表您操作的服务帐户。
登录到您的Google Play 开发控制台并单击您正在设置的应用程序。
访问设置-> API 访问
在Service Accounts下,点击Create Service Account按钮。
截至 2017 年 1 月,将出现一个对话框,其中包含有关设置服务帐户的说明。该对话框会将您带到 Google API 控制台;从那里,
A) 单击创建服务帐户
B) 创建有意义的服务帐户名称。由于我们有兴趣访问 Android Publisher Services,因此我选择了“publisher”。
C) 对于角色,只需选择一些内容 - 您可以稍后更改。
D) 选择“提供新的私钥”并为 .Net 实现选择 P12。不要丢失此文件!
现在您已完成 #4,您将看到列出的新服务帐户;单击“授予访问权限”以启用它。
点击“查看权限”链接。您应该根据您的需要和 API 修改权限。
要验证应用内购买,请访问 Cog->Change Permissions 并启用全球“可见性”和“管理订单”权限。
好的,此时您已经在 Google 端配置了所有内容。现在将您的服务器设置为服务器的东西。我建议创建一个 .Net 控制台应用程序来测试您的实现,然后在需要的地方卸载它。
- 从 Nuget [1]添加 Android Publisher 客户端库
PM> Install-Package Google.Apis.AndroidPublisher.v3
将 P12 文件添加到项目根目录
更改 P12 属性,使“构建操作”为“内容”,“复制到输出目录”为“如果较新则复制”。
实现这样的东西来测试你的访问和微调[1]。
using System.Threading.Tasks;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Services;
using Google.Apis.Auth.OAuth2;
using Google.Apis.AndroidPublisher.v3;
...
public Task<SubscriptionPurchase> GetSubscriptionPurchase(string packageName, string productId, string purchaseToken)
{
var certificate = new X509Certificate2(
"{{your p12 file name}}",
"{{ your p12 secret }}",
X509KeyStorageFlags.Exportable
);
var credentials = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer("{{ your service account email }}")
{
Scopes = new[] { AndroidPublisherService.Scope.Androidpublisher }
}.FromCertificate(certificate));
var service = new AndroidPublisherService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "my server app name",
});
return service.Purchases.Subscriptions.Get(packageName, productId, purchaseToken).ExecuteAsync();
}
祝你好运,希望这对某人有所帮助。
资料来源:
将 OAuth 2.0 用于服务器到服务器应用程序
适用于 Google.Apis.AndroidPublisher.v3 的 .Net 客户端库[1]
1
更新于 2020 年 4 月 11 日 - Google.Apis.AndroidPublisher.v2 EOL'd,使用 Google.Apis.AndroidPublisher.v3。