首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AndroidPublisher (V3) Google客户端库的示例

AndroidPublisher (V3) Google客户端库的示例
EN

Stack Overflow用户
提问于 2019-08-28 17:44:07
回答 3查看 6.7K关注 0票数 5

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

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

  1. 使用客户端JSON构建客户端凭据。
  2. Get & Acknowledge使用PurchaseToken进行采购。

Maven设置:

代码语言:javascript
复制
<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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-15 11:01:47

添加下列依赖项

代码语言:javascript
复制
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中链接你的应用程序。

然后在代码中执行以下操作以获取订阅信息。

代码语言:javascript
复制
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控制台转到(具有管理权限):

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

Stack Overflow用户

发布于 2021-05-16 20:57:57

@Sabeeh答案有效。

下面是一个示例,说明如何使用kotlin中的令牌和产品id获取(服务器端)购买:

代码语言:javascript
复制
    suspend fun playstoreVerifier(productId: String, token: String) = withContext(Dispatchers.IO){
        androidPublisher.Purchases().products().get(PACKAGE_NAME, productId, token).execute()?.let {
            println("ack ${it.acknowledgementState}")
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2022-11-17 05:42:44

谷歌在这里的文档是可怕的,没有明确的实施例子。经过大量谷歌搜索,我终于找到了答案,这要归功于@Sabeeh的回答,还有很多其他片段散落在网上。

1.的第一步是添加依赖项:

代码语言:javascript
复制
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 release

2.跟随这些步骤将Google API链接到Google (选择“使用服务帐户”,而不是“使用OAuth客户端”,直到“其他信息”)。

3.从您的Google云服务帐户下载服务JSON文件(单击您在上一步中设置的帐户)。您可以在"Manage“操作或"Keys”选项卡下找到/创建此文件。在Android中的资产文件夹中添加导出的JSON文件

4.然后,您可以调用Google API来查询这样的订阅(从线程调用很重要,UI线程不工作,不确定原因):

代码语言:javascript
复制
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个小时才弄明白,我很高兴能拯救其他人的痛苦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57697597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档