Google 内购报错解决方式 (response: -1003:Purchase signature verification failed)

问题

购买后,再次进行请求时,报错。

 (response: -1003:Purchase signature verification failed)

原因

测试购买时,使用了android.test.purchased 进行购买。然后Security这个类,进行校验时通不过导致。

 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);
    }

verifyPurchase在第一个if判断中失败了。

解决方式

  • 先Security类的verifyPurchase方法,return false 改为true
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 true;
        }

        PublicKey key = Security.generatePublicKey(base64PublicKey);
        return Security.verify(key, signedData, signature);
    }
  • 在QueryInventoryFinishedListener类中,新增一个消耗操作
 if (inventory.hasPurchase("android.test.purchased")) {
                try {
                    mHelper.consumeAsync(inventory.getPurchase("android.test.purchased"),null);
                } catch (IabHelper.IabAsyncInProgressException e) {
                    e.printStackTrace();
                }
            }

代码放在if (result.isFailure()) 后边

  • 运行下项目,就会把测试的购买消耗掉
  • 回滚之前的操作

参考链接

猜你喜欢

转载自blog.csdn.net/qin_shi/article/details/80499041