Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeiting/794f7090037451a1694c224e0eca5ba9 to your computer and use it in GitHub Desktop.
Save jeiting/794f7090037451a1694c224e0eca5ba9 to your computer and use it in GitHub Desktop.
Originator / Revenue Cat integration
/*
The main class in this file is the AnalyticsServiceWrapper. It handles any connections to analytics services we
use, such as Google Analytics, crash reporting, revenue reporting, etc., and of course Adjust and Revenue Cat. This
is fairly old code, which is why it's written as a C++ class that contains Objective-C calls.
*/
#import <AdSupport/ASIdentifierManager.h>
#import "Adjust.h"
#import "Purchases.h"
...
static RCPurchases *revCatPurchases;
...
// this is an Objective-C class that serves only to connect Adjust and Rev Cat, as the adjustDelegate.
@interface psdkAdjustToRevCatBridge : NSObject<AdjustDelegate>
@end
@implementation psdkAdjustToRevCatBridge
- (void) adjustAttributionChanged: (nullable ADJAttribution *) attribution {
NSDictionary *attributionData = attribution.dictionary;
if([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSUUID *IDFA = [[ASIdentifierManager sharedManager] advertisingIdentifier];
if (IDFA) {
NSMutableDictionary *newData = [NSMutableDictionary dictionaryWithDictionary:attributionData];
newData[@"rc_idfa"] = idfa;
attributionData = [NSDictionary dictionaryWithDictionary:newData];
}
}
[revCatPurchases addAttributionData: attributionData fromNetwork: RCAttributionNetworkAdjust];
}
@end
// we need to keep our own reference to this because Adjust only weakly retains it.
static psdkAdjustToRevCatBridge *adjustToRevCatBridgeInstance = nil;
@interface psdkDummyRevCatDelegate : NSObject<RCPurchasesDelegate>
@end
@implementation psdkDummyRevCatDelegate
- (void) purchases: (RCPurchases *) purchases completedTransaction: (SKPaymentTransaction *) transaction withUpdatedInfo: (RCPurchaserInfo *) purchaserInfo { }
- (void) purchases: (RCPurchases *) purchases failedTransaction: (SKPaymentTransaction *) transaction withReason: (NSError *) failureReason { }
- (void) purchases: (RCPurchases *) purchases receivedUpdatedPurchaserInfo: (RCPurchaserInfo *) purchaserInfo {
if(![purchaserInfo.activeEntitlements containsObject: @"all_access"] && [[psdkMonetizer sharedInstance] isSubscribedToAnySubscription])
[revCatPurchases restoreTransactionsForAppStoreAccount];
}
- (void) purchases: (RCPurchases *) purchases restoredTransactionsWithPurchaserInfo: (RCPurchaserInfo *) purchaserInfo { }
- (void) purchases: (RCPurchases *) purchases failedToRestoreTransactionsWithError: (NSError *) error { }
- (void) purchases: (RCPurchases *) purchases failedToUpdatePurchaserInfoWithError: (NSError *) error { }
@end
static psdkDummyRevCatDelegate *dummyRevCatDelegateInstance = nil;
...
// this gets called on app launch, from application:didFinishLaunchingWithOptions.
void AnalyticsServiceWrapper::initialize(string adjustAppToken, string revenueCatAPIKey, bool isDebugMode) {
...
NSString *adjustEnvironment = (isDebugMode ? ADJEnvironmentSandbox : ADJEnvironmentProduction);
ADJConfig *adjustConfig = [ADJConfig configWithAppToken: trans::stringToObC((adjustAppToken))
environment: adjustEnvironment
allowSuppressLogLevel: YES];
revCatPurchases = [[RCPurchases alloc] initWithAPIKey: trans::stringToObC(revenueCatAPIKey)];
revCatPurchases.finishTransactions = NO;
dummyRevCatDelegateInstance = [[psdkDummyRevCatDelegate alloc] init];
revCatPurchases.delegate = dummyRevCatDelegateInstance;
adjustToRevCatBridgeInstance = [[psdkAdjustToRevCatBridge alloc] init];
adjustConfig.delegate = adjustToRevCatBridgeInstance;
[Adjust appDidLaunch:adjustConfig];
}
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment