Skip to content

Commit

Permalink
Merge pull request #26 from BranchMetrics/universal-links
Browse files Browse the repository at this point in the history
Implement iOS9 Universal Links
  • Loading branch information
Dan Walkowski committed Nov 19, 2015
2 parents 83e3306 + 45ffaf8 commit 132b242
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 35 deletions.
2 changes: 1 addition & 1 deletion Web-SDK
15 changes: 15 additions & 0 deletions cordova-src/ios/AppDelegate+BNCDevice.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// AppDelegate+BNCDevice.h
// Branch-SDK
//
// Created by John Saleigh on 11/3/15.
// Copyright (c) 2015 Branch Metrics. All rights reserved.
//

#import "AppDelegate.h"

@interface AppDelegate (BNCDevice)

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler;

@end
16 changes: 16 additions & 0 deletions cordova-src/ios/AppDelegate+BNCDevice.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#import "AppDelegate+BNCDevice.h"
#import "BNCDevice.h"

@implementation AppDelegate (BNCDevice)

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
return NO;
}

BNCDevice *device = [self.viewController getCommandInstance:@"BranchDevice"];

return [device handleUserActivity:userActivity];
}

@end
1 change: 1 addition & 0 deletions cordova-src/ios/BNCDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

- (void)getInstallData:(CDVInvokedUrlCommand *)command;
- (void)getOpenData:(CDVInvokedUrlCommand *)command;
- (BOOL)handleUserActivity:(NSUserActivity *)userActivity;

+ (NSString *)getUniqueHardwareId:(BOOL *)isReal andIsDebug:(BOOL)debug;
+ (NSString *)getURIScheme;
Expand Down
13 changes: 13 additions & 0 deletions cordova-src/ios/BNCDevice.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
@implementation BNCDevice

static NSString *link_click_identifier = nil;
static NSString *universal_link_url = nil;

- (void)pluginInitialize {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenUrl:) name:CDVPluginHandleOpenURLNotification object:nil];
Expand Down Expand Up @@ -79,6 +80,9 @@ - (void)getInstallData:(CDVInvokedUrlCommand *)command {
} else {
[post setObject:[NSNumber numberWithInt:isReferrable] forKey:@"is_referrable"];
}
if (universal_link_url) {
[post setObject:universal_link_url forKey:@"universal_link_url"];
}

CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:post];
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
Expand All @@ -103,12 +107,21 @@ - (void)getOpenData:(CDVInvokedUrlCommand *)command {
[post setObject:[NSNumber numberWithInt:isReferrable] forKey:@"is_referrable"];
}
if (link_click_identifier) [post setObject:link_click_identifier forKey:@"link_identifier"];
if (universal_link_url) {
[post setObject:universal_link_url forKey:@"universal_link_url"];
}

CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:post];
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
}


- (BOOL)handleUserActivity:(NSUserActivity *)userActivity {
universal_link_url = [userActivity.webpageURL absoluteString];

return YES;
}

