페이스북-스마트폰게임개발자그룹 에서 도움을 얻어 업데이트. 하나용님에게 감사드립니다.
서버검증할거라면 클라이언트(앱)에서 publicKey는 필요가 없다.
위험
구글의 샘플코드에서 publicKey를 사용하는 부분들을 사용하지 않도록 수정해야 하는데, 코드상에는 두 군데가 있다.
int queryPurchases(Inventory inv, String itemType) throws JSONException, RemoteException
{
....
if (Security.verifyPurchase(mSignatureBase64, purchaseData, signature)) {
logDebug("Sku is owned: " + sku);
Purchase purchase = new Purchase(itemType, purchaseData, signature);
// Record ownership and token
inv.addPurchase(purchase);
}
else {
logWarn("Purchase signature verification **FAILED**. Not adding item.");
logDebug(" Purchase data: " + purchaseData);
logDebug(" Signature: " + signature);
verificationFailed = true;
}
....
아래 검증하는 부분도 단순하게 skip 한다.
public boolean handleActivityResult(int requestCode, int resultCode, Intent data) {
...
Purchase purchase = null;
try {
purchase = new Purchase(mPurchasingItemType, purchaseData, dataSignature);
String sku = purchase.getSku();
// Verify signature
// bisuit_jump
/*
if (!Security.verifyPurchase(mSignatureBase64, purchaseData, dataSignature)) {
logError("Purchase signature verification FAILED for sku " + sku);
result = new IabResult(IABHELPER_VERIFICATION_FAILED, "Signature verification failed for sku " + sku);
if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, purchase);
return true;
}
*/
logDebug("Purchase signature successfully verified.");
...
이렇게 하면, publicKey를 클라이언트에 두지 않으면서 영수증을 서버로 보내 전적으로 서버에 검증을 맡길 수 있다.
댓글 없음:
댓글 쓰기