Skip to content

Commit ae31289

Browse files
Merge pull request #747 from BranchMetrics/Staging
Release v4.1.1
2 parents 8fe3376 + 8f524e7 commit ae31289

File tree

10 files changed

+269
-73
lines changed

10 files changed

+269
-73
lines changed

Branch-SDK/androidTest/io/branch/referral/BranchGAIDTest.java

Lines changed: 132 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ public void testInitSession_hasGAIDv1() throws Throwable {
4646
ServerRequest initRequest = queue.peekAt(0);
4747
doFinalUpdate(initRequest);
4848

49-
Assert.assertTrue(hasV1GAID(initRequest));
50-
Assert.assertFalse(hasV2GAID(initRequest));
49+
assumingLatIsDisabledHasGAIDv1(initRequest, true);
50+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(initRequest, true);
51+
assumingLatIsDisabledHasGAIDv2(initRequest, false);
52+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(initRequest, false);
5153
}
5254

5355
@Test
@@ -69,8 +71,10 @@ public void testActionCompleted_hasGAIDv1() throws Throwable {
6971
Assert.assertNotNull(serverRequest);
7072
doFinalUpdate(serverRequest);
7173

72-
Assert.assertTrue(hasV1GAID(serverRequest));
73-
Assert.assertFalse(hasV2GAID(serverRequest));
74+
assumingLatIsDisabledHasGAIDv1(serverRequest, true);
75+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(serverRequest, true);
76+
assumingLatIsDisabledHasGAIDv2(serverRequest, false);
77+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(serverRequest, false);
7478
}
7579

7680
@Test
@@ -90,8 +94,10 @@ public void testCommerceEvent_hasGAIDv1() throws Throwable {
9094
Assert.assertNotNull(serverRequest);
9195
doFinalUpdate(serverRequest);
9296

93-
Assert.assertTrue(hasV1GAID(serverRequest));
94-
Assert.assertFalse(hasV2GAID(serverRequest));
97+
assumingLatIsDisabledHasGAIDv1(serverRequest, true);
98+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(serverRequest, true);
99+
assumingLatIsDisabledHasGAIDv2(serverRequest, false);
100+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(serverRequest, false);
95101

96102
DebugLogQueue(getTestContext());
97103
}
@@ -116,8 +122,10 @@ public void testRedeemAwards_hasGAIDv1() throws Throwable {
116122
Assert.assertNotNull(serverRequest);
117123
doFinalUpdate(serverRequest);
118124

119-
Assert.assertTrue(hasV1GAID(serverRequest));
120-
Assert.assertFalse(hasV2GAID(serverRequest));
125+
assumingLatIsDisabledHasGAIDv1(serverRequest, true);
126+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(serverRequest, true);
127+
assumingLatIsDisabledHasGAIDv2(serverRequest, false);
128+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(serverRequest, false);
121129
}
122130

123131
@Test
@@ -131,8 +139,10 @@ public void testCreditHistory_hasGAIDv1() throws Throwable {
131139
Assert.assertNotNull(serverRequest);
132140
doFinalUpdate(serverRequest);
133141

134-
Assert.assertTrue(hasV1GAID(serverRequest));
135-
Assert.assertFalse(hasV2GAID(serverRequest));
142+
assumingLatIsDisabledHasGAIDv1(serverRequest, true);
143+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(serverRequest, true);
144+
assumingLatIsDisabledHasGAIDv2(serverRequest, false);
145+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(serverRequest, false);
136146
}
137147

138148
@Test
@@ -146,8 +156,10 @@ public void testIdentity_hasGAIDv1() throws Throwable {
146156
Assert.assertNotNull(serverRequest);
147157
doFinalUpdate(serverRequest);
148158

149-
Assert.assertTrue(hasV1GAID(serverRequest));
150-
Assert.assertFalse(hasV2GAID(serverRequest));
159+
assumingLatIsDisabledHasGAIDv1(serverRequest, true);
160+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(serverRequest, true);
161+
assumingLatIsDisabledHasGAIDv2(serverRequest, false);
162+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(serverRequest, false);
151163
}
152164

153165
@Test
@@ -177,10 +189,45 @@ public void testStandardEvent_hasGAIDv2() throws Throwable {
177189
ServerRequest serverRequest = logEvent(getTestContext(), branchEvent);
178190
Assert.assertNotNull(serverRequest);
179191

180-
Assert.assertFalse(hasV1GAID(serverRequest));
181-
Assert.assertTrue(hasV2GAID(serverRequest));
192+
assumingLatIsDisabledHasGAIDv1(serverRequest, false);
193+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(serverRequest, false);
194+
assumingLatIsDisabledHasGAIDv2(serverRequest, true);
195+
assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(serverRequest, true);
182196
}
183197

