Skip to content

Commit 09c98a2

Browse files
authored
Added app id pre check for changing app id during runtime (#798)
* remoteParams is set null when a app id change occurs * Unit test written to test app id change during runtime * Fixed a spelling mistake in OneSignalRemoteParams
1 parent 9612658 commit 09c98a2

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,11 @@ public static void init(Context context, String googleProjectNumber, String oneS
627627
if (isSubscriptionStatusUninitializable())
628628
return;
629629

630+
// Pre-check on app id to make sure init of SDK is performed properly
631+
// Usually when the app id is changed during runtime so that SDK is reinitialized properly
632+
if (appId != null && !appId.equals(oneSignalAppId))
633+
initDone = false;
634+
630635
if (initDone) {
631636
if (mInitBuilder.mNotificationOpenedHandler != null)
632637
fireCallbackForOpenedNotifications();
@@ -638,8 +643,6 @@ public static void init(Context context, String googleProjectNumber, String oneS
638643

639644
saveFilterOtherGCMReceivers(mInitBuilder.mFilterOtherGCMReceivers);
640645

641-
// NOTE: This must be called here, something above conflicts with the handlers internals
642-
// causing a crash at OneSignal.deepClone()
643646
handleActivityLifecycleHandler(context);
644647

645648
lastTrackedFocusTime = SystemClock.elapsedRealtime();
@@ -704,6 +707,7 @@ private static void handleAppIdChange() {
704707
Log(LOG_LEVEL.DEBUG, "APP ID changed, clearing user id as it is no longer valid.");
705708
SaveAppId(appId);
706709
OneSignalStateSynchronizer.resetCurrentState();
710+
remoteParams = null;
707711
}
708712
}
709713
else {

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalRemoteParams.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ interface CallBack {
2323
void complete(Params params);
2424
}
2525

26-
private static int androidParamsReties = 0;
26+
private static int androidParamsRetries = 0;
2727

2828
private static final int INCREASE_BETWEEN_RETRIES = 10_000;
2929
private static final int MIN_WAIT_BETWEEN_RETRIES = 30_000;
@@ -40,13 +40,13 @@ void onFailure(int statusCode, String response, Throwable throwable) {
4040

4141
new Thread(new Runnable() {
4242
public void run() {
43-
int sleepTime = MIN_WAIT_BETWEEN_RETRIES + androidParamsReties * INCREASE_BETWEEN_RETRIES;
43+
int sleepTime = MIN_WAIT_BETWEEN_RETRIES + androidParamsRetries * INCREASE_BETWEEN_RETRIES;
4444
if (sleepTime > MAX_WAIT_BETWEEN_RETRIES)
4545
sleepTime = MAX_WAIT_BETWEEN_RETRIES;
4646

4747
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "Failed to get Android parameters, trying again in " + (sleepTime / 1_000) + " seconds.");
4848
OSUtils.sleep(sleepTime);
49-
androidParamsReties++;
49+
androidParamsRetries++;
5050
makeAndroidParamsRequest(callBack);
5151
}
5252
}, "OS_PARAMS_REQUEST").start();

OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ public void testGCMTimeOutThenSuccessesLater() throws Exception {
890890
}
891891

892892
@Test
893-
public void testChangeAppId() throws Exception {
893+
public void testChangeAppId_fromColdStart() throws Exception {
894894
OneSignalInit();
895895
threadAndTaskWait();
896896

@@ -902,6 +902,22 @@ public void testChangeAppId() throws Exception {
902902
assertEquals(normalCreateFieldCount, ShadowOneSignalRestClient.lastPost.length());
903903
}
904904

905+
/**
906+
* Similar to testChangeAppId_fromColdStart test
907+
*/
908+
@Test
909+
public void testChangeAppId_duringRuntime() throws Exception {
910+
OneSignalInit();
911+
threadAndTaskWait();
912+
913+
int normalCreateFieldCount = ShadowOneSignalRestClient.lastPost.length();
914+
ShadowOneSignalRestClient.resetStatics();
915+
OneSignal.init(blankActivity, "123456789", "99f7f966-d8cc-11e4-bed1-df8f05be55b2");
916+
threadAndTaskWait();
917+
918+
assertEquals(normalCreateFieldCount, ShadowOneSignalRestClient.lastPost.length());
919+
}
920+
905921
@Test
906922
public void testUserDeletedFromServer() throws Exception {
907923
// First cold boot normal

0 commit comments

Comments
 (0)