đź› In order for us to provide optimal support, we would kindly ask you to submit any issues to [email protected]
When submitting an issue please specify your AppsFlyer sign-up (account) email , your app ID , production steps, logs, code snippets and any additional relevant information.
- This Module is Built for
- Adding The Connector To Your Project via Cocoapods
- Basic Integration Of The Connector
- Testing the implementation in Sandbox
- Full Code Examples
- iOS version 9 and higher.
- iOS AppsFlyer SDK 6.8.0 and higher.
Add to your Podfile and run pod install
:
pod 'PurchaseConnector'
Note: before the implementation of the Purchase connector, please make sure to set up AppsFlyer
appId
anddevKey
- Swift
// Import the library
import AppsFlyerLib
import StoreKit
import PurchaseConnector
// Default SDK Implementation
AppsFlyerLib.shared().appsFlyerDevKey = "DEV_KEY"
AppsFlyerLib.shared().appleAppID = "APPLE_APP_ID"
//AppsFlyerLib.shared().isDebug = true
// Purchase connector implementation
PurchaseConnector.shared().purchaseRevenueDelegate = self
PurchaseConnector.shared().purchaseRevenueDataSource = self
- Objective-C
// Import the library
#import "AppDelegate.h"
#import <AppsFlyerLib/AppsFLyerLib.h>
#import <PurchaseConnector/PurchaseConnector.h>
// Default SDK implementation
[[AppsFlyerLib shared] setAppleAppID:@"APPLE_APP_ID"];
[[AppsFlyerLib shared] setAppsFlyerDevKey:@"DEV_KEY"];
//[[AppsFlyerLib shared] setIsDebug:YES];
// Purchase Connecor implementation
[[PurchaseConnector shared] setPurchaseRevenueDelegate:self];
[[PurchaseConnector shared] setPurchaseRevenueDataSource:self];
Enables automatic logging of In-App purchases and Auto-renewable subscriptions.
- Swift
PurchaseConnector.shared().autoLogPurchaseRevenue = [.autoRenewableSubscriptions, .inAppPurchases]
- Objective-C
[[PurchaseConnector shared] setAutoLogPurchaseRevenue:AFSDKAutoLogPurchaseRevenueOptionsRenewable | AFSDKAutoLogPurchaseRevenueOptionsInAppPurchases];
Note: if
autoLogPurchaseRevenue
has not been set, it is disabled by default. The value is an option set, so you can choose what kind of user purchases you want to observe.
- In order to receive purchase validation event callbacks, you should conform to and implement
PurchaseRevenueDelegate
(Swift) orAppsFlyerPurchaseRevenueDelegate
(Objc-C) protocol. - To be able to add your custom parameters to the purchase event, that Connector sends, please conform to and implement
PurchaseRevenueDataSource
(Swift) orAppsFlyerPurchaseRevenueDataSource
(Obj-C) protocol.
- Swift
extension AppDelegate: PurchaseRevenueDataSource, PurchaseRevenueDelegate {
// PurchaseRevenueDelegate method implementation
func didReceivePurchaseRevenueValidationInfo(_ validationInfo: [AnyHashable : Any]?, error: Error?) {
print("PurchaseRevenueDelegate: \(validationInfo)")
print("PurchaseRevenueDelegate: \(error)")
// process validationInfo here
}
// PurchaseRevenueDataSource method implementation
func purchaseRevenueAdditionalParameters(for products: Set<SKProduct>, transactions: Set<SKPaymentTransaction>?) -> [AnyHashable : Any]? {
// Add additional parameters for SKTransactions here.
return ["additionalParameters":["param1":"value1", "param2":"value2"]];
}
}
- Objective-C
@interface AppDelegate () <AppsFlyerPurchaseRevenueDelegate, AppsFlyerPurchaseRevenueDataSource>
@end
@implementation AppDelegate
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[PurchaseConnector shared] startObservingTransactions];
[[AppsFlyerLib shared] start];
}
- (void)didReceivePurchaseRevenueValidationInfo:(NSDictionary *)validationInfo error:(NSError *)error {
NSLog(@"Validation info: %@", validationInfo);
NSLog(@"Error: %@", error);
// Process validation info
}
- (NSDictionary *)purchaseRevenueAdditionalParametersForProducts:(NSSet<SKProduct *> *)products transactions:(NSSet<SKPaymentTransaction *> *)transactions {
return @{@"key1" : @"param1"};
}
@end
startObservingTransactions
should be called to start observing transactions.
- Swift
PurchaseConnector.shared().startObservingTransactions()
- Objective-C
[[PurchaseConnector shared] startObservingTransactions];
To stop observing transactions, you need to call stopObservingTransactions
.
- Swift
PurchaseConnector.shared().stopObservingTransactions()
- Objective-C
[[PurchaseConnector shared] stopObservingTransactions];
Note: if you called
stopObservingTransactions
API, you should setautoLogPurchaseRevenue
value before you callstartObservingTransactions
next time.
In order to test purchases in Xcode environment on a real device with TestFlight sandbox account, you need to set isSandbox
to true.
- Swift
PurchaseConnector.shared().isSandbox = true
- Objective-C
[[PurchaseConnector shared] setIsSandbox:YES];
*IMPORTANT NOTE: Before releasing your app to production please be sure to remove
isSandbox
or set it tofalse
. If the production purchase event will be sent in sandbox mode, your event will not be validated properly! *
import AppsFlyerLib
import StoreKit
import PurchaseConnector
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ _: UIApplication, didFinishLaunchingWithOptions _: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Default SDK Implementation
AppsFlyerLib.shared().appsFlyerDevKey = "DEV_KEY"
AppsFlyerLib.shared().appleAppID = "APLE_APP_ID"
// AppsFlyerLib.shared().isDebug = true
// Purchase Connector implementation
PurchaseConnector.shared().isSandbox = true
PurchaseConnector.shared().purchaseRevenueDelegate = self
PurchaseConnector.shared().purchaseRevenueDataSource = self
PurchaseConnector.shared().autoLogPurchaseRevenue = .renewable
}
func applicationDidBecomeActive(_ application: UIApplication) {
PurchaseConnector.shared().startObservingTransactions()
AppsFlyerLib.shared().start()
}
}
extension AppDelegate: PurchaseRevenueDataSource, PurchaseRevenueDelegate {
// PurchaseRevenueDelegate method implementation
func didReceivePurchaseRevenueValidationInfo(_ validationInfo: [AnyHashable : Any]?, error: Error?) {
print("PurchaseRevenueDelegate: \(validationInfo)")
print("PurchaseRevenueDelegate: \(error)")
// process validationInfo here
}
// PurchaseRevenueDataSource method implementation
func purchaseRevenueAdditionalParameters(for products: Set<SKProduct>, transactions: Set<SKPaymentTransaction>?) -> [AnyHashable : Any]? {
// Add additional parameters for SKTransactions here.
return ["additionalParameters":["param1":"value1", "param2":"value2"]];
}
}
#import "AppDelegate.h"
#import <PurchaseConnector/PurchaseConnector.h>
#import <AppsFlyerLib/AppsFLyerLib.h>
@interface AppDelegate () <AppsFlyerPurchaseRevenueDelegate, AppsFlyerPurchaseRevenueDataSource>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set up AppsFlyerLib first
[[AppsFlyerLib shared] setAppleAppID:@"APPLE_APP_ID"];
[[AppsFlyerLib shared] setAppsFlyerDevKey:@"DEV_KEY"];
// [[AppsFlyerLib shared] setIsDebug:YES];
// Set up PurchaseConnector
[[PurchaseConnector shared] startObservingTransactions];
[[PurchaseConnector shared] setIsSandbox:YES];
[[PurchaseConnector shared] setPurchaseRevenueDelegate:self];
[[PurchaseConnector shared] setPurchaseRevenueDataSource:self];
[[PurchaseConnector shared] setAutoLogPurchaseRevenue:AFSDKAutoLogPurchaseRevenueOptionsRenewable];
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[PurchaseConnector shared] startObservingTransactions];
[[AppsFlyerLib shared] start];
}
- (void)didReceivePurchaseRevenueValidationInfo:(NSDictionary *)validationInfo error:(NSError *)error {
NSLog(@"Validation info: %@", validationInfo);
NSLog(@"Error: %@", error);
// Process validation info
}
- (NSDictionary *)purchaseRevenueAdditionalParametersForProducts:(NSSet<SKProduct *> *)products transactions:(NSSet<SKPaymentTransaction *> *)transactions {
return @{@"key1" : @"param1"};
}
@end