我正在尝试使用 Google Publisher API 对我的 Android 应用程序的订阅进行后端升级/降级操作。
我在 Alpha 通道中发布了该应用程序,并让一些测试人员进行“测试”购买。在生成订阅的同一天,一切看起来都很好。我可以使用购买令牌查看有效数据,调用方法:
Purchases.Subscriptions.Get
Run Code Online (Sandbox Code Playgroud)
我的问题是,当“测试”订阅自动续订(第二天)时,看起来购买令牌不再可用,当我调用该方法时:
Purchases.Subscriptions.Get
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
购买令牌与包名称不匹配。[400]
看起来当“测试”订阅自动续订时,购买令牌也会发生变化。
我有一个订阅项目,介绍价格为 1 个周期。我可以通过getIntroductoryPrice()方法在应用程序中获取这个价格。购买完成后,我无法获得服务器端订阅支付的确切价格。特别是:
在应用程序方面,即使用户不符合条件(例如,他正在从全价订阅更改订阅),我从上面的电话中获得的“介绍价格”信息似乎是相同的。有没有办法查看用户实际支付的价格(从应用程序或服务器端?)
在服务器端,当我从服务器请求购买收据时,我得到了关于正常价格的信息,没有介绍价格,也没有用户实际支付的费用。
有什么方法可以让我获得有关用户实际为包含介绍期的订阅支付了多少费用的可靠信息?
android android-billing in-app-subscription android-inapp-purchase play-billing-library
我知道 Google 最近更新的测试订阅更新比平时更快,以帮助测试。例如:1 个月 - 5 分钟。https://android-developers.googleblog.com/2018/01/faster-renewals-for-test-subscriptions.html
我购买了一个订阅,一分钟内我取消了它,我等了 5 到 10 分钟,然后我查询了订阅,mBillingClient.queryPurchases("subs")但我仍然可以在结果中看到被取消的项目,购买状态为 0(已购买)。我尝试了多次,在 queryPurchases 之前有超过 10-15 分钟的间隔,但没有运气。
即使经过漫长的等待,我也不知道为什么取消的商品会显示在购买中。
后来我注意到如果我清除 Playstore 数据和缓存,一切都会暂时有效。1 小时后,如果我尝试购买它显示的相同产品Error retrieving information from server[RPC:S-7:AEC-500 NWDB-WFVV-ZPAXE]
这是我们必须测试取消订阅的方式吗?如果我再次购买订阅,会出现什么错误?
鉴于我的服务器端点已收到与 Google In App Billing 购买相关的购买令牌,我该如何以编程方式对其进行验证并获得对其内容的访问权限?
我已经可以使用以下方法验证 Google登录令牌php
$client = new Google_Client(['client_id' => $client_id]);
$payload = $client->verifyIdToken($token);
if ($payload)
return $payload['sub'];
Run Code Online (Sandbox Code Playgroud)
但是我将如何使用Google_Client来验证购买令牌并访问其内容。
它真的只是GET像下面的 Ruby 示例一样将 a 发送到 Google 服务器的情况吗?
或者他们是Google_Client我应该调用的特定命令?
我开始认为这是在php使用中复制提到的 Ruby 代码OAuth2或其他东西的情况,因为 Google Docs 确实说一旦服务器拥有购买令牌:
使用 Google Play Developer API 的 Subscriptions 和 In-App Purchases 部分执行 GET 请求以从 Google Play 检索购买详细信息(Purchases.products 用于一次性产品购买或 Purchases.subscriptions 用于订阅)。GET 请求包括应用程序包名称、产品 ID 和令牌(购买令牌)。
如果可能的话只是想澄清一下?谢谢。
问题:使用 Google Play BillingClient 1.1 我怎样才能只获得未消费的购买?
背景:
在我们的 Android 应用程序中,我们希望使用新的
com.android.billingclient:billing:1.1
Run Code Online (Sandbox Code Playgroud)
这个想法是使用
BillingClient.queryPurchases(BillingClient.SkuType.INAPP)
为了获得用户所做的所有购买的“历史”。这就是 API 所说的(https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#queryPurchases(java.lang.String))并且它工作正常。在旧版本中,您只会获得未消费的物品,这对于“购买历史”之类的东西是无用的。但是,如果我想知道是否有未消耗的物品,则无法再获得该信息。
对于queryPurchaseHistoryAsync().
Purchase 对象似乎不包含有关其消费的任何信息。我怎样才能只获得未消耗的物品(或至少过滤它们)?
请注意,我知道购买最终必须在我们的服务器端进行管理。但是,在此操作成功之前,最好知道哪个项目已被“兑换”(已消费)。所以我不能只依赖我们的后端。
- - 编辑 - -
来自查询的购买对象 (JSON) 都如下所示:
{
"orderId": "[Id]",
"packageName": "[just the app's package]",
"productId": "[the SKU name]",
"purchaseTime": 1531224460215,
"purchaseState": 0,
"purchaseToken": "[a purchase token]"
}
Run Code Online (Sandbox Code Playgroud)
所以没有什么似乎是消费状态。
---- 编辑 2 ----
我找到了一个(坏的)解决方案。当尝试消费购买时,谷歌用它的返回码告诉我它是否已经消费。但这对我们来说不是一个解决方案,因为我们希望将其“标记为未消费”,直到它在我们的服务器上被兑换。
android in-app-purchase in-app-billing android-inapp-purchase
我的应用程序是在大约 4-5 个月前发布的。我的应用内产品运行良好。突然间我无法添加或编辑新的应用内商品。它显示错误“请检查下面的列表是否有问题。” ,但列表中没有问题。任何帮助将不胜感激。
我正在开发一个允许用户使用 In App Purchase 购买的应用程序,我想在购买后删除广告。我可以使用下面的代码成功购买
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSku("android.test.purchased")
.setType(BillingClient.SkuType.INAPP)
.build();
mBillingClient.launchBillingFlow(getActivity(), flowParams);
Run Code Online (Sandbox Code Playgroud)
但是当我再次打开应用程序并在下面调用此方法时,我看不到 queryPurchaseHistoryAsync 的结果。
mBillingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP, new PurchaseHistoryResponseListener() {
@Override
public void onPurchaseHistoryResponse(int responseCode, List<Purchase> purchasesList) {
purchasesList.size();
}
});
Run Code Online (Sandbox Code Playgroud)
购买列表.大小()== 0
“queryPurchaseHistoryAsync”方法无法显示测试购买还是我做错了什么?
编辑:删除并再次安装应用程序后,queryPurchaseHistoryAsync 方法是否检查购买。
android in-app-purchase in-app-billing android-inapp-purchase
我正在使用 Google Play 结算库 v 4.0。有没有办法检索设备当前登录帐户的所有采购订单(采购历史记录)?我尝试过queryPurchaseHistoryAsync(String skuType, PurchaseHistoryResponseListener listener)billingClient 和回调内的结果onPurchaseHistoryResponse(BillingResult billingResult, List<PurchaseHistoryRecord> purchaseHistoryRecordList),列表 - 有 10 个元素,但不是最新的。
在调用该函数之前,计费客户端已设置并startConnection()已被调用。
在文档中,据说 queryPurchaseHistoryAsync() “返回用户对每个 SKU 进行的最近购买,即使该购买已过期、取消或消耗。”
任何想法都会有用。:)
编辑:
queryPurchaseHistoryAsync() 返回每个 sku 的最后一次购买,因此它们是最新的,但对于每个产品而言。是否有机会像 Google Play 应用 -> 付款和订阅 -> 预算和历史记录那样获取历史记录?
android android-billing android-inapp-purchase play-billing-library
我正在将应用内购买功能添加到我的 Android 应用中。我在模拟器上尝试了以下行为:
android.test.purchased)queryPurchasesAsync()包含此购买再次调用时queryPurchasesAsync(),结果列表现在为空。这是正常的吗,因为我在模拟器上运行该应用程序?
感谢您的帮助
android in-app-purchase android-inapp-purchase billingclient
我正在将应用内购买添加到我的 Android 应用程序中。我已完成获取产品、向用户显示产品并启动购买流程的所有步骤。现在,我正在尝试测试它。为此,我在 Google Play Console 中向许可证测试人员添加了一个测试帐户。
当我开始购买流程时,我得到这个用户界面:
但是当我单击“一键购买”时,出现以下错误:
以下是我已经尝试过的一些事情:
知道什么可能导致这个问题吗?另外,如果您对我应该尝试的东西有任何建议,请告诉我,即使您不确定它们是否真的有效。