3

我正在为我的安全后端服务器将 AndroidPublisher 库从 v1 升级到 v3。AndroidPublisher 库 (v3) 将允许我安全地进行服务器端购买验证和确认应用内购买和订阅。

v1 的现有代码不再兼容。v3 库看起来更好,但我找不到任何示例代码:

  1. 使用客户端 JSON 构建客户端凭据。
  2. 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

任何简短的示例代码都会有很大帮助。

4

2 回答 2

18

添加以下依赖项

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 Cloud Console 启用 Google Developer Play Api 库

在凭据中创建具有角色的服务帐户密钥Pub/Sub Admin并保存 json 文件

在谷歌开发者控制台这里。在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 play developer api 并从 google 控制台创建服务帐户密钥后,您需要等待 24 到 48 小时并执行以下操作

从 Google Play 控制台转到(具有管理员访问权限):

  1. 设置(左面板) 开发者帐户(左面板) 用户和权限(左面板)
  2. 单击邀请新用户按钮。
  3. 输入服务帐户电子邮件(与您使用的 json 文件中的电子邮件相同,以及创建服务帐户时 google 生成的电子邮件)
  4. 在角色下拉菜单中选择管理员。
  5. 点击发送邀请
于 2019-09-15T11:01:47.920 回答
0

@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}")
        }
    }
于 2021-05-16T20:57:57.293 回答