+ (NSString *)getUniqueHardwareId:(BOOL *)isReal andIsDebug:(BOOL)debug {
NSString *uid = nil;
*isReal = YES;
Expand Down
17 changes: 12 additions & 5 deletions dist/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -761,7 +761,7 @@ utils.clickIdFromLink = function(a) {
return a ? a.substring(a.lastIndexOf("/") + 1, a.length) : null;
};
utils.processReferringLink = function(a) {
return a ? "http" !== a.substring(0, 4) ? "https://bnc.lt" + a : a : null;
return a ? "http" !== a.substring(0, 4) ? config.link_service_endpoint + a : a : null;
};
utils.merge = function(a, b) {
if ("undefined" === typeof b) {
Expand Down Expand Up @@ -808,6 +808,13 @@ utils.base64encode = function(a) {
}
return b;
};
utils.extractDeeplinkPath = function(a) {
if (!a) {
return null;
}
-1 < a.indexOf("://") && (a = a.split("://")[1]);
return a.substring(a.indexOf("/") + 1);
};
// Input 5
var resources = {}, validationTypes = {OBJECT:0, STRING:1, NUMBER:2, ARRAY:3, BOOLEAN:4}, _validator;
function validator(a, b) {
Expand Down Expand Up @@ -865,9 +872,9 @@ validationTypes.STRING)}}, resources.linkClick = {destination:config.link_servic
if (CORDOVA_BUILD || TITANIUM_BUILD) {
resources.install = {destination:config.api_endpoint, endpoint:"/v1/install", method:utils.httpMethod.POST, params:{add_tracking_enabled:validator(!1, validationTypes.BOOLEAN), app_version:validator(!1, validationTypes.STRING), bluetooth:validator(!1, validationTypes.BOOLEAN), bluetooth_version:validator(!1, validationTypes.STRING), brand:validator(!1, validationTypes.STRING), carrier:validator(!1, validationTypes.STRING), hardware_id:validator(!1, validationTypes.STRING), has_nfc:validator(!1,
validationTypes.BOOLEAN), has_telephone:validator(!1, validationTypes.BOOLEAN), is_hardware_id_real:validator(!1, validationTypes.BOOLEAN), is_referrable:validator(!1, validationTypes.NUMBER), link_identifier:validator(!1, validationTypes.STRING), model:validator(!1, validationTypes.STRING), os:validator(!1, validationTypes.STRING), os_version:validator(!1, validationTypes.STRING), screen_dpi:validator(!1, validationTypes.NUMBER), screen_height:validator(!1, validationTypes.NUMBER), screen_width:validator(!1,
validationTypes.NUMBER), sdk:validator(!1, validationTypes.STRING), update:validator(!1, validationTypes.NUMBER), uri_scheme:validator(!1, validationTypes.STRING)}}, resources.open = {destination:config.api_endpoint, endpoint:"/v1/open", method:utils.httpMethod.POST, params:{app_version:validator(!1, validationTypes.STRING), device_fingerprint_id:validator(!0, branch_id), hardware_id:validator(!1, validationTypes.STRING), identity_id:validator(!0, branch_id), is_hardware_id_real:validator(!1, validationTypes.BOOLEAN),
is_referrable:validator(!1, validationTypes.NUMBER), link_identifier:validator(!1, validationTypes.STRING), os:validator(!1, validationTypes.STRING), os_version:validator(!1, validationTypes.STRING), sdk:validator(!1, validationTypes.STRING), uri_scheme:validator(!1, validationTypes.STRING)}}, resources.close = {destination:config.api_endpoint, endpoint:"/v1/close", method:utils.httpMethod.POST, params:{device_fingerprint_id:validator(!0, branch_id), identity_id:validator(!0, branch_id), link_click_id:validator(!1,
branch_id), sdk:validator(!0, validationTypes.STRING), session_id:validator(!0, branch_id)}};
validationTypes.NUMBER), sdk:validator(!1, validationTypes.STRING), universal_link_url:validator(!1, validationTypes.STRING), update:validator(!1, validationTypes.NUMBER), uri_scheme:validator(!1, validationTypes.STRING)}}, resources.open = {destination:config.api_endpoint, endpoint:"/v1/open", method:utils.httpMethod.POST, params:{app_version:validator(!1, validationTypes.STRING), device_fingerprint_id:validator(!0, branch_id), hardware_id:validator(!1, validationTypes.STRING), identity_id:validator(!0,
branch_id), is_hardware_id_real:validator(!1, validationTypes.BOOLEAN), is_referrable:validator(!1, validationTypes.NUMBER), link_identifier:validator(!1, validationTypes.STRING), os:validator(!1, validationTypes.STRING), os_version:validator(!1, validationTypes.STRING), sdk:validator(!1, validationTypes.STRING), universal_link_url:validator(!1, validationTypes.STRING), uri_scheme:validator(!1, validationTypes.STRING)}}, resources.close = {destination:config.api_endpoint, endpoint:"/v1/close",
method:utils.httpMethod.POST, params:{device_fingerprint_id:validator(!0, branch_id), identity_id:validator(!0, branch_id), link_click_id:validator(!1, branch_id), sdk:validator(!0, validationTypes.STRING), session_id:validator(!0, branch_id)}};
}
resources.getCode = {destination:config.api_endpoint, endpoint:"/v1/referralcode", method:utils.httpMethod.POST, params:defaults({amount:validator(!0, validationTypes.NUMBER), bucket:validator(!1, validationTypes.STRING), calculation_type:validator(!0, validationTypes.NUMBER), creation_source:validator(!0, validationTypes.NUMBER), expiration:validator(!1, validationTypes.STRING), location:validator(!0, validationTypes.NUMBER), prefix:validator(!1, validationTypes.STRING), type:validator(!0, validationTypes.STRING)})};
resources.validateCode = {destination:config.api_endpoint, endpoint:"/v1/referralcode", method:utils.httpMethod.POST, queryPart:{code:validator(!0, validationTypes.STRING)}, params:defaults({})};
Expand Down Expand Up @@ -1599,7 +1606,7 @@ Branch.prototype.sendSMS = wrap(callback_params.CALLBACK_ERR, function(a, b, c,
if (b) {
return a(b);
}
f._api(resources.linkClick, {link_url:"l/" + c.url.split("/").pop(), click:"click"}, function(b, c) {
f._api(resources.linkClick, {link_url:utils.extractDeeplinkPath(c.url), click:"click"}, function(b, c) {
if (b) {
return a(b);
}
Expand Down
Loading

0 comments on commit 132b242

Please sign in to comment.