Skip to content

Commit 8927069

Browse files
authored
Merge pull request #1293 from BranchMetrics/SDK-2060-Add-endpoint-manager
Sdk 2060 add endpoint manager
2 parents 3294927 + 3997ecd commit 8927069

File tree

10 files changed

+330
-21
lines changed

10 files changed

+330
-21
lines changed
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
//
2+
// BNCAPIServerTest.m
3+
// Branch-SDK-Tests
4+
//
5+
// Created by Nidhi Dixit on 9/6/23.
6+
// Copyright © 2023 Branch, Inc. All rights reserved.
7+
//
8+
9+
#import <XCTest/XCTest.h>
10+
#import "BNCServerAPI.h"
11+
#import "BNCSystemObserver.h"
12+
#import "BNCConfig.h"
13+
#import "BranchConstants.h"
14+
15+
@interface BNCAPIServerTest : XCTestCase
16+
@property (nonatomic, strong, readwrite) BNCServerAPI *serverAPI;
17+
@property (nonatomic, strong, readwrite) NSString *optedInStatus;
18+
@end
19+
20+
@implementation BNCAPIServerTest
21+
22+
- (void)setUp {
23+
self.serverAPI = [BNCServerAPI sharedInstance];
24+
self.optedInStatus = [BNCSystemObserver attOptedInStatus];
25+
}
26+
27+
- (void)testGetBaseURLWithVersion {
28+
29+
NSString *urlStr = [[BNCServerAPI sharedInstance] getBaseURLWithVersion];
30+
NSString *expectedUrlStr;
31+
32+
if ([self.optedInStatus isEqualToString:@"authorized"]){
33+
expectedUrlStr = [BNC_SAFETRACK_API_URL stringByAppendingFormat:@"/%@/", BNC_API_VERSION_3];
34+
} else {
35+
expectedUrlStr = [BNC_API_URL stringByAppendingFormat:@"/%@/", BNC_API_VERSION_3];
36+
}
37+
38+
XCTAssertTrue([urlStr isEqualToString:expectedUrlStr]);
39+
40+
[self.serverAPI setUseEUServers:true];
41+
urlStr = [[BNCServerAPI sharedInstance] getBaseURLWithVersion];
42+
43+
if ([self.optedInStatus isEqualToString:@"authorized"]){
44+
expectedUrlStr = [BNC_SAFETRACK_EU_API_URL stringByAppendingFormat:@"/%@/", BNC_API_VERSION_3];
45+
} else {
46+
expectedUrlStr = [BNC_EU_API_URL stringByAppendingFormat:@"/%@/", BNC_API_VERSION_3];
47+
}
48+
49+
XCTAssertTrue([urlStr isEqualToString:expectedUrlStr]);
50+
[self.serverAPI setUseEUServers:false];
51+
}
52+
53+
- (void)testInstallServiceURL {
54+
NSURL *url;
55+
NSString *expectedUrlStr;
56+
57+
[self.serverAPI setUseEUServers:true];
58+
url = [[BNCServerAPI sharedInstance] installServiceURL];
59+
60+
if ([self.optedInStatus isEqualToString:@"authorized"]){
61+
expectedUrlStr = [BNC_SAFETRACK_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_INSTALL];
62+
} else {
63+
expectedUrlStr = [BNC_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_INSTALL];
64+
}
65+
66+
XCTAssertTrue([url isEqual:[ NSURL URLWithString:expectedUrlStr]]);
67+
[self.serverAPI setUseEUServers:false];
68+
}
69+
70+
- (void)testOpenServiceURL {
71+
NSURL *url;
72+
NSString *expectedUrlStr;
73+
74+
[self.serverAPI setUseEUServers:true];
75+
url = [[BNCServerAPI sharedInstance] openServiceURL];
76+
77+
if ([self.optedInStatus isEqualToString:@"authorized"]){
78+
expectedUrlStr = [BNC_SAFETRACK_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_OPEN];
79+
} else {
80+
expectedUrlStr = [BNC_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_OPEN];
81+
}
82+
83+
XCTAssertTrue([url isEqual:[ NSURL URLWithString:expectedUrlStr]]);
84+
[self.serverAPI setUseEUServers:false];
85+
}
86+
87+
- (void)testEventServiceURL {
88+
NSURL *url;
89+
NSString *expectedUrlStr;
90+
91+
[self.serverAPI setUseEUServers:true];
92+
url = [[BNCServerAPI sharedInstance] eventServiceURL];
93+
94+
if ([self.optedInStatus isEqualToString:@"authorized"]){
95+
expectedUrlStr = [BNC_SAFETRACK_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_USER_COMPLETED_ACTION];
96+
} else {
97+
expectedUrlStr = [BNC_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_USER_COMPLETED_ACTION];
98+
}
99+
100+
XCTAssertTrue([url isEqual:[ NSURL URLWithString:expectedUrlStr]]);
101+
[self.serverAPI setUseEUServers:false];
102+
}
103+
104+
- (void)testLinkServiceURL {
105+
NSURL *url;
106+
NSString *expectedUrlStr;
107+
108+
[self.serverAPI setUseEUServers:true];
109+
url = [[BNCServerAPI sharedInstance] linkServiceURL];
110+
111+
if ([self.optedInStatus isEqualToString:@"authorized"]){
112+
expectedUrlStr = [BNC_SAFETRACK_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_GET_SHORT_URL];
113+
} else {
114+
expectedUrlStr = [BNC_EU_API_URL stringByAppendingFormat:@"/%@/%@", BNC_API_VERSION_3, BRANCH_REQUEST_ENDPOINT_GET_SHORT_URL];
115+
}
116+
117+
XCTAssertTrue([url isEqual:[ NSURL URLWithString:expectedUrlStr]]);
118+
[self.serverAPI setUseEUServers:false];
119+
}
120+
121+
@end