198+
// Check to see if the LAT is available (V1)
199+
private boolean hasV1LAT(ServerRequest request) {
200+
JSONObject jsonObject = request.getGetParams();
201+
int lat = jsonObject.optInt(Defines.Jsonkey.LATVal.getKey(), -1);
202+
return lat >= 0;
203+
}
204+
205+
// Check to see if the LAT is available (V2)
206+
private boolean hasV2LAT(ServerRequest request) {
207+
JSONObject jsonObject = request.getGetParams();
208+
JSONObject userDataObj = jsonObject.optJSONObject(Defines.Jsonkey.UserData.getKey());
209+
210+
if (userDataObj == null) {
211+
return false;
212+
}
213+
214+
int lat = userDataObj.optInt(Defines.Jsonkey.LimitedAdTracking.getKey(), -1);
215+
return lat >= 0;
216+
}
217+
218+
private boolean LATIsEnabledV1(ServerRequest request) {
219+
JSONObject jsonObject = request.getGetParams();
220+
return jsonObject.optInt(Defines.Jsonkey.LATVal.getKey(), -1) == 1;
221+
}
222+
223+
private boolean LATIsEnabledV2(ServerRequest request) {
224+
JSONObject jsonObject = request.getGetParams();
225+
JSONObject userDataObj = jsonObject.optJSONObject(Defines.Jsonkey.UserData.getKey());
226+
227+
Assert.assertNotNull(userDataObj);
228+
229+
return userDataObj.optInt(Defines.Jsonkey.LimitedAdTracking.getKey(), -1) == 1;
230+
}
184231

185232
// Check to see if the GAID is available (V1)
186233
private boolean hasV1GAID(ServerRequest request) {
@@ -202,5 +249,76 @@ private boolean hasV2GAID(ServerRequest request) {
202249
return (gaid.length() > 0);
203250
}
204251

252+
private void assumingLatIsDisabledHasGAIDv1(ServerRequest serverRequest, boolean assertTrue) {
253+
if (assertTrue) {
254+
Assert.assertTrue(hasV1LAT(serverRequest));
255+
256+
if (LATIsEnabledV1(serverRequest)) {
257+
Assert.assertFalse(hasV1GAID(serverRequest));
258+
} else {
259+
Assert.assertTrue(hasV1GAID(serverRequest));
260+
}
261+
} else {
262+
Assert.assertFalse(hasV1LAT(serverRequest));
263+
Assert.assertFalse(hasV1GAID(serverRequest));
264+
}
265+
}
266+
267+
private void assumingLatIsDisabledHasGAIDv2(ServerRequest serverRequest, boolean assertTrue) {
268+
if (assertTrue) {
269+
Assert.assertTrue(hasV2LAT(serverRequest));
270+
271+
if (LATIsEnabledV2(serverRequest)) {
272+
Assert.assertFalse(hasV2GAID(serverRequest));
273+
} else {
274+
Assert.assertTrue(hasV2GAID(serverRequest));
275+
}
276+
} else {
277+
Assert.assertFalse(hasV2LAT(serverRequest));
278+
Assert.assertFalse(hasV2GAID(serverRequest));
279+
}
280+
}
281+
282+
private String getAdIdFromAdIdsObject(ServerRequest request) {
283+
JSONObject jsonObject = request.getGetParams();
284+
JSONObject adIdsObject = jsonObject.optJSONObject(Defines.Jsonkey.AdvertisingIDs.getKey());
285+
if (adIdsObject == null) return "";
286+
287+
if (jsonObject.optString(Defines.Jsonkey.OS.getKey()).toLowerCase().contains("amazon")) {
288+
return adIdsObject.optString(Defines.Jsonkey.FireAdId.getKey());
289+
} else {
290+
return adIdsObject.optString(Defines.Jsonkey.AAID.getKey());
291+
}
292+
}
293+
294+
private void assumingLatIsDisabledHasAdIdFromAdIdsObjectV1(ServerRequest serverRequest, boolean assertTrue) {
295+
boolean hasAdIdFromAdIdsObject = getAdIdFromAdIdsObject(serverRequest).length() > 0;
296+
if (assertTrue) {
297+
Assert.assertTrue(hasV1LAT(serverRequest));
298+
299+
if (LATIsEnabledV1(serverRequest)) {
300+
Assert.assertFalse(hasAdIdFromAdIdsObject);
301+
} else {
302+
Assert.assertTrue(hasAdIdFromAdIdsObject);
303+
}
304+
} else {
305+
Assert.assertFalse(hasV1LAT(serverRequest));
306+
}
307+
}
308+
309+
private void assumingLatIsDisabledHasAdIdFromAdIdsObjectV2(ServerRequest serverRequest, boolean assertTrue) {
310+
boolean hasAdIdFromAdIdsObject = getAdIdFromAdIdsObject(serverRequest).length() > 0;
311+
if (assertTrue) {
312+
Assert.assertTrue(hasV2LAT(serverRequest));
313+
314+
if (LATIsEnabledV2(serverRequest)) {
315+
Assert.assertFalse(hasAdIdFromAdIdsObject);
316+
} else {
317+
Assert.assertTrue(hasAdIdFromAdIdsObject);
318+
}
319+
} else {
320+
Assert.assertFalse(hasV2LAT(serverRequest));
321+
}
322+
}
205323
}
206324

