.NET 用户:我希望这个答案能帮别人省很多事。
正如@Christophe Fondacci 在 2015 年指出的那样,公认的解决方案在几年前效果很好。
现在是 2017 年 2020 年,这个过程更容易和更快。
我的用例是验证应用内订阅,我的移动应用将订阅购买信息发送到我的 RESTful 服务器,然后它会联系 Google 以验证订阅购买。
策略是创建一个代表您操作的服务帐户。
-
登录您的Google Play Dev Console 并点击您正在设置的应用程序。
-
访问设置->API访问
-
在服务帐户下,点击创建服务帐户按钮。
-
自 2017 年 1 月起,将出现一个对话框,其中包含有关设置服务帐户的说明。该对话框会将您带到 Google API 控制台;从那里,
A) 点击创建服务帐户
B) 创建有意义的服务帐户名称。由于我们有兴趣访问 Android Publisher Services,因此我选择了“publisher”。
C) 对于角色,只需选择一些内容 - 您可以稍后更改。
D) 为 .Net 实现选择“提供新的私钥”并选择 P12。不要丢失此文件!
-
现在您已完成 #4,您将看到列出的新服务帐户;单击“授予访问权限”以启用它。
-
点击“查看权限”链接。您应该根据自己的需要和 API 修改权限。
要验证应用内购买,请访问 Cog->更改权限并启用全球“可见性”和“管理订单”权限。
好的,此时您已经在 Google 端配置了所有内容。现在将您的服务器设置为服务器的东西。我建议创建
一个 .Net 控制台应用程序来测试您的实现,然后在需要的地方卸载它。
- 从 Nuget 添加 Android Publisher 客户端库[1]
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();
}
祝你好运,希望这对某人有所帮助。
来源:
Using OAuth 2.0 for Server to Server Applications
.Net Client Library for Google.Apis.AndroidPublisher.v3[1]
1
2020 年 4 月 11 日更新 - Google.Apis.AndroidPublisher.v2 EOL'd,使用 Google.Apis.AndroidPublisher.v3。