Android In App Billing仅在Samsung标签10.1中崩溃

时间:2014-08-13 06:54:35

标签: android in-app-billing

当我测试In App Billing时,我遇到了一个非常奇怪的问题。该应用程序仅在三星标签10.1中崩溃,并显示以下错误消息,我完全不知道它有什么问题:

  

java.lang.IllegalArgumentException:com.d.b.a.b:Bad Base64输入字符为0:5(十进制)

   at com.test.iab.util.Security.verifyPurchase()
   at com.test.iab.util.Security.verifyPurchase()
   at com.test.iab.util.IabHelper.enableDebugLogging()
   at com.test.iab.util.IabHelper.enableDebugLogging()
   at com.test.iab.util.IabHelper.enableDebugLogging()
   at com.test.iab.util.IabHelper$2.run()
   at java.lang.Thread.run(Thread.java:856) Caused by: com.d.b.a.b: Bad Base64 input character at 0: 5(decimal)
   at com.test.iab.util.Base64.decode4to3()
   at com.test.iab.util.Base64.decode4to3()
   at com.test.iab.util.Base64.decode4to3()
   at com.test.iab.util.Security.verifyPurchase()
   at com.test.iab.util.Security.verifyPurchase()
   at com.test.iab.util.IabHelper.enableDebugLogging()
   at com.test.iab.util.IabHelper.enableDebugLogging()
   at com.test.iab.util.IabHelper.enableDebugLogging()
   at com.test.iab.util.IabHelper$2.run()
   at java.lang.Thread.run(Thread.java:856)

该应用程序适用于三星S4,HTC one和其他一些设备,但只在三星标签10.1中崩溃。有没有人遇到同样的问题?我在这里问的原因是因为我没有三星平板电脑进行调试。

修改

我没有发布源代码的原因是因为源代码来自谷歌,我不知道究竟哪个代码会导致问题。无论如何这里是可能与问题相关的代码:

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

1 个答案:

答案 0 :(得分:1)

您的问题与解码公钥(您从Google Play复制)有关。

我建议更改Google的代码,即功能:

public static byte[] decode(String s) throws Base64DecoderException {
    byte[] bytes = s.getBytes();
    return decode(bytes, 0, bytes.length);
}

这里的弱点是getBytes(),它应该将Base64编码的字符串转换为字节数组。 getBytes()正在使用默认系统字符集,适用于所有Android设备的是UTF-8。

Probably there's a bug in Galaxy Tab 10.1 related to default charset。请尝试使用明确的字符集UTF-8,如:

byte[] bytes = s.getBytes("UTF-8");