-
Notifications
You must be signed in to change notification settings - Fork 298
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #47 from adjust/development
Web App integration
- Loading branch information
Showing
17 changed files
with
1,089 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// | ||
// AdjustBridge.h | ||
// Adjust | ||
// | ||
// Created by Pedro Filipe on 19/05/14. | ||
// Copyright (c) 2014 adjust. All rights reserved. | ||
// | ||
|
||
#import <Foundation/Foundation.h> | ||
#import "Adjust.h" | ||
#import <UIKit/UIKit.h> | ||
|
||
@interface AdjustBridge : NSObject<AdjustDelegate> | ||
|
||
- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData; | ||
|
||
+ (void)loadBridge:(NSObject<UIWebViewDelegate> *) webViewDelegate | ||
webView:(UIWebView *) webView; | ||
|
||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
window.AdjustBridge = (function () { | ||
|
||
var bridge = {}; | ||
|
||
var adjustPrefix = 'adjust_'; | ||
|
||
function setBridgePrivate(bridgeParam) { | ||
bridge = bridgeParam; | ||
bridge.init(function(message, callback) { }); | ||
} | ||
|
||
function trackEventPrivate (eventToken, parameters) { | ||
bridge.callHandler(adjustPrefix + 'trackEvent', | ||
{'eventToken': eventToken, 'parameters': parameters}, | ||
function(response) {}) | ||
}; | ||
|
||
function trackRevenuePrivate (amountInCents, eventToken, parameters) { | ||
bridge.callHandler(adjustPrefix + 'trackRevenue', | ||
{'amountInCents': amountInCents, 'eventToken': eventToken, 'parameters': parameters}, | ||
function(response) {}) | ||
}; | ||
|
||
function setResponseDelegatePrivate(responseDelegate) { | ||
bridge.callHandler(adjustPrefix + 'setResponseDelegate', {}, function(response) {}); | ||
|
||
bridge.registerHandler('responseDelegate', function(data, responseCallback) { | ||
responseDelegate(data) | ||
}); | ||
}; | ||
|
||
function setEnabledPrivate(enabled) { | ||
bridge.callHandler(adjustPrefix + 'setEnabled', {'enabled': enabled}, function(response) { }); | ||
}; | ||
|
||
function isEnabledPrivate(isEnabledReturnCallBack) { | ||
bridge.callHandler(adjustPrefix + 'isEnabled', {}, function(isEnabledString) { | ||
isEnabledReturnCallBack(isEnabledString) | ||
}); | ||
}; | ||
|
||
function openUrlPrivate(url) { | ||
bridge.callHandler(adjustPrefix + 'openUrl', {'url': url}, function(response) { }); | ||
}; | ||
|
||
return { | ||
setBridge: setBridgePrivate, | ||
trackEvent: trackEventPrivate, | ||
trackRevenue: trackRevenuePrivate, | ||
setResponseDelegate: setResponseDelegatePrivate, | ||
setEnabled: setEnabledPrivate, | ||
isEnabled: isEnabledPrivate, | ||
openUrl: openUrlPrivate | ||
}; | ||
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
// | ||
// AdjustBridge.m | ||
// Adjust | ||
// | ||
// Created by Pedro Filipe on 19/05/14. | ||
// Copyright (c) 2014 adjust. All rights reserved. | ||
// | ||
|
||
#import "AdjustBridge.h" | ||
#import "WebViewJavascriptBridge.h" | ||
|
||
static NSString * const kAdjustJsPrefix = @"adjust_"; | ||
|
||
static WebViewJavascriptBridge* _AdjustBridge = nil; | ||
static id<AdjustDelegate> adjustBridgeInstance = nil; | ||
|
||
@implementation AdjustBridge | ||
|
||
- (id) init { | ||
self = [super init]; | ||
return self; | ||
} | ||
|
||
+ (void) loadBridge:(NSObject<UIWebViewDelegate> *) webViewDelegate | ||
webView:(UIWebView *) webView { | ||
if (_AdjustBridge) { return; } | ||
|
||
_AdjustBridge = [WebViewJavascriptBridge bridgeForWebView:webView webViewDelegate:webViewDelegate handler:^(id data, WVJBResponseCallback responseCallback) { | ||
}]; | ||
|
||
[_AdjustBridge registerHandler:[NSString stringWithFormat:@"%@trackEvent", kAdjustJsPrefix] handler:^(id data, WVJBResponseCallback responseCallback) { | ||
|
||
NSString* eventToken = [data objectForKey:@"eventToken"]; | ||
NSDictionary* parameters = [data objectForKey:@"parameters"]; | ||
|
||
if (parameters != nil) { | ||
[Adjust trackEvent:eventToken withParameters:parameters]; | ||
} else { | ||
[Adjust trackEvent:eventToken]; | ||
} | ||
}]; | ||
|
||
[_AdjustBridge registerHandler:[NSString stringWithFormat:@"%@trackRevenue", kAdjustJsPrefix] handler:^(id data, WVJBResponseCallback responseCallback) { | ||
|
||
NSString* eventToken = [data objectForKey:@"eventToken"]; | ||
NSDictionary* parameters = [data objectForKey:@"parameters"]; | ||
double amountInCents = [[data objectForKey:@"amountInCents"] doubleValue]; | ||
|
||
if (parameters != nil) { | ||
[Adjust trackRevenue:amountInCents forEvent:eventToken withParameters:parameters]; | ||
} else if (eventToken != nil) { | ||
[Adjust trackRevenue:amountInCents forEvent:eventToken]; | ||
} else { | ||
[Adjust trackRevenue:amountInCents]; | ||
} | ||
}]; | ||
|
||
[_AdjustBridge registerHandler:[NSString stringWithFormat:@"%@setResponseDelegate", kAdjustJsPrefix] handler:^(id data, WVJBResponseCallback responseCallback) { | ||
|
||
adjustBridgeInstance = [[AdjustBridge alloc] init]; | ||
[Adjust setDelegate:adjustBridgeInstance]; | ||
}]; | ||
|
||
[_AdjustBridge registerHandler:[NSString stringWithFormat:@"%@setEnabled", kAdjustJsPrefix] handler:^(id data, WVJBResponseCallback responseCallback) { | ||
|
||
BOOL enabled = [[data objectForKey:@"enabled"] boolValue]; | ||
[Adjust setEnabled:enabled]; | ||
}]; | ||
|
||
[_AdjustBridge registerHandler:[NSString stringWithFormat:@"%@isEnabled", kAdjustJsPrefix] handler:^(id data, WVJBResponseCallback responseCallback) { | ||
|
||
BOOL isEnabled = [Adjust isEnabled]; | ||
|
||
responseCallback([NSNumber numberWithBool:isEnabled]); | ||
}]; | ||
|
||
[_AdjustBridge registerHandler:[NSString stringWithFormat:@"%@openUrl", kAdjustJsPrefix] handler:^(id data, WVJBResponseCallback responseCallback) { | ||
|
||
NSURL* url = [[NSURL alloc] initWithString:[data objectForKey:@"url"]]; | ||
[Adjust appWillOpenUrl:url]; | ||
}]; | ||
|
||
if (![[webView stringByEvaluatingJavaScriptFromString:@"typeof AdjustBridge == 'object'"] isEqualToString:@"true"]) { | ||
NSBundle *bundle = [NSBundle mainBundle]; | ||
NSString *filePath = [bundle pathForResource:@"AdjustBridge.js" ofType:@"txt"]; | ||
NSString *js = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; | ||
[webView stringByEvaluatingJavaScriptFromString:js]; | ||
} | ||
|
||
[Adjust setSdkPrefix:@"bridge"]; | ||
} | ||
|
||
- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData { | ||
NSMutableDictionary* dicResponseData = (NSMutableDictionary*) [responseData dictionary]; | ||
|
||
[dicResponseData removeObjectForKey:@"success"]; | ||
[dicResponseData setObject:[NSNumber numberWithBool:responseData.success] forKey:@"success"]; | ||
|
||
[dicResponseData removeObjectForKey:@"willRetry"]; | ||
[dicResponseData setObject:[NSNumber numberWithBool:responseData.willRetry] forKey:@"willRetry"]; | ||
|
||
[_AdjustBridge callHandler:@"responseDelegate" data:dicResponseData responseCallback:^(id response) {}]; | ||
} | ||
@end |
44 changes: 44 additions & 0 deletions
44
AdjustBridge/WebViewJavascriptBridge/WebViewJavascriptBridge.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// | ||
// WebViewJavascriptBridge.h | ||
// ExampleApp-iOS | ||
// | ||
// Created by Marcus Westin on 6/14/13. | ||
// Copyright (c) 2013 Marcus Westin. All rights reserved. | ||
// | ||
|
||
#import <Foundation/Foundation.h> | ||
#import <UIKit/UIKit.h> | ||
|
||
#define kCustomProtocolScheme @"wvjbscheme" | ||
#define kQueueHasMessage @"__WVJB_QUEUE_MESSAGE__" | ||
|
||
#if defined __MAC_OS_X_VERSION_MAX_ALLOWED | ||
#import <WebKit/WebKit.h> | ||
#define WVJB_PLATFORM_OSX | ||
#define WVJB_WEBVIEW_TYPE WebView | ||
#define WVJB_WEBVIEW_DELEGATE_TYPE NSObject | ||
#elif defined __IPHONE_OS_VERSION_MAX_ALLOWED | ||
#define WVJB_PLATFORM_IOS | ||
#define WVJB_WEBVIEW_TYPE UIWebView | ||
#define WVJB_WEBVIEW_DELEGATE_TYPE NSObject<UIWebViewDelegate> | ||
#endif | ||
|
||
typedef void (^WVJBResponseCallback)(id responseData); | ||
typedef void (^WVJBHandler)(id data, WVJBResponseCallback responseCallback); | ||
|
||
@interface WebViewJavascriptBridge : WVJB_WEBVIEW_DELEGATE_TYPE | ||
|
||
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView handler:(WVJBHandler)handler; | ||
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)handler; | ||
+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)webViewDelegate handler:(WVJBHandler)handler resourceBundle:(NSBundle*)bundle; | ||
+ (void)enableLogging; | ||
|
||
- (void)send:(id)message; | ||
- (void)send:(id)message responseCallback:(WVJBResponseCallback)responseCallback; | ||
- (void)registerHandler:(NSString*)handlerName handler:(WVJBHandler)handler; | ||
- (void)callHandler:(NSString*)handlerName; | ||
- (void)callHandler:(NSString*)handlerName data:(id)data; | ||
- (void)callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)responseCallback; | ||
- (void)reset; | ||
|
||
@end |
Oops, something went wrong.