Branch-SDK/androidTest/io/branch/referral/DeviceInfoTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ public void testGAIDFetch() {
7070
Assert.assertNotNull(DeviceInfo.getInstance());
7171

7272
final CountDownLatch latch = new CountDownLatch(1);
73-
DeviceInfo.getInstance().getSystemObserver().prefetchGAdsParams(getTestContext(), new SystemObserver.GAdsParamsFetchEvents() {
73+
DeviceInfo.getInstance().getSystemObserver().prefetchAdsParams(getTestContext(), new SystemObserver.AdsParamsFetchEvents() {
7474
@Override
75-
public void onGAdsFetchFinished() {
75+
public void onAdsParamsFetchFinished() {
7676
latch.countDown();
7777
}
7878
});
@@ -83,6 +83,6 @@ public void onGAdsFetchFinished() {
8383
Assert.fail();
8484
}
8585

86-
Assert.assertFalse(DeviceInfo.isNullOrEmptyOrBlank(DeviceInfo.getInstance().getSystemObserver().getGAID()));
86+
Assert.assertFalse(DeviceInfo.isNullOrEmptyOrBlank(DeviceInfo.getInstance().getSystemObserver().getAID()));
8787
}
8888
}

Branch-SDK/src/io/branch/referral/Branch.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
* </pre>
7676
* -->
7777
*/
78-
public class Branch implements BranchViewHandler.IBranchViewEvents, SystemObserver.GAdsParamsFetchEvents, InstallListener.IInstallReferrerEvents {
78+
public class Branch implements BranchViewHandler.IBranchViewEvents, SystemObserver.AdsParamsFetchEvents, InstallListener.IInstallReferrerEvents {
7979

8080
private static final String BRANCH_LIBRARY_VERSION = "io.branch.sdk.android:library:" + BuildConfig.VERSION_NAME;
8181
private static final String GOOGLE_VERSION_TAG = "!SDK-VERSION-STRING!" + ":" + BRANCH_LIBRARY_VERSION;
@@ -440,7 +440,7 @@ private Branch(@NonNull Context context) {
440440
linkCache_ = new HashMap<>();
441441
instrumentationExtraData_ = new ConcurrentHashMap<>();
442442
if (!trackingController.isTrackingDisabled()) { // Do not get GAID when tracking is disabled
443-
isGAParamsFetchInProgress_ = deviceInfo_.getSystemObserver().prefetchGAdsParams(context,this);
443+
isGAParamsFetchInProgress_ = deviceInfo_.getSystemObserver().prefetchAdsParams(context,this);
444444
}
445445
// newIntent() delayed issue is only with Android M+ devices. So need to handle android M and above
446446
// PRS: Since this seem more reliable and not causing any integration issues adding this to all supported SDK versions
@@ -669,7 +669,6 @@ private static Branch getBranchInstance(@NonNull Context context, boolean isLive
669669
return branchReferral_;
670670
}
671671

672-
673672
/**
674673
* <p>Singleton method to return the pre-initialised, or newly initialise and return, a singleton
675674
* object of the type {@link Branch}.</p>
@@ -1783,7 +1782,7 @@ private void resetSessionReferredLink() {
17831782
}
17841783

17851784
@Override
1786-
public void onGAdsFetchFinished() {
1785+
public void onAdsParamsFetchFinished() {
17871786
isGAParamsFetchInProgress_ = false;
17881787
requestQueue_.unlockProcessWait(ServerRequest.PROCESS_WAIT_LOCK.GAID_FETCH_WAIT_LOCK);
17891788
if (performCookieBasedStrongMatchingOnGAIDAvailable) {
@@ -2620,7 +2619,7 @@ private void registerAppInit(BranchReferralInitListener
26202619
void registerAppReInit() {
26212620
// on re-init make sure GAID is available
26222621
if (!trackingController.isTrackingDisabled()) { // Do not get GAID when tracking is disabled
2623-
isGAParamsFetchInProgress_ = deviceInfo_.getSystemObserver().prefetchGAdsParams(context_, this);
2622+
isGAParamsFetchInProgress_ = deviceInfo_.getSystemObserver().prefetchAdsParams(context_, this);
26242623
}
26252624
if (networkCount_ != 0) {
26262625
networkCount_ = 0;
@@ -2798,6 +2797,8 @@ public void onActivityStarted(Activity activity) {
27982797
}
27992798
activityCnt_++;
28002799
isActivityCreatedAndLaunched = false;
2800+
2801+
maybeRefreshAdvertisingID(activity);
28012802
}
28022803

28032804
@Override
@@ -2848,7 +2849,20 @@ public void onActivityDestroyed(Activity activity) {
28482849
}
28492850
BranchViewHandler.getInstance().onCurrentActivityDestroyed(activity);
28502851
}
2851-
2852+
2853+
private void maybeRefreshAdvertisingID(Context context) {
2854+
boolean fullyInitialized = trackingController != null &&
2855+
deviceInfo_ != null && deviceInfo_.getSystemObserver() != null &&
2856+
prefHelper_ != null && prefHelper_.getSessionID() != null;
2857+
if (!fullyInitialized) return;
2858+
2859+
final String AIDInitializationSessionID = deviceInfo_.getSystemObserver().getAIDInitializationSessionID();
2860+
boolean AIDInitializedInThisSession = prefHelper_.getSessionID().equals(AIDInitializationSessionID);
2861+
2862+
if (!AIDInitializedInThisSession && !isGAParamsFetchInProgress_ && !trackingController.isTrackingDisabled()) {
2863+
isGAParamsFetchInProgress_ = deviceInfo_.getSystemObserver().prefetchAdsParams(context,Branch.this);
2864+
}
2865+
}
28522866
}
28532867

28542868
private void startSession(Activity activity) {

Branch-SDK/src/io/branch/referral/BranchStrongMatchHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private Uri buildStrongMatchUrl(String matchDomain, DeviceInfo deviceInfo, PrefH
163163
uriString += "&" + Defines.Jsonkey.HardwareIDType.getKey() + "=" + hardwareIDTypeVal;
164164

165165
// Add GAID if available
166-
String gaid = deviceInfo.getSystemObserver().getGAID();
166+
String gaid = deviceInfo.getSystemObserver().getAID();
167167
if (gaid != null && !BranchUtil.checkTestMode(context)) {
168168
uriString += "&" + Defines.Jsonkey.GoogleAdvertisingID.getKey() + "=" + gaid;
169169
}

Branch-SDK/src/io/branch/referral/Defines.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public enum Jsonkey {
7272
LinkIdentifier("link_identifier"),
7373
GoogleAdvertisingID("google_advertising_id"), // V1 Only, "Google Advertising Id"
7474
AAID("aaid"), // V2 Only, "Android Advertising Id"
75+
FireAdId("fire_ad_id"),
7576
LATVal("lat_val"),
7677
LimitedAdTracking("limit_ad_tracking"),
7778
limitFacebookTracking("limit_facebook_tracking"),
@@ -84,6 +85,7 @@ public enum Jsonkey {
8485
WiFi("wifi"),
8586
LocalIP("local_ip"),
8687
UserData("user_data"),
88+
AdvertisingIDs("advertising_ids"),
8789
DeveloperIdentity("developer_identity"),
8890
UserAgent("user_agent"),
8991
SDK("sdk"),

Branch-SDK/src/io/branch/referral/DeviceInfo.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ void updateRequestWithV1Params(JSONObject requestObj) {
8484
requestObj.put(Defines.Jsonkey.WiFi.getKey(), SystemObserver.getWifiConnected(context_));
8585
requestObj.put(Defines.Jsonkey.UIMode.getKey(), SystemObserver.getUIMode(context_));
8686

87-
String osName = SystemObserver.getOS();
87+
String osName = SystemObserver.getOS(context_);
8888
if (!isNullOrEmptyOrBlank(osName)) {
8989
requestObj.put(Defines.Jsonkey.OS.getKey(), osName);
9090
}
@@ -146,7 +146,7 @@ void updateRequestWithV2Params(Context context, PrefHelper prefHelper, JSONObjec
146146
requestObj.put(Defines.Jsonkey.ScreenHeight.getKey(), displayMetrics.heightPixels);
147147
requestObj.put(Defines.Jsonkey.ScreenWidth.getKey(), displayMetrics.widthPixels);
148148

149-
String osName = SystemObserver.getOS();
149+
String osName = SystemObserver.getOS(context_);
150150
if (!isNullOrEmptyOrBlank(osName)) {
151151
requestObj.put(Defines.Jsonkey.OS.getKey(), osName);
152152
}
@@ -266,7 +266,7 @@ public SystemObserver.UniqueId getHardwareID() {
266266
}
267267

268268
public String getOsName() {
269-
return systemObserver_.getOS();
269+
return systemObserver_.getOS(context_);
270270
}
271271

272272
// PRS : User agent is checked only from api-17

0 commit comments

Comments
 (0)