Skip to content

Commit 96058ed

Browse files
authored
Merge pull request #1231 from OneSignal/merge/external_user_id_auth_changes
Merge/external user id auth changes
2 parents d8720c1 + 605c9ce commit 96058ed

File tree

6 files changed

+140
-5
lines changed

6 files changed

+140
-5
lines changed

OneSignalSDK.jar

34 Bytes
Binary file not shown.

OneSignalSDK/onesignal/maven-push.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class Global {
2424
static def POM_NAME = 'OneSignal'
2525
static def POM_ARTIFACT_ID = 'OneSignal'
2626
static def POM_PACKAGING = 'aar'
27-
static def VERSION_NAME = '3.15.5'
27+
static def VERSION_NAME = '3.15.6'
2828

2929
static def GROUP_ID = 'com.onesignal'
3030
static def POM_DESCRIPTION = 'OneSignal Android SDK'

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ static void setInForeground(boolean inForeground) {
347347
private static TrackAmazonPurchase trackAmazonPurchase;
348348
private static TrackFirebaseAnalytics trackFirebaseAnalytics;
349349

350-
private static final String VERSION = "031505";
350+
private static final String VERSION = "031506";
351351
public static String getSdkVersionRaw() {
352352
return VERSION;
353353
}
@@ -1401,7 +1401,7 @@ public void run() {
14011401
return;
14021402
}
14031403

1404-
if (getRemoteParams().useEmailAuth && emailAuthHash == null) {
1404+
if (getRemoteParams().useEmailAuth && (emailAuthHash == null || emailAuthHash.length() == 0)) {
14051405
String errorMessage = "Email authentication (auth token) is set to REQUIRED for this application. Please provide an auth token from your backend server or change the setting in the OneSignal dashboard.";
14061406
if (callback != null)
14071407
callback.onFailure(new EmailUpdateError(EmailErrorType.REQUIRES_EMAIL_AUTH, errorMessage));
@@ -1494,7 +1494,7 @@ public void run() {
14941494
return;
14951495
}
14961496

1497-
if (getRemoteParams() != null && getRemoteParams().useUserIdAuth && externalIdAuthHash == null) {
1497+
if (getRemoteParams() != null && getRemoteParams().useUserIdAuth && (externalIdAuthHash == null || externalIdAuthHash.length() == 0)) {
14981498
String errorMessage = "External Id authentication (auth token) is set to REQUIRED for this application. Please provide an auth token from your backend server or change the setting in the OneSignal dashboard.";
14991499
if (completionCallback != null)
15001500
completionCallback.onFailure(new ExternalIdError(ExternalIdErrorType.REQUIRES_EXTERNAL_ID_AUTH, errorMessage));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ static private void processJson(String json, final @NonNull Callback callBack) {
172172

173173
Params params = new Params() {{
174174
enterprise = responseJson.optBoolean("enterp", false);
175-
useEmailAuth = responseJson.optBoolean("use_email_auth", false);
175+
useEmailAuth = responseJson.optBoolean("require_email_auth", false);
176176
useUserIdAuth = responseJson.optBoolean("require_user_id_auth", false);
177177
notificationChannels = responseJson.optJSONArray("chnl_lst");
178178
firebaseAnalytics = responseJson.optBoolean("fba", false);

OneSignalSDK/onesignal/src/unity/java/com/onesignal/OneSignalUnityProxy.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,27 @@ public void onComplete(JSONObject results) {
311311
});
312312
}
313313

314+
public void setExternalUserId(final String delegateId, String externalId, String externalIdAuthHash) {
315+
OneSignal.setExternalUserId(externalId, externalIdAuthHash, new OneSignal.OSExternalUserIdUpdateCompletionHandler() {
316+
@Override
317+
public void onComplete(JSONObject results) {
318+
try {
319+
JSONObject params = new JSONObject();
320+
params.put("delegate_id", new JSONObject().put("completion", delegateId).toString());
321+
if (results == null) {
322+
params.put("response", "");
323+
OneSignalUnityProxy.unitySafeInvoke("onExternalUserIdUpdateCompletion", params.toString());
324+
return;
325+
}
326+
params.put("response", results.toString());
327+
OneSignalUnityProxy.unitySafeInvoke("onExternalUserIdUpdateCompletion", params.toString());
328+
} catch (JSONException e) {
329+
e.printStackTrace();
330+
}
331+
}
332+
});
333+
}
334+
314335
public void removeExternalUserId() {
315336
OneSignal.removeExternalUserId();
316337
}

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

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,22 @@ public void onFailure(OneSignal.ExternalIdError error) {
230230
};
231231
}
232232

233+
private static boolean didEmailUpdateSucceed;
234+
private static OneSignal.EmailUpdateError lastEmailUpdateFailure;
235+
private static OneSignal.EmailUpdateHandler getEmailUpdateHandler() {
236+
return new OneSignal.EmailUpdateHandler() {
237+
@Override
238+
public void onSuccess() {
239+
didEmailUpdateSucceed = true;
240+
}
241+
242+
@Override
243+
public void onFailure(OneSignal.EmailUpdateError error) {
244+
lastEmailUpdateFailure = error;
245+
}
246+
};
247+
}
248+
233249
private static JSONObject lastGetTags;
234250
private static void getGetTagsHandler() {
235251
OneSignal.getTags(tags -> lastGetTags = tags);
@@ -240,6 +256,8 @@ private static void cleanUp() throws Exception {
240256
lastGetTags = null;
241257
lastExternalUserIdResponse = null;
242258
lastExternalUserIdError = null;
259+
lastEmailUpdateFailure = null;
260+
didEmailUpdateSucceed = false;
243261

244262
ShadowGMSLocationController.reset();
245263

@@ -4414,6 +4432,102 @@ public void shouldRemoveExternalUserId() throws Exception {
44144432
assertEquals(removeIdRequest.payload.getString("external_user_id"), "");
44154433
}
44164434

4435+
@Test
4436+
public void shouldRemoveExternalUserIdFromPushWithAuthHash() throws Exception {
4437+
String testExternalId = "test_ext_id";
4438+
String mockExternalIdHash = new String(new char[64]).replace('\0', '0');
4439+
4440+
OneSignal.setExternalUserId(testExternalId, mockExternalIdHash, null);
4441+
OneSignalInit();
4442+
threadAndTaskWait();
4443+
4444+
OneSignal.removeExternalUserId(getExternalUserIdUpdateCompletionHandler());
4445+
threadAndTaskWait();
4446+
4447+
JSONObject expectedExternalUserIdResponse = new JSONObject(
4448+
"{" +
4449+
" \"push\" : {" +
4450+
" \"success\" : true" +
4451+
" }" +
4452+
"}"
4453+
);
4454+
assertEquals(expectedExternalUserIdResponse.toString(), lastExternalUserIdResponse.toString());
4455+
4456+
assertEquals(3, ShadowOneSignalRestClient.networkCallCount);
4457+
4458+
ShadowOneSignalRestClient.Request removeIdRequest = ShadowOneSignalRestClient.requests.get(2);
4459+
assertEquals(ShadowOneSignalRestClient.REST_METHOD.PUT, removeIdRequest.method);
4460+
assertEquals(removeIdRequest.payload.getString("external_user_id"), "");
4461+
assertEquals(mockExternalIdHash, removeIdRequest.payload.getString("external_user_id_auth_hash"));
4462+
}
4463+
4464+
@Test
4465+
public void shouldRemoveExternalUserIdFromEmailWithAuthHash() throws Exception {
4466+
String testEmail = "test@test.com";
4467+
String mockEmailHash = new String(new char[64]).replace('\0', '0');
4468+
4469+
OneSignal.setEmail(testEmail, mockEmailHash, getEmailUpdateHandler());
4470+
OneSignalInit();
4471+
threadAndTaskWait();
4472+
4473+
OneSignal.removeExternalUserId(getExternalUserIdUpdateCompletionHandler());
4474+
threadAndTaskWait();
4475+
4476+
JSONObject expectedExternalUserIdResponse = new JSONObject(
4477+
"{" +
4478+
" \"push\" : {" +
4479+
" \"success\" : true" +
4480+
" }" + ", " +
4481+
" \"email\" : {" +
4482+
" \"success\" : true" +
4483+
" }" +
4484+
"}"
4485+
);
4486+
assertEquals(expectedExternalUserIdResponse.toString(), lastExternalUserIdResponse.toString());
4487+
assertTrue(didEmailUpdateSucceed);
4488+
assertNull(lastEmailUpdateFailure);
4489+
4490+
assertEquals(6, ShadowOneSignalRestClient.networkCallCount);
4491+
4492+
ShadowOneSignalRestClient.Request removeIdRequest = ShadowOneSignalRestClient.requests.get(4);
4493+
assertEquals(ShadowOneSignalRestClient.REST_METHOD.PUT, removeIdRequest.method);
4494+
assertEquals(removeIdRequest.payload.getString("external_user_id"), "");
4495+
assertFalse(removeIdRequest.payload.has("external_user_id_auth_hash"));
4496+
4497+
ShadowOneSignalRestClient.Request removeIdEmailRequest = ShadowOneSignalRestClient.requests.get(5);
4498+
assertEquals(ShadowOneSignalRestClient.REST_METHOD.PUT, removeIdEmailRequest.method);
4499+
assertEquals(removeIdEmailRequest.payload.getString("external_user_id"), "");
4500+
assertEquals(mockEmailHash, removeIdEmailRequest.payload.getString("email_auth_hash"));
4501+
}
4502+
4503+
@Test
4504+
public void shouldRemoveExternalUserIdFromPushAndEmailWithAuthHash() throws Exception {
4505+
String testExternalId = "test_ext_id";
4506+
String mockExternalIdHash = new String(new char[64]).replace('\0', '0');
4507+
String testEmail = "test@test.com";
4508+
String mockEmailHash = new String(new char[64]).replace('\0', '0');
4509+
4510+
OneSignal.setExternalUserId(testExternalId, mockExternalIdHash, null);
4511+
OneSignal.setEmail(testEmail, mockEmailHash, null);
4512+
OneSignalInit();
4513+
threadAndTaskWait();
4514+
4515+
OneSignal.removeExternalUserId();
4516+
threadAndTaskWait();
4517+
4518+
assertEquals(6, ShadowOneSignalRestClient.networkCallCount);
4519+
4520+
ShadowOneSignalRestClient.Request removeIdRequest = ShadowOneSignalRestClient.requests.get(4);
4521+
assertEquals(ShadowOneSignalRestClient.REST_METHOD.PUT, removeIdRequest.method);
4522+
assertEquals(removeIdRequest.payload.getString("external_user_id"), "");
4523+
assertEquals(mockExternalIdHash, removeIdRequest.payload.getString("external_user_id_auth_hash"));
4524+
4525+
ShadowOneSignalRestClient.Request removeIdEmailRequest = ShadowOneSignalRestClient.requests.get(5);
4526+
assertEquals(ShadowOneSignalRestClient.REST_METHOD.PUT, removeIdEmailRequest.method);
4527+
assertEquals(removeIdEmailRequest.payload.getString("external_user_id"), "");
4528+
assertEquals(mockEmailHash, removeIdEmailRequest.payload.getString("email_auth_hash"));
4529+
}
4530+
44174531
@Test
44184532
public void doesNotSendSameExternalId() throws Exception {
44194533
String testExternalId = "test_ext_id";

0 commit comments

Comments
 (0)