我正在使用 Google Play 计费 API (v3),并且正在使用 sku=android.test.purchased
测试应用内购买。为此,我修改了辅助类中的方法 Security.verifyPurchase
,如下所示:
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature, String sku) {
if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) || TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
if ("android.test.purchased".equals(sku) || BuildConfig.DEBUG) {
Log.e(TAG, "This was a test purchase");
return true;
}
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
我的代码与我发现的教程中的代码略有不同:我添加了这个:
"android.test.purchased".equals(sku)
最初,只添加了BuildConfig.DEBUG
的验证,但我需要让测试用户能够快速购买产品,而无需添加他们的支付数据。
我的问题是:如果我在我的生产应用程序中使用此代码(或者它只适用于 alpha/beta 版),是否会存在很大的安全问题?
最佳答案
这个修改对于生产版本肯定是不行的,因为它禁用了响应验证。如果攻击者没有提供 base64PublicKey
、signedData
、signature
和您在代码中的测试 sku
,那么您的应用程序将允许在生产中使用应用程序内功能而无需实际付费。
如果在 DEBUG 版本中您想要允许所有 sku 的
,只需删除您的检查。如果您只想允许您的 sku
,请使用 &&
运算符或以下代码。
if (BuildConfig.DEBUG) {
Log.e(TAG, "This was a test purchase");
return "android.test.purchased".equals(sku);
}
关于java - Android 计费 - 在 production/alpha/beta 中使用 android.test.purchased 测试购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076543/