【问题标题】:Samples for the AndroidPublisher (V3) Google API Client Library for Java适用于 Java 的 AndroidPublisher (V3) Google API 客户端库的示例
【发布时间】:2020-01-01 23:42:33
【问题描述】:

我正在为我的安全后端服务器将 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

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

【问题讨论】:

    标签: java server google-api-client google-api-services-jobs


    【解决方案1】:

    添加以下依赖项

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

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

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

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

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

    【讨论】:

    • 有什么方法可以确认订阅吗?该文件声称有一个,但他们没有提供其他任何东西。我能找到的唯一一个是:purchasing.subscriptions().acknowledge(),这不起作用。
    • 如果您收到一个错误,表明您的项目未连接并且您确定它是,请尝试禁用和重新启用产品,在此领域中创建新产品或其他东西,它似乎会刷新东西谷歌结束。
    • 谢谢,这行得通。 +1 从控制台停用和激活应用内产品会导致错误“当前用户没有足够的权限执行请求的操作。”走开?
    • 非常感谢这个例子,我可以确认它是有效的!如果出现权限不足错误,只需在应用产品中更改一个(例如描述),它会在 1-2 分钟后工作(无需等待 24 小时+)在另一个网站上找到该提示
    • 仅供参考 GoogleCredentials 可以在项目范围的设置中使用 googleapis.dev/java/google-auth-library/latest/com/google/auth/… - 我的首选是 GOOGLE_APPLICATION_CREDENTIALS 环境变量
    【解决方案2】:

    @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}")
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多