Branch-TestBed/Branch-TestBed.xcodeproj/project.pbxproj

Lines changed: 36 additions & 20 deletions
Large diffs are not rendered by default.

BranchSDK.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,12 @@
500500
E761E92429E61DA000E55C98 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E761E92029E61DA000E55C98 /* BNCEventUtils.h */; };
501501
E761E92529E61DA000E55C98 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E761E92029E61DA000E55C98 /* BNCEventUtils.h */; };
502502
E761E92629E61DA000E55C98 /* BNCEventUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E761E92029E61DA000E55C98 /* BNCEventUtils.h */; };
503+
E7653F052A9E737700C7C040 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E7653F042A9E737700C7C040 /* BNCServerAPI.m */; };
504+
E7653F062A9E737700C7C040 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E7653F042A9E737700C7C040 /* BNCServerAPI.m */; };
505+
E7653F072A9E737700C7C040 /* BNCServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = E7653F042A9E737700C7C040 /* BNCServerAPI.m */; };
506+
E7653F092A9E73AA00C7C040 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */; settings = {ATTRIBUTES = (Public, ); }; };
507+
E7653F0A2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */; settings = {ATTRIBUTES = (Public, ); }; };
508+
E7653F0B2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */; settings = {ATTRIBUTES = (Public, ); }; };
503509
/* End PBXBuildFile section */
504510

505511
/* Begin PBXContainerItemProxy section */
@@ -716,6 +722,8 @@
716722
C1CDEF322A95718C0098524F /* BNCProductCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCProductCategory.h; sourceTree = "<group>"; };
717723
E761E91F29E61DA000E55C98 /* BNCEventUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BNCEventUtils.m; sourceTree = "<group>"; };
718724
E761E92029E61DA000E55C98 /* BNCEventUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNCEventUtils.h; sourceTree = "<group>"; };
725+
E7653F042A9E737700C7C040 /* BNCServerAPI.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BNCServerAPI.m; sourceTree = "<group>"; };
726+
E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BNCServerAPI.h; sourceTree = "<group>"; };
719727
/* End PBXFileReference section */
720728

