问题
购买后,再次进行请求时,报错。
(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()) 后边
- 运行下项目,就会把测试的购买消耗掉
- 回滚之前的操作