Observer Mode

If you have a purchase system and/or want to test Apphud without full integration, you can use Observer mode.

Observer Mode

If you are planning to use your own purchase code, consider integrating Apphud SDK in Observer (Analytics) mode. In this case you are responsible for displaying products, making purchases and finishing / acknowleding transactions, and Apphud SDK will only track successful purchases.


Important Note

Keep in mind, that you are responsible for acknowledging or consuming all purchases on Android, and finishing transactions on iOS while using Apphud SDK in Observer mode.

Apphud.start(apiKey: "YOUR_API_KEY", oserverMode: true)
[Apphud startWithApiKey:@"YOUR_API_KEY" userID:nil observerMode:YES];
// Initialization on Android doesn't differ
Apphud.start(this, "YOUR_API_KEY")
await Apphud.start(apiKey: "YOUR_API_KEY", observerMode: true);
await ApphudSdk.start({ apiKey: "YOUR_API_KEY", observerMode: true });


All you have to do is passing observerMode: true parameter when initializing SDK.
That is all you have to do with Apphud SDK on iOS.


Initialization on Android is the same as non-observer mode. See this guide for details.
However, you are responsible for submitting purchases to Apphud after successful purchase and restore.
To track successful purchase call:

Apphud.trackPurchase(purchase, details, paywallIdentifier)


Missing "trackPurchases" method?

Apphud.trackPurchases() method is new, so if your SDK version is missing it, consider calling Apphud.syncPurchases instead. Or update to the latest SDK version.

Next, when user taps on "Restore Purchases" button in your app's UI, consider calling syncPurchases method:

await Apphud.syncPurchases();
await ApphudSdk.syncPurchases();

Pass Obfuscated Account ID (Android)

It is highly recommended to set up obfuscatedAccountId in BillingFlowParams object:

val builder = BillingFlowParams.newBuilder().setSkuDetails(skuProduct)



Don't forget to set up the App Store / Google server notifications in Apphud settings in order to get real time updates.

Observer Mode vs Full Mode: Features Comparison

AdvantagesObserver ModeFull Mode
Paywalls managementNoYes
Experiments (A/B Tests)Yes***Yes
Rules (iOS)Yes**Yes**

* requires few more lines of code, like User ID Matching. See documentation of your integration.
** requires push notification handling. See here.
*** requires additional client functions.

A/B Experiments in Observer Mode

If you want to use A/B experiments while running SDK in Observer Mode you should manually send paywall identifier to Apphud using this method. See code example below regarding where to call this method.

// You must call this method right before your own purchase method.
// Your purchase flow
// Call this method with Paywall Identifier right after successful purchase
Apphud.trackPurchase(purchase, details, paywallIdentifier)  
// If trackPurchase is missing in your SDK version, update the SDK or call:
// Apphud.syncPurchases(paywallIdentifier: "your_paywall_identifier")
await Apphud.syncPurchases(paywallIdentifier: "main_paywall")