I have made a project with Unity (2019.4) in my project user can buy product with In App Purchase.
I used codeless IAP Manager and use receipt validation to validate purchases.
In android I've no problem. But in IOS jailbroken phone can buy product with fake payment
here is my code sample
public void OnPurchaseComplete(Product product)
{
var validator = new CrossPlatformValidator(GooglePlayTangle.Data(),
AppleTangle.Data(), Application.identifier);
bool ValidPurchase = false;
try
{
// On Google Play, result has a single product ID.
// On Apple stores, receipts contain multiple products.
var result = validator.Validate(product.receipt);
// For informational purposes, we list the receipt(s)
Debug.Log("Receipt is valid. Contents:");
foreach (IPurchaseReceipt productReceipt in result)
{
Debug.Log(productReceipt.productID);
Debug.Log(productReceipt.purchaseDate);
Debug.Log(productReceipt.transactionID);
GooglePlayReceipt google = productReceipt as GooglePlayReceipt;
if (null != google)
{
// This is Google's Order ID.
// Note that it is null when testing in the sandbox
// because Google's sandbox does not provide Order IDs.
ValidPurchase = true;
Debug.Log(" google transaction" + google.transactionID);
Debug.Log(" google transaction" + google.purchaseState);
Debug.Log(" google transaction" + google.purchaseToken);
}
AppleInAppPurchaseReceipt apple = productReceipt as AppleInAppPurchaseReceipt;
if (null != apple)
{
ValidPurchase = true;
Debug.Log(" apple transaction1" + apple.originalTransactionIdentifier);
Debug.Log(" apple transaction2" + apple.subscriptionExpirationDate);
Debug.Log(" apple transaction3" + apple.cancellationDate);
Debug.Log(" apple transaction4" + apple.quantity);
}
}
}
catch (IAPSecurityException)
{
Debug.Log("Invalid receipt, not unlocking content");
ValidPurchase = false;
}
//product.receipt;
if (ValidPurchase)
{
//successfull
}
}
What should I do to protect from jailbroken iPhone.