Android结算 - 使用生产/ alpha / beta中的android.test.purchased测试购买

时间:2014-08-01 09:01:24

标签: java android testing in-app-purchase in-app-billing

我正在使用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),是否存在严重的安全问题?

1 个答案:

答案 0 :(得分:2)

对于生产版本,这种修改绝对不行,因为它会禁用响应验证。如果攻击者未在您的代码中提供base64PublicKeysignedDatasignature和测试sku,则您的应用将允许在生产中使用应用内功能实际上为他们买单。

如果在DEBUG版本中您想要允许所有sku's,请删除您的支票。如果您只想使用sku,请使用&&运算符或以下代码。

if (BuildConfig.DEBUG) {
    Log.e(TAG, "This was a test purchase");
    return "android.test.purchased".equals(sku);
}