gpt4 book ai didi

java - 谷歌 androidpublish api access_token

转载 作者:行者123 更新时间:2023-11-30 03:10:19 28 4
gpt4 key购买 nike

我正在开发一款支持 Google Play 应用内购买的 Android 应用。我还有一个在后台运行的服务器应用程序 (JAVA)。每当用户在应用程序中成功购买(购买正常)时,服务器应用程序应向 Google play 发送请求以验证购买。

Google Play 为此提供了 androidpublisher api:developers.google.com/android-publisher/getting_started

问题是 access_token。每当我获得新的 access_token(使用刷新或新 token 请求方法)时,如果我尝试使用 GET 方法从 Google Play 商店(https://developers.google.com/android-publisher/v1/purchases/get)的购买 inapp 项目中询问信息,它就不起作用-> 它总是导致错误 401(无效凭证)或 403(访问未配置)。

经过无数次尝试,我发现我只能使用该链接获得方法:https://developers.google.com/apis-explorer/#p/androidpublisher/v1.1/androidpublisher.inapppurchases.get ,我只能从那里读取 valid access_token ,并且只有使用该 token 我才能让我的服务器应用程序工作但只能运行一个小时,1 小时后我必须再次执行相同的步骤.. .

现在我真的需要一种正确的方法来为我的应用程序获取有效的 access_token

我在互联网上进行了很多研究,但找不到有用的东西。我知道我不是唯一遇到这个问题的人,也许你们中有人知道该怎么做或者已经有过这个问题

最佳答案

您可以使用 com.google.api-clientgoogle-api-services-androidpublisher 库。

首先转到谷歌开发者控制台上的项目(https://console.developers.google.com)

  • API 和授权 -> API
  • 启用“Google Play Android 开发者 API”
  • 转到凭据 -> 创建新的客户端 ID
  • 选择服务帐号
  • 创建客户 ID
  • 将 p12 文件保存在安全的地方

然后将刚刚为服务帐户生成的电子邮件地址添加到您的 google play 开发者控制台 (https://play.google.com/apps/publish/)

  • 设置 -> 用户帐户和权限 -> 邀请新用户
  • 粘贴 @developer.gserviceaccount.com 电子邮件帐户
  • 选择“查看财务报告”
  • 发送邀请

现在到代码。将以下依赖项添加到您的 pom.xml 文件中:

<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.18.0-rc</version>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-jackson2</artifactId>
<version>1.18.0-rc</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-androidpublisher</artifactId>
<version>v1.1-rev25-1.18.0-rc</version>
</dependency>

然后先验证签名:

byte[] decoded = BASE64DecoderStream.decode(KEY.getBytes());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(decoded));
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(publicKey);
sig.update(signedData.getBytes());
if (sig.verify(BASE64DecoderStream.decode(signature.getBytes())))
{
// Valid
}

如果签名验证获取订阅细节:

// fetch signature details from google
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(ACCOUNT_ID)
.setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/androidpublisher"))
.setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
.build();

AndroidPublisher pub = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential)
.setApplicationName(APPLICATION_NAME)
.build();
AndroidPublisher.Purchases.Get get = pub.purchases().get(
APPLICATION_NAME,
PRODUCT_ID,
token);
SubscriptionPurchase subscription = get.execute();
System.out.println(subscription.toPrettyString());

这将通过生成 JWT token 来解决所有 token 问题,因此您不必自己处理。

关于java - 谷歌 androidpublish api access_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21111518/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com