我建立了一个android应用程序,向用户提供购买商品的能力,并且google购买对话框成功返回了付款,但是在活动结果中,该应用程序在Security.java验证方法中失败,总是返回false“ sig.verify( Based64.decode(signature))”。
任何帮助,为什么会发生,以及我必须做什么。
我已将应用发布到Play商店,但我不使用android.test。* sku,但我有自己的想法
最佳答案
您正确初始化了吗?
获取公钥:
public PublicKey getAPKKey(String keyFactoryAlgorithm) throws Exception{
byte[] decodedKey = Base64.decode("...your google play public key...", Base64.DEFAULT);
KeyFactory keyFactory = KeyFactory.getInstance(keyFactoryAlgorithm);
return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey));
}
您可以在Google Play开发者控制台中找到您的公钥。
然后验证签名:
// get purchase data
Bundle ownedItems = ... query purchases
String purchaseData = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST").get(0); // just index 0 for demonstration
String signature = ownedItems.getStringArrayList("INAPP_DATA_SIGNATURE_LIST").get(0); // just index 0 for demonstration
PublicKey pkey = getAPKKey("RSA");
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(pkey);
sig.update(purchaseData.getBytes());
if(sig.verify(Base64.decode(signature, Base64.DEFAULT))) {
// ok
} else {
// not ok
}