721729
/* Begin PBXFrameworksBuildPhase section */
@@ -919,6 +927,8 @@
919927
5F2210342894A33E00C5B190 /* BranchOpenRequest.m */,
920928
5F1B240729148CBD003BEEC7 /* BranchPasteControl.h */,
921929
5F1B240829148CBD003BEEC7 /* BranchPasteControl.m */,
930+
E7653F082A9E73AA00C7C040 /* BNCServerAPI.h */,
931+
E7653F042A9E737700C7C040 /* BNCServerAPI.m */,
922932
5F2210542894A33F00C5B190 /* BranchPluginSupport.h */,
923933
5F2210772894A33F00C5B190 /* BranchPluginSupport.m */,
924934
5F2210982894A34000C5B190 /* BranchQRCode.h */,
@@ -1017,6 +1027,7 @@
10171027
5F2210F12894A34000C5B190 /* BNCLinkData.h in Headers */,
10181028
5F1B240929148CBD003BEEC7 /* BranchPasteControl.h in Headers */,
10191029
5F2210DE2894A34000C5B190 /* BNCPreferenceHelper.h in Headers */,
1030+
E7653F092A9E73AA00C7C040 /* BNCServerAPI.h in Headers */,
10201031
5F22112D2894A34000C5B190 /* BNCServerInterface.h in Headers */,
10211032
5F22113B2894A34000C5B190 /* BNCServerRequest.h in Headers */,
10221033
5F2211462894A34000C5B190 /* BNCServerRequestQueue.h in Headers */,
@@ -1102,6 +1113,7 @@
11021113
5F1B240A29148CBD003BEEC7 /* BranchPasteControl.h in Headers */,
11031114
5FF9DE9D28EE797300D62DE1 /* BNCCallbacks.h in Headers */,
11041115
5FF9DE9F28EE797300D62DE1 /* BNCConfig.h in Headers */,
1116+
E7653F0A2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */,
11051117
5FF9DEA028EE797300D62DE1 /* BNCContentDiscoveryManager.h in Headers */,
11061118
5FF9DEA128EE797300D62DE1 /* BNCCrashlyticsWrapper.h in Headers */,
11071119
5FF9DEA228EE797300D62DE1 /* BNCDeepLinkViewControllerInstance.h in Headers */,
@@ -1197,6 +1209,7 @@
11971209
5F7903B628B59147003144CD /* BNCServerRequest.h in Headers */,
11981210
5F7903B528B59147003144CD /* BNCServerInterface.h in Headers */,
11991211
5F7903B228B59146003144CD /* BNCPreferenceHelper.h in Headers */,
1212+
E7653F0B2A9E73AA00C7C040 /* BNCServerAPI.h in Headers */,
12001213
5F7903AA28B59146003144CD /* BNCLinkData.h in Headers */,
12011214
5F7903A928B59146003144CD /* BNCLinkCache.h in Headers */,
12021215
5F7903A628B59146003144CD /* BNCInitSessionResponse.h in Headers */,
@@ -1622,6 +1635,7 @@
16221635
5F2211352894A34000C5B190 /* BNCCallbackMap.m in Sources */,
16231636
5F2210C82894A34000C5B190 /* NSString+Branch.m in Sources */,
16241637
5F2210DF2894A34000C5B190 /* UIViewController+Branch.m in Sources */,
1638+
E7653F052A9E737700C7C040 /* BNCServerAPI.m in Sources */,
16251639
5F2210FE2894A34000C5B190 /* BNCFacebookAppLinks.m in Sources */,
16261640
5F2211322894A34000C5B190 /* BranchUniversalObject.m in Sources */,
16271641
5F2210D12894A34000C5B190 /* BranchShortUrlSyncRequest.m in Sources */,
@@ -1728,6 +1742,7 @@
17281742
5FF9DE6B28EE78A800D62DE1 /* BranchInstallRequest.m in Sources */,
17291743
5FF9DE6D28EE78A800D62DE1 /* BranchJsonConfig.m in Sources */,
17301744
5FF9DE6F28EE78A800D62DE1 /* BranchLastAttributedTouchData.m in Sources */,
1745+
E7653F062A9E737700C7C040 /* BNCServerAPI.m in Sources */,
17311746
5FF9DE7128EE78A800D62DE1 /* BranchLATDRequest.m in Sources */,
17321747
5FF9DE7328EE78A800D62DE1 /* BranchLinkProperties.m in Sources */,
17331748
5FF9DE7728EE78A800D62DE1 /* BranchOpenRequest.m in Sources */,
@@ -1804,6 +1819,7 @@
18041819
5F79042A28B5C93F003144CD /* BranchShortUrlSyncRequest.m in Sources */,
18051820
5F79042B28B5C93F003144CD /* BranchSpotlightUrlRequest.m in Sources */,
18061821
5F79042C28B5C93F003144CD /* BranchUniversalObject.m in Sources */,
1822+
E7653F072A9E737700C7C040 /* BNCServerAPI.m in Sources */,
18071823
5F79042E28B5C93F003144CD /* NSError+Branch.m in Sources */,
18081824
5F79042F28B5C93F003144CD /* NSMutableDictionary+Branch.m in Sources */,
18091825
5F79043028B5C93F003144CD /* NSString+Branch.m in Sources */,

