为了我的安全后端服务器,我正在将AndroidPublisher库从v1升级到v3。AndroidPublisher库(v3)将允许我安全地进行服务器端购买、验证和确认应用程序内的购买和订阅。
v1的现有代码不再兼容。v3库看起来更好,但我找不到用于以下方面的任何示例代码:
Get & Acknowledge使用PurchaseToken进行采购。Maven设置:
<project>
<dependencies>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-androidpublisher</artifactId>
<version>v3-rev103-1.25.0</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.30.2</version>
</dependency>
</dependencies>
</project>API文档:https://developers.google.com/android-publisher/api-ref/purchases/products/get
寻找像这样的示例:https://developers.google.com/api-client-library/java/google-api-java-client/samples
任何简短的示例代码都会有很大帮助。
发布于 2019-09-15 11:01:47
添加下列依赖项
compile "com.google.apis:google-api-services-androidpublisher:v3-rev103-1.25.0"
compile "com.google.auth:google-auth-library-oauth2-http:0.17.1"然后从Google控制台这里启用Google Api库
在凭据中使用角色Pub/Sub Admin创建服务帐户密钥并保存json文件。
在Google中,开发人员控制着这里。在Settings >> Developer Account >> API Access中链接你的应用程序。
然后在代码中执行以下操作以获取订阅信息。
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("<service-account-key-file>.json")).createScoped(AndroidPublisherScopes.ANDROIDPUBLISHER);
AndroidPublisher pub = new AndroidPublisher.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
JacksonFactory.getDefaultInstance(),
new HttpCredentialsAdapter(credentials)
).setApplicationName("<app-name>").build();
SubscriptionPurchase purchase = pub.purchases().subscriptions().get(
"<app-package>",
"<subscription-id>",
"<purchase-token>"
).execute();
println(purchase);注意:如果收到此错误:
当前用户没有足够的权限来执行请求的操作。
然后在一天后再试一次,因为在启用google api并从google控制台创建服务帐户密钥之后,您需要等待24到48小时,并执行以下操作
从Google控制台转到(具有管理权限):
发布于 2021-05-16 20:57:57
@Sabeeh答案有效。
下面是一个示例,说明如何使用kotlin中的令牌和产品id获取(服务器端)购买:
suspend fun playstoreVerifier(productId: String, token: String) = withContext(Dispatchers.IO){
androidPublisher.Purchases().products().get(PACKAGE_NAME, productId, token).execute()?.let {
println("ack ${it.acknowledgementState}")
}
}发布于 2022-11-17 05:42:44
谷歌在这里的文档是可怕的,没有明确的实施例子。经过大量谷歌搜索,我终于找到了答案,这要归功于@Sabeeh的回答,还有很多其他片段散落在网上。
1.的第一步是添加依赖项:
implementation "com.google.apis:google-api-services-androidpublisher:v3-rev142-1.25.0" // Update based on latest release
implementation "com.google.auth:google-auth-library-oauth2-http:1.12.1" // Update based on latest release2.跟随这些步骤将Google API链接到Google (选择“使用服务帐户”,而不是“使用OAuth客户端”,直到“其他信息”)。
3.从您的Google云服务帐户下载服务JSON文件(单击您在上一步中设置的帐户)。您可以在"Manage“操作或"Keys”选项卡下找到/创建此文件。在Android中的资产文件夹中添加导出的JSON文件
4.然后,您可以调用Google API来查询这样的订阅(从线程调用很重要,UI线程不工作,不确定原因):
new Thread(() -> {
InputStream inputStream = context.getAssets().open("service_account_google_play.json"); // JSON file from step 3
GoogleCredentials credentials = GoogleCredentials.fromStream(inputStream)
.createScoped(AndroidPublisherScopes.ANDROIDPUBLISHER);
AndroidPublisher androidPublisher = new AndroidPublisher(
new NetHttpTransport(),
JacksonFactory.getDefaultInstance(),
new HttpCredentialsAdapter(credentials)
);
SubscriptionPurchase purchase = androidPublisher.purchases().subscriptions().get(
context.getPackageName(), subscriptionId, purchaseToken
).execute();
// Do with the purchase object what you want here
}).start();尽管可能过于描述性,但subscriptionId是您在播放控制台中订阅的ID (例如,subscription_monthly或您所称的任何名称),而purchaseToken是在查询BillingClient之后从购买令牌获得的令牌(查询订阅将详细说明这里)。
如果有什么事情不清楚或者还不起作用,请告诉我。我花了6个小时才弄明白,我很高兴能拯救其他人的痛苦。
https://stackoverflow.com/questions/57697597
复制相似问题