Revenue Analytics iOS Integration

Within iOS, Revenue Analytics transactions are logged with a method in the Flurry SDK that takes the SKPaymentTransaction object as a parameter and from that, parses out all required information. This means that you do not need to provide individual parameters for things such as productId or currency. In addition, this method gets all the necessary information to support Receipt Validation (see below).

Integration Examples:

  1. Before your start, you can see the overview of the Apple in app purchase service. Register your in-app-purchaser products in iTunes Connect. Here is the tutorial. Make notes on all your product identifiers.

  2. Add a in-app-purchase capability in your xcode.

  3. Send a request to App Store to get information on the products.

  1. App Store return product information.

  1. Display product details to the user.

Use this SKProduct class to retrieve product information such as title, description and price.

  1. Send a payment request to App Store once user select a product to purchase.

  1. Register self as a PaymentTransactionObserver.

  1. App Store processes the payment and call registered observer.

iOS Receipt Verification

For transactions executed with the Apple AppStore, Revenue Analytics will perform a Server Side Receipt Validation in order to determine the validity of the transaction. You can read about the process of Receipt Validation in the Apple Developer Documentation. Flurry performs what is described in that document as a Local Validation. This is done on our servers to ensure the process is not tampered with.


As part of validation, each transaction receives a Transaction Validation State. The possible states are as follows:

  • Valid - The transaction was successfully determined to be valid.

  • Unknown - The transaction validation state could not be determined.

  • No Receipt - No receipt was available for validation.

  • Receipt Parsing Failed - The receipt provided could not be parsed.

  • Bundle Id Mismatch - The Bundle Id of the receipt doesn’t match the app (iOS)

  • App Version Mismatch - The App Version of the receipt doesn’t match the app (iOS)

  • IDFV Hash Mismatch - The receipt hash of IdentifierForVendor, bundleId and an opaque value does not match with the IdenfierForVendor and BundleId collected from the device (iOS)

  • No Matching Transaction - The receipt contained no transaction with the id of the purchase reported.

  • No Certificate Path Found - There was no certificate path found between Apple root cert and the signing certificate (iOS)

  • Receipt Certificate Path Not Size Two - There were not two certificates in the chain signing the receipt before the Apple root certificate (iOS)

  • Certificate Path Not Valid - The certificate path from the Apple root certificate and the signing certificate was not valid.

  • Receipt Signing Certificate Missing OID - The certificate used in signing the receipt was missing the expected OID (iOS)

  • Receipt Intermediate Certificate Missing OID - The intermediate certificate the receipt was missing the expected OID (iOS)

  • Receipt Signature Verification Failed- The signature did not match the receipt (iOS) or purchase data (Google Play)

  • Receipt Validation Unexpected Error - An unexpected server error occurred during validation

  • Receipt Missing Creation Date - The receipt was missing a creationDate (iOS)

  • No IdentifierForVendor Available - No IdentifierForVendor was reported from the device. (iOS)

  • No Apple Root Certificate Available - The server was unable to locate the Apple root certificate (iOS)

  • No App License Key Available - There was no Google Play License key available at the time of validation. See Entering Google Play License Key above. (Google Play)

  • App License Key Is Invalid - The Google Play License key entered into Flurry was not a valid RSA public key. See Entering Google Play License Key above for steps to check the key. (Google Play)

  • No Transaction ID Available - The reported purchase contained no transaction ID

For Revenue Analytics Reporting learn more at Revenue Analytics.