Skip to content

Commit c5b6c29

Browse files
authored
Merge pull request #262 from BranchMetrics/fix_deeplink_path
fix: added $deeplink_path for android
2 parents 2e781f4 + 15a7c8a commit c5b6c29

23 files changed

+402
-241
lines changed

DEVELOPING.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,27 @@ gulp prerelease;
5959
> **[optional]** Update [iOS SDK](https://github.com/BranchMetrics/ios-branch-deep-linking/tags) (will need to update `plugin.xml` dependencies if new iOS files)
6060
6161
```sh
62-
./src/ios/dependencies/update.sh 0.12.14;
62+
./src/ios/dependencies/update.sh 0.12.20;
6363
```
6464

6565
### Test
6666

6767
> Modify `BRANCH_KEY` and `URI_SCHEME` and `config.xml` to values in [Branch Dashboard](https://dashboard.branch.io/settings/link)
6868
6969
```sh
70-
gulp prerelease && cd testbed && npm install -g cordova && cordova platform remove ios && cordova platform remove android && cordova platform remove browser && cordova platform add ios && cordova platform add android && cordova plugin remove io.branch.sdk && cordova plugin add ../ --variable BRANCH_KEY=key_live_icCccJIpd7GlYY5oOmoEtpafuDiuyXhT --variable URI_SCHEME=enefftest;
70+
gulp prerelease; cd testbed; npm install -g cordova; cordova platform remove ios; cordova platform remove android; cordova platform remove browser; cordova platform add ios; cordova platform add android; cordova plugin remove io.branch.sdk; cordova plugin add ../ --variable BRANCH_KEY=key_live_icCccJIpd7GlYY5oOmoEtpafuDiuyXhT --variable URI_SCHEME=enefftest;
7171

7272
# cordova plugin add branch-cordova-sdk --variable BRANCH_KEY=key_live_icCccJIpd7GlYY5oOmoEtpafuDiuyXhT --variable URI_SCHEME=enefftest;
7373
```
7474

7575
> Validate all features on both `iOS` and `Android` on `device` only (no `simulator` or `TestFlight`)
7676
7777
```sh
78-
cordova build ios --developmentTeam="PW4Q8885U7" --device;
78+
cordova build ios && open -a Xcode platforms/ios/Branch\ Testing.xcworkspace;
7979
```
8080

8181
```sh
82-
cordova build android && cordova run android;
82+
cordova build android; cordova run android;
8383
chrome://inspect/#devices
8484
```
8585

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,9 @@
205205
206206
- Delete your app from the device *(resets the Apple AASA scraping)*
207207
208-
- Compile your app *(`cordova build ios --developmentTeam="PW4Q8885U7" --device;`)*
208+
- Compile your app *(`cordova build ios` `phone gap build ios` `ionic build ios`)*
209209
210-
- Open the app in Xcode and set your Provisioning Profile `Development Team`
210+
- Open the app in `Xcode` and set your Provisioning Profile `Development Team`
211211
212212
- Launch your app to `device` *(not Simulator or TestFlight)*
213213
@@ -225,7 +225,7 @@
225225
226226
- Delete your app from the device
227227
228-
- Compile your app *(`cordova run android`)*
228+
- Compile your app *(`cordova build android` `phone gap build android` `ionic build android`)*
229229
230230
- Launch your app to `device` *(not Simulator or Genymotion)*
231231
@@ -328,6 +328,7 @@
328328
$android_url: 'http://www.example.com/android',
329329
$ios_url: 'http://www.example.com/ios',
330330
$ipad_url: 'http://www.example.com/ipad',
331+
$deeplink_path: "content/123",
331332
more_custom: 'data',
332333
even_more_custom: true,
333334
this_is_custom: 321
@@ -700,6 +701,8 @@
700701
- Always use the `Branch.initSession(function(data) {});` to read Deep Link data
701702
702703
- Always test on `device` (`simulator` `browser` `genymotion` will break)
704+
705+
- You must launch the app through `Xcode` for iOS
703706
704707
- Other deep link plugins (ex `cordova-universal-links-plugin`) will interferer with Branch
705708

plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ SOFTWARE.
120120

121121
<header-file src="src/ios/dependencies/Branch-SDK/BNCCallbacks.h" />
122122
<header-file src="src/ios/dependencies/Branch-SDK/BNCConfig.h" />
123+
<source-file src="src/ios/dependencies/Branch-SDK/BNCConfig.m" />
123124
<header-file src="src/ios/dependencies/Branch-SDK/BNCContentDiscoveryManager.h" />
124125
<source-file src="src/ios/dependencies/Branch-SDK/BNCContentDiscoveryManager.m" />
125126
<header-file src="src/ios/dependencies/Branch-SDK/BNCDeviceInfo.h" />

src/android/io/branch/BranchSDK.java

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,6 @@ private void getFirstReferringParams(CallbackContext callbackContext) {
350350
*/
351351
private void createBranchUniversalObject(JSONObject options, CallbackContext callbackContext) throws JSONException {
352352

353-
354353
BranchUniversalObject branchObj = new BranchUniversalObject();
355354

356355
// Set object properties
@@ -373,7 +372,6 @@ private void createBranchUniversalObject(JSONObject options, CallbackContext cal
373372

374373
// Set content visibility
375374
if (options.has("contentIndexingMode")) {
376-
377375
if (options.getString("contentIndexingMode").equals("private")) {
378376
branchObj.setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PRIVATE);
379377
} else {
@@ -447,6 +445,7 @@ private BranchLinkProperties createLinkProperties(JSONObject options, JSONObject
447445

448446
BranchLinkProperties linkProperties = new BranchLinkProperties();
449447

448+
// Add link properties
450449
if (options.has("feature")) {
451450
linkProperties.setFeature(options.getString("feature"));
452451
}
@@ -465,39 +464,26 @@ private BranchLinkProperties createLinkProperties(JSONObject options, JSONObject
465464
if (options.has("duration")) {
466465
linkProperties.setDuration(options.getInt("duration"));
467466
}
468-
469467
if (options.has("tags")) {
470468
JSONArray array = (JSONArray) options.get("tags");
471469
if (array != null) {
472-
for (int i=0;i<array.length();i++){
470+
for (int i=0; i<array.length(); i++){
473471
linkProperties.addTag(array.get(i).toString());
474472
}
475473
}
476474
}
477475

478-
if (controlParams.has("$fallback_url")) {
479-
linkProperties.addControlParameter("$fallback_url", controlParams.getString("$fallback_url"));
480-
}
481-
if (controlParams.has("$desktop_url")) {
482-
linkProperties.addControlParameter("$desktop_url", controlParams.getString("$desktop_url"));
483-
}
484-
if (controlParams.has("$android_url")) {
485-
linkProperties.addControlParameter("$android_url", controlParams.getString("$android_url"));
486-
}
487-
if (controlParams.has("$ios_url")) {
488-
linkProperties.addControlParameter("$ios_url", controlParams.getString("$ios_url"));
489-
}
490-
if (controlParams.has("$ipad_url")) {
491-
linkProperties.addControlParameter("$ipad_url", controlParams.getString("$ipad_url"));
492-
}
493-
if (controlParams.has("$fire_url")) {
494-
linkProperties.addControlParameter("$fire_url", controlParams.getString("$fire_url"));
495-
}
496-
if (controlParams.has("$blackberry_url")) {
497-
linkProperties.addControlParameter("$blackberry_url", controlParams.getString("$blackberry_url"));
498-
}
499-
if (controlParams.has("$windows_phone_url")) {
500-
linkProperties.addControlParameter("$windows_phone_url", controlParams.getString("$windows_phone_url"));
476+
Log.d(LCAT, "Adding control parameters:");
477+
478+
// Add and iterate control parameters properties
479+
Iterator<?> keys = controlParams.keys();
480+
481+
while (keys.hasNext()) {
482+
String key = keys.next().toString();
483+
484+
Log.d(LCAT, String.format("key: %s", key));
485+
486+
linkProperties.addControlParameter(key, controlParams.getString(key));
501487
}
502488

503489
return linkProperties;

src/ios/dependencies/Branch-SDK/BNCCallbacks.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111

1212
@class BranchUniversalObject, BranchLinkProperties;
1313

14-
typedef void (^callbackWithParams) (NSDictionary * _Nonnull params, NSError * _Nullable error);
15-
typedef void (^callbackWithUrl) (NSString * _Nonnull url, NSError * _Nullable error);
14+
typedef void (^callbackWithParams) (NSDictionary * _Nullable params, NSError * _Nullable error);
15+
typedef void (^callbackWithUrl) (NSString * _Nullable url, NSError * _Nullable error);
1616
typedef void (^callbackWithStatus) (BOOL changed, NSError * _Nullable error);
1717
typedef void (^callbackWithList) (NSArray * _Nullable list, NSError * _Nullable error);
1818
typedef void (^callbackWithUrlAndSpotlightIdentifier) (NSString * _Nullable url, NSString * _Nullable spotlightIdentifier, NSError * _Nullable error);
19-
typedef void (^callbackWithBranchUniversalObject) (BranchUniversalObject * _Nonnull universalObject, BranchLinkProperties * _Nonnull linkProperties, NSError * _Nullable error);
19+
typedef void (^callbackWithBranchUniversalObject) (BranchUniversalObject * _Nullable universalObject, BranchLinkProperties * _Nullable linkProperties, NSError * _Nullable error);
2020

2121
#endif /* BNCCallbacks_h */

src/ios/dependencies/Branch-SDK/BNCConfig.h

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,9 @@
66
// Copyright (c) 2014 Branch Metrics. All rights reserved.
77
//
88

9-
#ifndef Branch_SDK_Config_h
10-
#define Branch_SDK_Config_h
9+
#import <Foundation/Foundation.h>
1110

12-
#define SDK_VERSION @"0.12.19"
13-
14-
#define BNC_PROD_ENV
15-
//#define BNC_STAGE_ENV
16-
//#define BNC_DEV_ENV
17-
18-
#ifdef BNC_PROD_ENV
19-
#define BNC_API_BASE_URL @"https://api.branch.io"
20-
#endif
21-
22-
#ifdef BNC_STAGE_ENV
23-
#define BNC_API_BASE_URL @"http://api.dev.branch.io"
24-
#endif
25-
26-
#define BNC_LINK_URL @"https://bnc.lt"
27-
28-
#ifdef BNC_DEV_ENV
29-
#define BNC_API_BASE_URL @"http://localhost:3001"
30-
#endif
31-
32-
#define BNC_API_VERSION @"v1"
33-
34-
#endif
11+
extern NSString * const SDK_VERSION;
12+
extern NSString * const BNC_API_BASE_URL;
13+
extern NSString * const BNC_LINK_URL;
14+
extern NSString * const BNC_API_VERSION;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// BNCConfig.c
3+
// Branch-TestBed
4+
//
5+
// Created by edward on 12/12/16.
6+
// Copyright © 2016 Branch Metrics. All rights reserved.
7+
//
8+
9+
#include "BNCConfig.h"
10+
11+
NSString * const BNC_API_BASE_URL = @"https://api.branch.io";
12+
NSString * const BNC_API_VERSION = @"v1";
13+
NSString * const BNC_LINK_URL = @"https://bnc.lt";
14+
NSString * const SDK_VERSION = @"0.12.20";

src/ios/dependencies/Branch-SDK/BNCDeviceInfo.m

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ - (id)init {
4646
self.isRealHardwareId = isRealHardwareId;
4747
self.hardwareIdType = hardwareIdType;
4848
}
49-
49+
5050
self.vendorId = [BNCSystemObserver getVendorId];
5151
self.brandName = [BNCSystemObserver getBrand];
5252
self.modelName = [BNCSystemObserver getModel];
@@ -83,10 +83,21 @@ - (id)init {
8383

8484
}
8585

86-
self.browserUserAgent =
87-
[[[UIWebView alloc]
88-
initWithFrame:CGRectZero]
89-
stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
86+
void (^setUpBrowserUserAgent)() = ^() {
87+
self.browserUserAgent = [[[UIWebView alloc]
88+
initWithFrame:CGRectZero]
89+
stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
90+
};
91+
92+
if (NSThread.isMainThread) {
93+
94+
setUpBrowserUserAgent();
95+
96+
} else {
97+
98+
dispatch_sync(dispatch_get_main_queue(), setUpBrowserUserAgent);
99+
100+
}
90101

91102
return self;
92103
}

src/ios/dependencies/Branch-SDK/BNCPreferenceHelper.m

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -374,17 +374,20 @@ - (void)setUniversalLinkUrl:(NSString *)universalLinkUrl {
374374
}
375375

376376
- (NSString *)sessionParams {
377-
if (_sessionParams) {
378-
_sessionParams = [self readStringFromDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS];
377+
@synchronized (self) {
378+
if (!_sessionParams) {
379+
_sessionParams = [self readStringFromDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS];
380+
}
381+
return _sessionParams;
379382
}
380-
381-
return _sessionParams;
382383
}
383384

384385
- (void)setSessionParams:(NSString *)sessionParams {
385-
if (![_sessionParams isEqualToString:sessionParams]) {
386-
_sessionParams = sessionParams;
387-
[self writeObjectToDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS value:sessionParams];
386+
@synchronized (self) {
387+
if (![_sessionParams isEqualToString:sessionParams]) {
388+
_sessionParams = sessionParams;
389+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_SESSION_PARAMS value:sessionParams];
390+
}
388391
}
389392
}
390393

@@ -479,22 +482,28 @@ - (void)setRequestMetadataKey:(NSString *)key value:(NSObject *)value {
479482
}
480483

481484
- (NSMutableDictionary *)instrumentationDictionary {
482-
if (!_instrumentationDictionary) {
483-
_instrumentationDictionary = [NSMutableDictionary dictionary];
485+
@synchronized (self) {
486+
if (!_instrumentationDictionary) {
487+
_instrumentationDictionary = [NSMutableDictionary dictionary];
488+
}
489+
return _instrumentationDictionary;
484490
}
485-
return _instrumentationDictionary;
486491
}
487492

488493
- (void)addInstrumentationDictionaryKey:(NSString *)key value:(NSString *)value {
489-
if (key && value) {
490-
[self.instrumentationDictionary setObject:value forKey:key];
494+
@synchronized (self) {
495+
if (key && value) {
496+
[self.instrumentationDictionary setObject:value forKey:key];
497+
}
491498
}
492499
}
493500

494501
- (void)clearInstrumentationDictionary {
495-
NSArray *keys = [_instrumentationDictionary allKeys];
496-
for (int i = 0 ; i < [keys count]; i++) {
497-
[_instrumentationDictionary removeObjectForKey:keys[i]];
502+
@synchronized (self) {
503+
NSArray *keys = [_instrumentationDictionary allKeys];
504+
for (int i = 0 ; i < [keys count]; i++) {
505+
[_instrumentationDictionary removeObjectForKey:keys[i]];
506+
}
498507
}
499508
}
500509

@@ -606,42 +615,48 @@ - (NSDictionary *)getContentAnalyticsManifest {
606615
return (NSDictionary *)[self readObjectFromDefaults:BRANCH_PREFS_KEY_ANALYTICS_MANIFEST];
607616
}
608617

618+
609619
#pragma mark - Writing To Persistence
610620

621+
611622
- (void)writeIntegerToDefaults:(NSString *)key value:(NSInteger)value {
612-
self.persistenceDict[key] = @(value);
613-
[self persistPrefsToDisk];
623+
[self writeObjectToDefaults:key value:@(value)];
614624
}
615625

616626
- (void)writeBoolToDefaults:(NSString *)key value:(BOOL)value {
617-
self.persistenceDict[key] = @(value);
618-
[self persistPrefsToDisk];
627+
[self writeObjectToDefaults:key value:@(value)];
619628
}
620629

621630
- (void)writeObjectToDefaults:(NSString *)key value:(NSObject *)value {
622-
if (value) {
623-
self.persistenceDict[key] = value;
624-
}
625-
else {
626-
[self.persistenceDict removeObjectForKey:key];
631+
@synchronized (self) {
632+
if (value) {
633+
self.persistenceDict[key] = value;
634+
}
635+
else {
636+
[self.persistenceDict removeObjectForKey:key];
637+
}
638+
[self persistPrefsToDisk];
627639
}
628-
629-
[self persistPrefsToDisk];
630640
}
631641

632642
- (void)persistPrefsToDisk {
633643
@synchronized (self) {
634-
NSDictionary *persistenceDict = [self.persistenceDict copy];
644+
if (!self.persistenceDict) return;
645+
NSData *data = nil;
646+
@try {
647+
data = [NSKeyedArchiver archivedDataWithRootObject:self.persistenceDict];
648+
}
649+
@catch (id exception) {
650+
data = nil;
651+
[self logWarning:
652+
[NSString stringWithFormat:@"Exception creating preferences data: %@.",
653+
exception]];
654+
}
655+
if (!data) {
656+
[self logWarning:@"Can't create preferences data."];
657+
return;
658+
}
635659
NSBlockOperation *newPersistOp = [NSBlockOperation blockOperationWithBlock:^ {
636-
NSData *data = nil;
637-
@try {
638-
data = [NSKeyedArchiver archivedDataWithRootObject:persistenceDict];
639-
} @catch (id n) {
640-
}
641-
if (!data) {
642-
[self logWarning:@"Can't create preferences archive."];
643-
return;
644-
}
645660
NSError *error = nil;
646661
[data writeToURL:self.class.URLForPrefsFile
647662
options:NSDataWritingAtomic error:&error];
@@ -651,7 +666,7 @@ - (void)persistPrefsToDisk {
651666
@"Failed to persist preferences to disk: %@.", error]];
652667
}
653668
}];
654-
[self.persistPrefsQueue addOperation:newPersistOp];
669+
[self.persistPrefsQueue addOperation:newPersistOp];
655670
}
656671
}
657672

0 commit comments

Comments
 (0)