簡體   English   中英

Android帳單-使用Production / alpha / beta中購買的android.test.purchase測試購買

[英]Android billing - Testing purchases with android.test.purchased in production/alpha/beta

我正在使用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來說還可以)?

對於生產版本,此修改絕對不可行,因為它會禁用響應驗證。 如果攻擊者沒有提供base64PublicKeysignedDatasignature和測試sku您在代碼中有,那么你的應用程序將允許使用應用程式功能,在生產中實際上不為他們支付。

如果在DEBUG版本中,您想允許所有sku's ,只需刪除您的支票即可。 如果只想允許您的sku ,請使用&&運算符或以下代碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM