如何获得购买。订阅: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()
}