BranchSDK/BNCConfig.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,9 @@ FOUNDATION_EXPORT NSString*_Nonnull const BNC_API_BASE_URL;
1818
FOUNDATION_EXPORT NSString*_Nonnull const BNC_API_VERSION;
1919
FOUNDATION_EXPORT NSString*_Nonnull const BNC_LINK_URL;
2020
FOUNDATION_EXPORT NSString* _Nonnull const BNC_CDN_URL;
21+
22+
FOUNDATION_EXPORT NSString* _Nonnull const BNC_API_URL;
23+
FOUNDATION_EXPORT NSString* _Nonnull const BNC_SAFETRACK_API_URL;
24+
FOUNDATION_EXPORT NSString* _Nonnull const BNC_EU_API_URL;
25+
FOUNDATION_EXPORT NSString* _Nonnull const BNC_SAFETRACK_EU_API_URL;
26+
FOUNDATION_EXPORT NSString* _Nonnull const BNC_API_VERSION_3;

BranchSDK/BNCConfig.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,10 @@
1313
NSString * const BNC_LINK_URL = @"https://bnc.lt";
1414
NSString * const BNC_SDK_VERSION = @"2.2.0";
1515
NSString * const BNC_CDN_URL = @"https://cdn.branch.io";
16+
17+
NSString* const BNC_API_URL = @"https://api3.branch.io";
18+
NSString* const BNC_SAFETRACK_API_URL = @"https://api-safetrack.branch.io";
19+
NSString* const BNC_EU_API_URL = @"https://api3-eu.branch.io";
20+
NSString* const BNC_SAFETRACK_EU_API_URL = @"https://api-safetrack-eu.branch.io";
21+
22+
NSString* const BNC_API_VERSION_3 = @"v3";

BranchSDK/BNCPreferenceHelper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ NSURL* /* _Nonnull */ BNCURLForBranchDirectory(void);
7878
@property (strong, nonatomic) NSDate *firstAppLaunchTime;
7979
@property (assign, nonatomic) BOOL invokeRegisterApp;
8080

81+
@property (assign, nonatomic) BOOL useEUServers;
82+
8183
- (void) clearTrackingInformation;
8284

8385
+ (BNCPreferenceHelper *)sharedInstance;

BranchSDK/BNCPreferenceHelper.m

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
static NSString * const BRANCH_PREFS_KEY_SKAN_HIGHEST_CONV_VALUE_SENT = @"bnc_skan_send_highest_conv_value";
5757
static NSString * const BRANCH_PREFS_KEY_SKAN_INVOKE_REGISTER_APP = @"bnc_invoke_register_app";
5858

59+
static NSString * const BRANCH_PREFS_KEY_USE_EU_SERVERS = @"bnc_use_EU_servers";
60+
5961
static NSString * const BRANCH_PREFS_KEY_REFFERING_URL_QUERY_PARAMETERS = @"bnc_referring_url_query_parameters";
6062

6163
static NSString * const BRANCH_PREFS_KEY_LOG_IAP_AS_EVENTS = @"bnc_log_iap_as_events";
@@ -111,7 +113,8 @@ @implementation BNCPreferenceHelper
111113
highestConversionValueSent = _highestConversionValueSent,
112114
referringURLQueryParameters = _referringURLQueryParameters,
113115
anonID = _anonID,
114-
patternListURL = _patternListURL;
116+
patternListURL = _patternListURL,
117+
useEUServers = _useEUServers;
115118

116119
+ (BNCPreferenceHelper *)sharedInstance {
117120
static BNCPreferenceHelper *preferenceHelper;
@@ -814,6 +817,23 @@ - (void) setInvokeRegisterApp:(BOOL)invoke {
814817
}
815818
}
816819

