Observer mode

Observer mode allows you to use Purchasely alongside your existing in-app subscription flow.

This is a great way to:

  • Test Purchasely without changing your existing flow

  • Receive the Server-to-server notifications to trigger your automations

  • Connect our data with your marketing tools using our automations

  • Analyse your business with our great charts

  • and … smoothly migrate to Purchasely 🙂

Configure the SDK

Please instantiate Purchasely as soon as the app starts so that we can grab the receipts presented on app launch (PSD2, ask-to-buy, …).

Swift
Objective-C
Kotlin
Java
React Native
Swift
import Purchasely
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Purchasely.start(withAPIKey: "API_KEY", appUserId: "USER_ID", observerMode: true)
return true
}
Objective-C
#import <Purchasely/Purchasely-Swift.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[Purchasely startWithAPIKey:@"API_KEY"
appUserId:@"USER_ID"
observerMode:true
eventDelegate:nil
uiDelegate:nil
confirmPurchaseHandler:nil
logLevel: LogLevelInfo];
return YES;
}
Kotlin
import io.purchasely.ext.Purchasely
Purchasely.Builder(applicationContext)
.apiKey("API_KEY")
.logLevel(LogLevel.DEBUG) // set to warning or error for release
.userId("USER_ID")
.eventListener(eventListener)
.observerMode(true)
.stores(listOf(GoogleStore(), HuaweiStore()))
.build()
// When you are ready for Purchasely to initialize,
// you must call start() method that will grab configuration and products
// from the selected stores.
Purchasely.start()
Java
List<Store> stores = new ArrayList();
stores.add(new GoogleStore(), new HuaweiStore());
new Purchasely.Builder(getApplicationContext())
.apiKey("API_KEY")
.logLevel(LogLevel.DEBUG) // set to warning or error for release
.userId("USER_ID")
.eventListener(this)
.observerMode(true)
.stores(stores)
.build();
// When you are ready for Purchasely to initialize,
// you must call start() method that will grab configuration and products
// from the selected stores.
Purchasely.start();
React Native
import Purchasely from 'react-native-purchasely';
Purchasely.startWithAPIKey(
'API_KEY',
['Google'],
'USER_ID',
Purchasely.logLevelDebug,
true
);

If your user change within your app life cycle, please update Purchasely like that:

Swift
Objective-C
Kotlin
Java
React Native
Swift
Purchasely.userLogin(with: "123456789")
Objective-C
[Purchasely userLoginWith:@"123456789"];
Kotlin
Purchasely.userLogin("123456789") { refresh ->
if (refresh) {
//you can call your backend to refresh user information
}
}
Java
Purchasely.userLogin("123456789", refresh -> {
if(refresh) {
//you can call your backend to refresh user information
}
return null;
});
React Native
Purchasely.userLogin('DEMO_USER').then((refresh) => {
if (refresh) {
//call your backend to refresh user information
}
});

When a user logs out perform a:

Swift
Objective-C
Kotlin
Java
React Native
Swift
Purchasely.userLogout()
Objective-C
[Purchasely userLogout];
Kotlin
Purchasely.userLogout()
Java
Purchasely.userLogout();
React Native
Purchasely.userLogout();

Purchasely won't consume your purchases or acknowledge purchases made.

On iOS we won't finish the transaction of your consumables that will remain in the queue if you don't do that in your code.

On Android the transactions will be cancelled and refunded after 3 days.

Sync your purchases (Android only)

When a purchase or a restoration is made with your current flow, call the synchronize() method of our SDK to send the receipt to our backend. This allow us to save the receipts on our server to prepare for your migration.

Kotlin
Java
React Native
Kotlin
Purchasely.synchronize()
Java
Purchasely.synchronize();
React Native
Purchasely.synchronize();