Android结算V3订阅问题 - 订阅处于无法取消的状态

时间:2015-10-25 18:04:16

标签: android in-app-billing subscription

更新

随着时间的推移,更多的故障排除表明我有一个特定的订阅,处于卡住状态,这意味着我无法取消它,这就是以某种方式导致所有问题。无论是在浏览器上还是在手机或平板电脑上试图取消它都会出现同样的错误:

error message

我尝试了三个帐户。没有这个旧订阅的两个新帐户对我的调试工作正常。我以前订阅此项目的主要帐户是问题发生的地方。所以如果我能以某种方式取消这个订阅,我会很好。

我总共有三个订阅项目。我可以在测试和常规帐户上轻松订阅和取消其他两个没有问题。但是,这个特别的,超过一年,我无法取消。这导致IabHelper查询中的所有错误。

如何取消它?不幸的是,由于一些神秘的原因,谷歌也不允许删除订阅项目。

我的单笔购买工作正常,但没有订阅。在过去的很多天里,我遇到了这个问题,我无法获取我的应用的订阅信息,但是它失败了:

if (result.isFailure()) {
            Log.v(Constants.TAG, "Failed to query inventory: " + result);
            return;
        }

我已经阅读了所有与应用内结算相关的帖子,并尝试了在我的应用的多个版本的多个设备,Alpha和生产版本上可以完成的一切,但无法摆脱这个错误:

Failed to query inventory: IabResult: Error refreshing inventory (querying owned subscriptions). (response: -1003:Purchase signature verification failed)

我理解空白签名的问题,但现在应用程序已在生产中发布,但在我的设备上安装时,我的日志中仍会出现相同的错误。所以我现在在Play商店中有一个生产应用程序,订阅不起作用。这是我希望获得签名价值的最后一个绝望的步骤。非常不幸的是,没有真正简单的方法来调试应用内代码。

在VerifyPurchases中,Security.java中的代码失败(这似乎是许多人失败的常见地方):

if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
            TextUtils.isEmpty(signature)) {
        Log.e(TAG, "Purchase verification failed: missing data.");
        return false;
    }

可悲的是,订阅的在线帮助几乎没有。我尝试了人们提出的其他代码,但无济于事。没有专门针对订阅的教程或示例。我能找到的所有答案都只针对单次购买。

我的base64密钥没问题。新的IabHelper初始化没问题。但是当它进入订阅查询时,它很可能会失败。这是日志:

Querying owned items, item type: subs
10-25 13:52:16.957 7850-7915/com.lifelog24.main D/IabHelper: Package name: com.lifelog24.main
10-25 13:52:16.957 7850-7915/com.lifelog24.main D/IabHelper: Calling getPurchases with continuation token: null
10-25 13:52:16.962 7850-7915/com.lifelog24.main D/IabHelper: Owned items response: 0
10-25 13:52:16.965 7850-7915/com.lifelog24.main E/IABUtil/Security: Purchase verification failed: missing data.
10-25 13:52:16.966 7850-7915/com.lifelog24.main W/IabHelper: In-app billing warning: Purchase signature verification **FAILED**. Not adding item.
10-25 13:52:16.966 7850-7915/com.lifelog24.main D/IabHelper:    Purchase data: 
10-25 13:52:16.966 7850-7915/com.lifelog24.main D/IabHelper:    Signature: 
10-25 13:52:16.984 7850-7915/com.lifelog24.main D/IabHelper: Sku is owned: bus04
10-25 13:52:16.985 7850-7915/com.lifelog24.main D/IabHelper: Continuation token: null
10-25 13:52:16.985 7850-7915/com.lifelog24.main D/IabHelper: Ending async operation: refresh inventory
10-25 13:52:16.993 7850-7850/com.lifelog24.main D/LL24: Query inventory finished.
10-25 13:52:16.993 7850-7850/com.lifelog24.main V/LL24: Failed to query inventory: IabResult: Error refreshing inventory (querying owned subscriptions). (response: -1003:Purchase signature verification failed)

目前我没有选择权,并且非常感谢能够解决这个问题的任何帮助。

2016年5月23日更新

我为Google开了一张故障单。有几周的来回电子邮件,并从一个代表跳到另一个代表,但这个问题无法解决。我的一个帐户陷入了无法从订阅中删除的状态。最后一位代表承认了这一点,并且围绕着提及Google In-App计费是一个复杂系统并且这些问题很难解决的问题。我想在一两年后尝试联系他们。我的开发受到了这个问题的严重影响,因为我没有从他们的最终获得正确的JSON消息来进行我的测试和调试。

2 个答案:

答案 0 :(得分:4)

我在In App billing not working after update - Google Store

找到了这个答案

它说新的verifyPurchase()代码被窃听,我相信。也许使用他们正在使用的旧代码会对您有所帮助。

public static boolean verifyPurchase(String base64PublicKey,
        String signedData, String signature) {

if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey)
            || TextUtils.isEmpty(signature)) {
    Log.e(TAG, "Purchase verification failed: missing data.");
        return false;
}

PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);}

答案 1 :(得分:4)

回答我自己的问题,我已经发现Google的主要帐户已经破坏了某些内容。一年多以前,我已经订阅了自己的订阅作为测试人员,不知何故,这个订阅陷入了一种我无法取消订阅的状态。这引起了所有麻烦。从任何其他帐户登录工作正常,我的代码行为完全符合我的要求。

此案例中唯一的解决方案是卸载应用,并从其他帐户安装。等到Google修复其破坏的应用内订阅功能。