820+
- (BOOL) useEUServers {
821+
@synchronized(self) {
822+
NSNumber *b = (id) [self readObjectFromDefaults:BRANCH_PREFS_KEY_USE_EU_SERVERS];
823+
if ([b isKindOfClass:NSNumber.class])
824+
return [b boolValue];
825+
return false;
826+
}
827+
}
828+
829+
- (void)setUseEUServers:(BOOL)useEUServers {
830+
@synchronized(self) {
831+
NSNumber *b = [NSNumber numberWithBool:useEUServers];
832+
[self writeObjectToDefaults:BRANCH_PREFS_KEY_USE_EU_SERVERS value:b];
833+
834+
}
835+
}
836+
817837
- (void) clearTrackingInformation {
818838
@synchronized(self) {
819839
/*

BranchSDK/BNCServerAPI.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
//
2+
// BNCServerAPI.h
3+
// BranchSDK
4+
//
5+
// Created by Nidhi Dixit on 8/29/23.
6+
//
7+
8+
#if __has_feature(modules)
9+
@import Foundation;
10+
#else
11+
#import <Foundation/Foundation.h>
12+
#endif
13+
14+
NS_ASSUME_NONNULL_BEGIN
15+
16+
@interface BNCServerAPI : NSObject
17+
18+
+ (BNCServerAPI *)sharedInstance;
19+
20+
// retrieves appropriate service URL
21+
- (NSURL *)installServiceURL;
22+
- (NSURL *)openServiceURL;
23+
- (NSURL *)eventServiceURL;
24+
- (NSURL *)linkServiceURL;
25+
26+
// initially set when IDFA is allowed
27+
- (BOOL)useTrackingDomain;
28+
29+
// TODO : Add a config or public API to expose this to clients
30+
// Enable/Disable EU domains
31+
- (void)setUseEUServers:(BOOL)useEUServers;
32+
33+
- (BOOL)useEUServers;
34+
35+
- (NSString *) getBaseURLWithVersion;
36+
@end
37+
38+
NS_ASSUME_NONNULL_END
39+
40+
41+

BranchSDK/BNCServerAPI.m

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
//
2+
// BNCServerAPI.m
3+
// BranchSDK
4+
//
5+
// Created by Nidhi Dixit on 8/29/23.
6+
//
7+
8+
#import "BNCServerAPI.h"
9+
#import "BNCPreferenceHelper.h"
10+
#import "BNCSystemObserver.h"
11+
#import "BNCConfig.h"
12+
#import "BranchConstants.h"
13+
14+
@implementation BNCServerAPI
15+
16+
+ (BNCServerAPI *)sharedInstance {
17+
static BNCServerAPI *serverAPI;
18+
static dispatch_once_t onceToken;
19+
20+
dispatch_once(&onceToken, ^{
21+
serverAPI = [[BNCServerAPI alloc] init];
22+
});
23+
24+
return serverAPI;
25+
}
26+
27+
- (NSURL *)installServiceURL{
28+
return [NSURL URLWithString: [[self getBaseURLWithVersion] stringByAppendingString: BRANCH_REQUEST_ENDPOINT_INSTALL]];
29+
}
30+
31+
- (NSURL *)openServiceURL {
32+
return [NSURL URLWithString: [[self getBaseURLWithVersion] stringByAppendingString: BRANCH_REQUEST_ENDPOINT_OPEN]];
33+
}
34+
35+
- (NSURL *)eventServiceURL{
36+
return [NSURL URLWithString: [[self getBaseURLWithVersion] stringByAppendingString: BRANCH_REQUEST_ENDPOINT_USER_COMPLETED_ACTION]];
37+
}
38+
39+
- (NSURL *)linkServiceURL {
40+
return [NSURL URLWithString: [[self getBaseURLWithVersion] stringByAppendingString: BRANCH_REQUEST_ENDPOINT_GET_SHORT_URL]];
41+
}
42+
43+
- (BOOL)useTrackingDomain {
44+
NSString* optedInStatus = [BNCSystemObserver attOptedInStatus];
45+
46+
if ([optedInStatus isEqualToString:@"authorized"]){
47+
return TRUE;
48+
}
49+
return FALSE;
50+
}
51+
52+
- (void)setUseEUServers:(BOOL)useEUServers {
53+
[[BNCPreferenceHelper sharedInstance] setUseEUServers: useEUServers];
54+
}
55+
56+
- (BOOL)useEUServers {
57+
return [[BNCPreferenceHelper sharedInstance] useEUServers];
58+
}
59+
60+
- (NSString *) getBaseURLWithVersion {
61+
NSString * urlString;
62+
63+
if ([self useTrackingDomain] && [ self useEUServers]){
64+
urlString = BNC_SAFETRACK_EU_API_URL;
65+
} else if ([self useTrackingDomain]) {
66+
urlString = BNC_SAFETRACK_API_URL;
67+
} else if ([self useEUServers]){
68+
urlString = BNC_EU_API_URL;
69+
} else {
70+
urlString = BNC_API_URL;
71+
}
72+
73+
urlString = [urlString stringByAppendingFormat:@"/%@/", BNC_API_VERSION_3];
74+
return urlString;
75+
}
76+
77+
@end

0 commit comments

Comments
 (0)