Skip to content

Commit 88445fb

Browse files
committed
Swizzling the callbacks in iOS
1 parent c4404b8 commit 88445fb

File tree

7 files changed

+322
-218
lines changed

7 files changed

+322
-218
lines changed

Assets/Adjust/ExampleGUI/ExampleGUI.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void OnGUI() {
2525

2626
if (GUI.Button(new Rect(0, Screen.height * 0 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), txtManualLaunch)) {
2727
if (!string.Equals(txtManualLaunch, "SDK Launched", StringComparison.OrdinalIgnoreCase)) {
28-
AdjustConfig adjustConfig = new AdjustConfig("{YourAppToken}", AdjustEnvironment.Sandbox);
28+
AdjustConfig adjustConfig = new AdjustConfig("2fm9gkqubvpc", AdjustEnvironment.Sandbox);
2929
adjustConfig.setLogLevel(AdjustLogLevel.Verbose);
3030
adjustConfig.setLogDelegate(msg => Debug.Log(msg));
3131
adjustConfig.setSendInBackground(true);
@@ -46,19 +46,19 @@ void OnGUI() {
4646
}
4747

4848
if (GUI.Button(new Rect(0, Screen.height * 1 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Simple Event")) {
49-
AdjustEvent adjustEvent = new AdjustEvent("{YourEventToken}");
49+
AdjustEvent adjustEvent = new AdjustEvent("g3mfiw");
5050
Adjust.trackEvent(adjustEvent);
5151
}
5252

5353
if (GUI.Button(new Rect(0, Screen.height * 2 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Revenue Event")) {
54-
AdjustEvent adjustEvent = new AdjustEvent("{YourEventToken}");
54+
AdjustEvent adjustEvent = new AdjustEvent("a4fd35");
5555
adjustEvent.setRevenue(0.25, "EUR");
5656

5757
Adjust.trackEvent(adjustEvent);
5858
}
5959

6060
if (GUI.Button(new Rect(0, Screen.height * 3 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Callback Event")) {
61-
AdjustEvent adjustEvent = new AdjustEvent("{YourEventToken}");
61+
AdjustEvent adjustEvent = new AdjustEvent("34vgg9");
6262

6363
adjustEvent.addCallbackParameter("key", "value");
6464
adjustEvent.addCallbackParameter("foo", "bar");
@@ -67,7 +67,7 @@ void OnGUI() {
6767
}
6868

6969
if (GUI.Button(new Rect(0, Screen.height * 4 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Partner Event")) {
70-
AdjustEvent adjustEvent = new AdjustEvent("{YourEventToken}");
70+
AdjustEvent adjustEvent = new AdjustEvent("w788qs");
7171

7272
adjustEvent.addPartnerParameter("key", "value");
7373
adjustEvent.addPartnerParameter("foo", "bar");

Assets/Adjust/iOS/AdjustUnity.h

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
#import "Adjust.h"
22

3-
@interface AdjustUnity : NSObject<AdjustDelegate>
4-
5-
- (void)adjustAttributionChanged:(ADJAttribution *)attribution;
6-
- (void)adjustEventTrackingSucceeded:(ADJEventSuccess *)eventSuccessResponseData;
7-
- (void)adjustEventTrackingFailed:(ADJEventFailure *)eventFailureResponseData;
8-
- (void)adjustSessionTrackingSucceeded:(ADJSessionSuccess *)sessionSuccessResponseData;
9-
- (void)adjustSessionTrackingFailed:(ADJSessionFailure *)sessionFailureResponseData;
10-
- (BOOL)adjustDeeplinkResponse:(NSURL *)deeplink;
3+
@interface AdjustUnity : NSObject
114

125
@end

Assets/Adjust/iOS/AdjustUnity.mm

+25-202
Original file line numberDiff line numberDiff line change
@@ -1,227 +1,47 @@
11
#import "AdjustUnity.h"
2+
#import "AdjustUnityDelegate.h"
23

34
#import "ADJEvent.h"
45
#import "ADJConfig.h"
56

67
@implementation AdjustUnity
78

8-
static char* adjustSceneName = nil;
9-
static BOOL launchAdjustDeferredDeeplink = YES;
10-
static id<AdjustDelegate> adjustUnityInstance = nil;
11-
129
- (id)init {
1310
self = [super init];
1411
return self;
1512
}
1613

17-
- (void)adjustAttributionChanged:(ADJAttribution *)attribution {
18-
NSMutableDictionary *attributionDic = [NSMutableDictionary dictionary];
19-
20-
if (nil != attribution.trackerToken) {
21-
[attributionDic setObject:attribution.trackerToken forKey:@"trackerToken"];
22-
}
23-
24-
if (nil != attribution.trackerName) {
25-
[attributionDic setObject:attribution.trackerName forKey:@"trackerName"];
26-
}
27-
28-
if (nil != attribution.network) {
29-
[attributionDic setObject:attribution.network forKey:@"network"];
30-
}
31-
32-
if (nil != attribution.campaign) {
33-
[attributionDic setObject:attribution.campaign forKey:@"campaign"];
34-
}
35-
36-
if (nil != attribution.adgroup) {
37-
[attributionDic setObject:attribution.adgroup forKey:@"adgroup"];
38-
}
39-
40-
if (nil != attribution.creative) {
41-
[attributionDic setObject:attribution.creative forKey:@"creative"];
42-
}
43-
44-
if (nil != attribution.clickLabel) {
45-
[attributionDic setObject:attribution.clickLabel forKey:@"clickLabel"];
46-
}
47-
48-
NSData *dataAttribution = [NSJSONSerialization dataWithJSONObject:attributionDic options:0 error:nil];
49-
NSString *stringAttribution = [[NSString alloc] initWithBytes:[dataAttribution bytes]
50-
length:[dataAttribution length]
51-
encoding:NSUTF8StringEncoding];
52-
53-
const char* charArrayAttribution = [stringAttribution UTF8String];
54-
55-
UnitySendMessage(adjustSceneName, "GetNativeAttribution", charArrayAttribution);
56-
}
57-
58-
- (void)adjustEventTrackingSucceeded:(ADJEventSuccess *)eventSuccessResponseData {
59-
NSMutableDictionary *eventSuccessDataDict = [NSMutableDictionary dictionary];
60-
61-
if (eventSuccessResponseData.message != nil) {
62-
[eventSuccessDataDict setObject:eventSuccessResponseData.message forKey:@"message"];
63-
}
64-
65-
if (eventSuccessResponseData.timeStamp != nil) {
66-
[eventSuccessDataDict setObject:eventSuccessResponseData.timeStamp forKey:@"timestamp"];
67-
}
68-
69-
if (eventSuccessResponseData.adid != nil) {
70-
[eventSuccessDataDict setObject:eventSuccessResponseData.adid forKey:@"adid"];
71-
}
72-
73-
if (eventSuccessResponseData.eventToken != nil) {
74-
[eventSuccessDataDict setObject:eventSuccessResponseData.eventToken forKey:@"eventToken"];
75-
}
76-
77-
if (eventSuccessResponseData.jsonResponse != nil) {
78-
[eventSuccessDataDict setObject:eventSuccessResponseData.jsonResponse forKey:@"jsonResponse"];
79-
}
80-
81-
NSData *dataEventSuccess = [NSJSONSerialization dataWithJSONObject:eventSuccessDataDict options:0 error:nil];
82-
NSString *stringEventSuccess = [[NSString alloc] initWithBytes:[dataEventSuccess bytes]
83-
length:[dataEventSuccess length]
84-
encoding:NSUTF8StringEncoding];
85-
86-
const char* charArrayEventSuccess = [stringEventSuccess UTF8String];
87-
88-
UnitySendMessage(adjustSceneName, "GetNativeEventSuccess", charArrayEventSuccess);
89-
}
90-
91-
- (void)adjustEventTrackingFailed:(ADJEventFailure *)eventFailureResponseData {
92-
NSMutableDictionary *eventFailureDataDict = [NSMutableDictionary dictionary];
93-
94-
if (eventFailureResponseData.message != nil) {
95-
[eventFailureDataDict setObject:eventFailureResponseData.message forKey:@"message"];
96-
}
97-
98-
if (eventFailureResponseData.timeStamp != nil) {
99-
[eventFailureDataDict setObject:eventFailureResponseData.timeStamp forKey:@"timestamp"];
100-
}
101-
102-
if (eventFailureResponseData.adid != nil) {
103-
[eventFailureDataDict setObject:eventFailureResponseData.adid forKey:@"adid"];
104-
}
105-
106-
if (eventFailureResponseData.eventToken != nil) {
107-
[eventFailureDataDict setObject:eventFailureResponseData.eventToken forKey:@"eventToken"];
108-
}
109-
110-
if (eventFailureResponseData.jsonResponse != nil) {
111-
[eventFailureDataDict setObject:eventFailureResponseData.jsonResponse forKey:@"jsonResponse"];
112-
}
113-
114-
[eventFailureDataDict setObject:(eventFailureResponseData.willRetry == YES ? @"true" : @"false")
115-
forKey:@"willRetry"];
116-
117-
NSData *dataEventFailure = [NSJSONSerialization dataWithJSONObject:eventFailureDataDict options:0 error:nil];
118-
NSString *stringEventFailure = [[NSString alloc] initWithBytes:[dataEventFailure bytes]
119-
length:[dataEventFailure length]
120-
encoding:NSUTF8StringEncoding];
121-
122-
const char* charArrayEventFailure = [stringEventFailure UTF8String];
123-
124-
UnitySendMessage(adjustSceneName, "GetNativeEventFailure", charArrayEventFailure);
125-
}
126-
127-
- (void)adjustSessionTrackingSucceeded:(ADJSessionSuccess *)sessionSuccessResponseData {
128-
NSMutableDictionary *sessionSuccessDataDict = [NSMutableDictionary dictionary];
129-
130-
if (sessionSuccessResponseData.message != nil) {
131-
[sessionSuccessDataDict setObject:sessionSuccessResponseData.message forKey:@"message"];
132-
}
133-
134-
if (sessionSuccessResponseData.timeStamp != nil) {
135-
[sessionSuccessDataDict setObject:sessionSuccessResponseData.timeStamp forKey:@"timestamp"];
136-
}
137-
138-
if (sessionSuccessResponseData.adid != nil) {
139-
[sessionSuccessDataDict setObject:sessionSuccessResponseData.adid forKey:@"adid"];
140-
}
141-
142-
if (sessionSuccessResponseData.jsonResponse != nil) {
143-
[sessionSuccessDataDict setObject:sessionSuccessResponseData.jsonResponse forKey:@"jsonResponse"];
144-
}
145-
146-
NSData *dataSessionSuccess = [NSJSONSerialization dataWithJSONObject:sessionSuccessDataDict options:0 error:nil];
147-
NSString *stringSessionSuccess = [[NSString alloc] initWithBytes:[dataSessionSuccess bytes]
148-
length:[dataSessionSuccess length]
149-
encoding:NSUTF8StringEncoding];
150-
151-
const char* charArraySessionSuccess = [stringSessionSuccess UTF8String];
152-
153-
UnitySendMessage(adjustSceneName, "GetNativeSessionSuccess", charArraySessionSuccess);
154-
}
155-
156-
- (void)adjustSessionTrackingFailed:(ADJSessionFailure *)sessionFailureResponseData {
157-
NSMutableDictionary *sessionFailureDataDict = [NSMutableDictionary dictionary];
158-
159-
if (sessionFailureResponseData.message != nil) {
160-
[sessionFailureDataDict setObject:sessionFailureResponseData.message forKey:@"message"];
161-
}
162-
163-
if (sessionFailureResponseData.timeStamp != nil) {
164-
[sessionFailureDataDict setObject:sessionFailureResponseData.timeStamp forKey:@"timestamp"];
165-
}
166-
167-
if (sessionFailureResponseData.adid != nil) {
168-
[sessionFailureDataDict setObject:sessionFailureResponseData.adid forKey:@"adid"];
169-
}
170-
171-
if (sessionFailureResponseData.jsonResponse != nil) {
172-
[sessionFailureDataDict setObject:sessionFailureResponseData.jsonResponse forKey:@"jsonResponse"];
173-
}
174-
175-
[sessionFailureDataDict setObject:(sessionFailureResponseData.willRetry == YES ? @"true" : @"false")
176-
forKey:@"willRetry"];
177-
178-
NSData *dataSessionFailure = [NSJSONSerialization dataWithJSONObject:sessionFailureDataDict options:0 error:nil];
179-
NSString *stringSessionFailure = [[NSString alloc] initWithBytes:[dataSessionFailure bytes]
180-
length:[dataSessionFailure length]
181-
encoding:NSUTF8StringEncoding];
182-
183-
const char* charArraySessionFailure = [stringSessionFailure UTF8String];
184-
185-
UnitySendMessage(adjustSceneName, "GetNativeSessionFailure", charArraySessionFailure);
186-
}
187-
188-
- (BOOL)adjustDeeplinkResponse:(NSURL *)deeplink {
189-
NSString *stringDeeplink = [deeplink absoluteString];
190-
const char* charDeeplink = [stringDeeplink UTF8String];
191-
192-
UnitySendMessage(adjustSceneName, "GetNativeDeferredDeeplink", charDeeplink);
193-
194-
return launchAdjustDeferredDeeplink;
195-
}
196-
19714
@end
19815

19916
// Method for converting JSON stirng parameters into NSArray object.
20017
NSArray* ConvertArrayParameters(const char* cStringJsonArrayParameters) {
20118
if (cStringJsonArrayParameters == NULL) {
20219
return nil;
20320
}
204-
21+
20522
NSError *error = nil;
20623
NSArray *arrayParameters = nil;
20724
NSString *stringJsonArrayParameters = [NSString stringWithUTF8String:cStringJsonArrayParameters];
208-
25+
20926
if (stringJsonArrayParameters != nil) {
21027
NSData *dataJson = [stringJsonArrayParameters dataUsingEncoding:NSUTF8StringEncoding];
21128
arrayParameters = [NSJSONSerialization JSONObjectWithData:dataJson options:0 error:&error];
21229
}
213-
30+
21431
if (error != nil) {
21532
NSString *errorMessage = @"Failed to parse json parameters!";
21633
NSLog(@"%@", errorMessage);
21734
}
218-
35+
21936
return arrayParameters;
22037
}
22138

22239
extern "C"
22340
{
224-
void _AdjustLaunchApp(const char* appToken, const char* environment, const char* sdkPrefix, int allowSuppressLogLevel, int logLevel, int eventBuffering, int sendInBackground, double delayStart, const char* userAgent, int launchDeferredDeeplink, const char* sceneName) {
41+
void _AdjustLaunchApp(const char* appToken, const char* environment, const char* sdkPrefix, int allowSuppressLogLevel, int logLevel,
42+
int eventBuffering, int sendInBackground, double delayStart, const char* userAgent, int launchDeferredDeeplink, const char* sceneName,
43+
int isAttributionCallbackImplemented, int isEventSuccessCallbackImplemented, int isEventFailureCallbackImplemented,
44+
int isSessionSuccessCallbackImplemented, int isSessionFailureCallbackImplemented, int isDeferredDeeplinkCallbackImplemented) {
22545
NSString *stringSdkPrefix = [NSString stringWithUTF8String:sdkPrefix];
22646
NSString *stringAppToken = [NSString stringWithUTF8String:appToken];
22747
NSString *stringEnvironment = [NSString stringWithUTF8String:environment];
@@ -241,6 +61,21 @@ void _AdjustLaunchApp(const char* appToken, const char* environment, const char*
24161

24262
[adjustConfig setSdkPrefix:stringSdkPrefix];
24363

64+
// Attribution delegate & other delegates
65+
if (isAttributionCallbackImplemented || isEventSuccessCallbackImplemented ||
66+
isEventFailureCallbackImplemented || isSessionSuccessCallbackImplemented ||
67+
isSessionFailureCallbackImplemented || isDeferredDeeplinkCallbackImplemented) {
68+
[adjustConfig setDelegate:
69+
[AdjustUnityDelegate getInstanceWithSwizzleOfAttributionCallback:isAttributionCallbackImplemented
70+
eventSucceededCallback:isEventSuccessCallbackImplemented
71+
eventFailedCallback:isEventFailureCallbackImplemented
72+
sessionSucceededCallback:isSessionSuccessCallbackImplemented
73+
sessionFailedCallback:isSessionFailureCallbackImplemented
74+
deferredDeeplinkCallback:isDeferredDeeplinkCallbackImplemented
75+
shouldLaunchDeferredDeeplink:launchDeferredDeeplink
76+
withAdjustUnitySceneName:stringSceneName]];
77+
}
78+
24479
// Optional fields.
24580
if (logLevel != -1) {
24681
[adjustConfig setLogLevel:(ADJLogLevel)logLevel];
@@ -258,25 +93,13 @@ void _AdjustLaunchApp(const char* appToken, const char* environment, const char*
25893
[adjustConfig setDelayStart:delayStart];
25994
}
26095

261-
if (launchDeferredDeeplink != -1) {
262-
launchAdjustDeferredDeeplink = (BOOL)launchDeferredDeeplink;
263-
}
264-
26596
if (stringUserAgent != NULL) {
26697
if ([stringUserAgent length] > 0) {
26798
[adjustConfig setUserAgent:stringUserAgent];
26899
}
269100
}
270101

271-
if (sceneName != NULL) {
272-
if ([stringSceneName length] > 0) {
273-
adjustSceneName = strdup(sceneName);
274-
adjustUnityInstance = [[AdjustUnity alloc] init];
275-
[adjustConfig setDelegate:(id)adjustUnityInstance];
276-
}
277-
}
278-
279-
NSLog(@"%@, %@, %@, %d, %d, %d, %d, %.1f, %@, %d, %@", stringAppToken, stringEnvironment, stringSdkPrefix, allowSuppressLogLevel, logLevel, eventBuffering, sendInBackground, delayStart, stringUserAgent, launchDeferredDeeplink, stringSceneName);
102+
// NSLog(@"%@, %@, %@, %d, %d, %d, %d, %.1f, %@, %d, %@", stringAppToken, stringEnvironment, stringSdkPrefix, allowSuppressLogLevel, logLevel, eventBuffering, sendInBackground, delayStart, stringUserAgent, launchDeferredDeeplink, stringSceneName);
280103

281104
// Launch adjust instance.
282105
[Adjust appDidLaunch:adjustConfig];
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// AdjustUnityDelegate.h
3+
// Adjust
4+
//
5+
// Created by uerceg on 12/05/16.
6+
// Copyright (c) 2012-2016 adjust GmbH. All rights reserved.
7+
//
8+
9+
#import "Adjust.h"
10+
11+
@interface AdjustUnityDelegate : NSObject<AdjustDelegate>
12+
13+
@property (nonatomic) BOOL shouldLaunchDeferredDeeplink;
14+
15+
@property (nonatomic, copy) NSString *adjustUnitySceneName;
16+
17+
+ (id)getInstanceWithSwizzleOfAttributionCallback:(BOOL)swizzleAttributionCallback
18+
eventSucceededCallback:(BOOL)swizzleEventSucceededCallback
19+
eventFailedCallback:(BOOL)swizzleEventFailedCallback
20+
sessionSucceededCallback:(BOOL)swizzleSessionSucceededCallback
21+
sessionFailedCallback:(BOOL)swizzleSessionFailedCallback
22+
deferredDeeplinkCallback:(BOOL)swizzleDeferredDeeplinkCallback
23+
shouldLaunchDeferredDeeplink:(BOOL)shouldLaunchDeferredDeeplink
24+
withAdjustUnitySceneName:(NSString *)adjustUnitySceneName;
25+
26+
@end

0 commit comments

Comments
 (0)