如何获得购买。订阅:Android中的详细信息

如何获得购买。订阅:Android中的详细信息,android,in-app-billing,subscription,Android,In App Billing,Subscription,我在我的移动应用中实现了应用内计费。它使用自动续订订阅。我想通过应用程序查看订阅到期日。我找到此链接以检查订阅详细信息: 文件显示需要一些授权。我试过了,但没能得到结果。我得到了client secret.json文件,但它不包含客户机密Id。因此,请帮助我获取订阅到期日期。我的答案很晚,但可能对其他人有所帮助。请看我的回答: 以下是手动操作的步骤: 1.)使用以下链接在Google API中的OAuth2配置中创建凭据: 2.)转到开发者API控制台。如果第一步做得正确,结果应该如下所示:

我在我的移动应用中实现了应用内计费。它使用自动续订订阅。我想通过应用程序查看订阅到期日。我找到此链接以检查订阅详细信息:


文件显示需要一些授权。我试过了,但没能得到结果。我得到了client secret.json文件,但它不包含客户机密Id。因此,请帮助我获取订阅到期日期。

我的答案很晚,但可能对其他人有所帮助。请看我的回答:

以下是手动操作的步骤:

1.)使用以下链接在Google API中的OAuth2配置中创建凭据:

2.)转到开发者API控制台。如果第一步做得正确,结果应该如下所示:

3.)转到Google Play开发者控制台->所有应用->设置->API访问,并链接在开发者API控制台中定义的项目(步骤2,左上角的黑色条)。(如果您无法在Google Play中链接您的项目,因为您没有找到一些,那么您将使用不同的Google帐户来创建Google开发者API和Google Play开发者控制台。)

4.)使用回调url调用以下链接:
My/oauth2callback脚本是一个简单的php脚本。(这不是安全生产。这只是为了举例说明):

oauth2callback.php

<?php
print_r($_REQUEST);
?>
(当您从步骤2在开发人员控制台中单击OAuth2客户机ID的Web客户机ID时,可以找到客户机机密)

结果如下所示:

{
    "access_token": "ya29.GdsCBbnM584k3SUzoxDgIdaY26pEM_p_AdhkIkFq3tsai8U7x8DuFKq3WEF7KquxkdLO89KHpuUFdJOgkhpGbGyDfxkD32bK1ncnsu2IkA0e_5ZayOEr86u4A1IN",
    "expires_in": 3600,
    "refresh_token": "1/U5HF1m0nHQwZaF2-X35f_xyFaSOofdw3SEubnkkYUQ0",
    "token_type": "Bearer"
}
7.)调用Google Developer API请求需要访问令牌,例如:

8.)访问令牌很快过期。通过刷新,您可以使用以下url和标头获取新的访问令牌: 发布

结果:

{
    "access_token": "ya29.GlsCBZuN7hYJILi5VaVggIsCIb1_5feGvcjvQFmJRnPYXsnhsi_w3Md87tQwGd_WXmifo4s5739c3IU5INPmby8q64k0LdDFkO2JpNRG13K9sizvU1Sc-3cWzbf8",
    "expires_in": 3600,
    "token_type": "Bearer"
}

提示(1):如果您没有从步骤6的请求中获得刷新令牌,请将以下查询参数附加到您的请求:
prompt=approve
我对此也有点挣扎,但至少我找到了需要做的事情

谷歌提供了一个android库,可以用来访问API

以下是Kotlin代码示例:

import com.google.api.client.http.apache.ApacheHttpTransport
import com.google.api.client.json.jackson2.JacksonFactory
import com.google.api.services.androidpublisher.AndroidPublisher
...

fun retrieveSubscriptionInfo(sku: String) {

   val packageName = ""
   val sku = ""
   val purchasedSubscriptionToken = ""

   val apacheHttpTransport = ApacheHttpTransport()
   val jacksonJsonFactory = JacksonFactory.getDefaultInstance()

   val AndroidPublisher.Builder(apbacheHttpTransport, jacksonJsonFactory, null).build()

   val request = publisher.Purchases().subscriptions().get(packageName, sku, purchasedSubscriptionToken);

   return request.execute()
}        
请注意,在执行上述代码之前,您必须首先授权
AndroidPublisher
。您必须请求用户权限才能查询
Purchase.Subscription.Get


希望这对您有所帮助。

您能告诉我如何授权Androidpublisher吗。我读了很多书,但有点困惑!提前感谢如何获取purchasedSubscriptionToken?购买时Google Play会返回该购买token。@NewestStackOverflowUser如何授权AndroidPublisher?你能简单介绍一下吗?@jayrathodrj据我所知,你需要实现谷歌的OAuth流。您可以查看这篇涉及该主题的文章:但请注意,该API通常用于后端服务,而不是android应用程序。为了支持android中的购买,您可以使用google提供的计费库,而无需实现授权流。
{
    "access_token": "ya29.GlsCBZuN7hYJILi5VaVggIsCIb1_5feGvcjvQFmJRnPYXsnhsi_w3Md87tQwGd_WXmifo4s5739c3IU5INPmby8q64k0LdDFkO2JpNRG13K9sizvU1Sc-3cWzbf8",
    "expires_in": 3600,
    "token_type": "Bearer"
}
implementation 'com.google.apis:google-api-services-androidpublisher:v3-rev74-1.25.0'
import com.google.api.client.http.apache.ApacheHttpTransport
import com.google.api.client.json.jackson2.JacksonFactory
import com.google.api.services.androidpublisher.AndroidPublisher
...

fun retrieveSubscriptionInfo(sku: String) {

   val packageName = ""
   val sku = ""
   val purchasedSubscriptionToken = ""

   val apacheHttpTransport = ApacheHttpTransport()
   val jacksonJsonFactory = JacksonFactory.getDefaultInstance()

   val AndroidPublisher.Builder(apbacheHttpTransport, jacksonJsonFactory, null).build()

   val request = publisher.Purchases().subscriptions().get(packageName, sku, purchasedSubscriptionToken);

   return request.execute()
}