Skip to content

Commit 62dfa45

Browse files
authored
Merge pull request #1044 from OneSignal/fix/Set_ext_user_id_on_set_email
Setting externalUserId when creating email and SMS records
2 parents 149fb03 + 7868d9c commit 62dfa45

File tree

6 files changed

+63
-27
lines changed

6 files changed

+63
-27
lines changed

iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ - (void)setSMSNumber:(NSString *)smsNumber
233233
[self callFailureBlockOnMainThread:failureBlock withError:error];
234234
}];
235235
} else {
236-
[OneSignalClient.sharedClient executeRequest:[OSRequestCreateDevice withAppId:appId withDeviceType:@(DEVICE_TYPE_SMS) withSMSNumber:smsNumber withPlayerId:_currentSubscriptionState.userId withSMSAuthHash:hashToken withExternalIdAuthToken:self.currentSubscriptionState.externalIdAuthCode] onSuccess:^(NSDictionary *result) {
236+
[OneSignalClient.sharedClient executeRequest:[OSRequestCreateDevice withAppId:appId withDeviceType:@(DEVICE_TYPE_SMS) withSMSNumber:smsNumber withPlayerId:_currentSubscriptionState.userId withSMSAuthHash:hashToken withExternalUserId:[OneSignalUserDefaults.initStandard getSavedStringForKey:OSUD_EXTERNAL_USER_ID defaultValue:nil] withExternalIdAuthToken:self.currentSubscriptionState.externalIdAuthCode] onSuccess:^(NSDictionary *result) {
237237
let smsPlayerId = (NSString*)result[@"id"];
238238

239239
if (smsPlayerId) {

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2505,7 +2505,7 @@ + (void)setEmail:(NSString * _Nonnull)email withEmailAuthHashToken:(NSString * _
25052505
[self callFailureBlockOnMainThread:failureBlock withError:error];
25062506
}];
25072507
} else {
2508-
[OneSignalClient.sharedClient executeRequest:[OSRequestCreateDevice withAppId:self.appId withDeviceType:[NSNumber numberWithInt:DEVICE_TYPE_EMAIL] withEmail:email withPlayerId:self.currentSubscriptionState.userId withEmailAuthHash:emailAuthToken withExternalIdAuthToken:[self mExternalIdAuthToken]] onSuccess:^(NSDictionary *result) {
2508+
[OneSignalClient.sharedClient executeRequest:[OSRequestCreateDevice withAppId:self.appId withDeviceType:[NSNumber numberWithInt:DEVICE_TYPE_EMAIL] withEmail:email withPlayerId:self.currentSubscriptionState.userId withEmailAuthHash:emailAuthToken withExternalUserId:[self existingPushExternalUserId] withExternalIdAuthToken:[self mExternalIdAuthToken]] onSuccess:^(NSDictionary *result) {
25092509

25102510
let emailPlayerId = (NSString*)result[@"id"];
25112511

iOS_SDK/OneSignalSDK/Source/Requests.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ NS_ASSUME_NONNULL_END
8484
@end
8585

8686
@interface OSRequestCreateDevice : OneSignalRequest
87-
+ (instancetype _Nonnull)withAppId:(NSString * _Nonnull)appId withDeviceType:(NSNumber * _Nonnull)deviceType withEmail:(NSString * _Nullable)email withPlayerId:(NSString * _Nullable)playerId withEmailAuthHash:(NSString * _Nullable)emailAuthHash withExternalIdAuthToken:(NSString * _Nullable)externalIdAuthToken;
87+
+ (instancetype _Nonnull)withAppId:(NSString * _Nonnull)appId withDeviceType:(NSNumber * _Nonnull)deviceType withEmail:(NSString * _Nullable)email withPlayerId:(NSString * _Nullable)playerId withEmailAuthHash:(NSString * _Nullable)emailAuthHash withExternalUserId:(NSString * _Nullable)externalUserId withExternalIdAuthToken:(NSString * _Nullable)externalIdAuthToken;
8888

89-
+ (instancetype _Nonnull)withAppId:(NSString * _Nonnull)appId withDeviceType:(NSNumber * _Nonnull)deviceType withSMSNumber:(NSString * _Nullable)smsNumber withPlayerId:(NSString * _Nullable)playerId withSMSAuthHash:(NSString * _Nullable)smsAuthHash withExternalIdAuthToken:(NSString * _Nullable)externalIdAuthToken;
89+
+ (instancetype _Nonnull)withAppId:(NSString * _Nonnull)appId withDeviceType:(NSNumber * _Nonnull)deviceType withSMSNumber:(NSString * _Nullable)smsNumber withPlayerId:(NSString * _Nullable)playerId withSMSAuthHash:(NSString * _Nullable)smsAuthHash withExternalUserId:(NSString * _Nullable)externalUserId withExternalIdAuthToken:(NSString * _Nullable)externalIdAuthToken;
9090
@end
9191

9292
@interface OSRequestLogoutEmail : OneSignalRequest

iOS_SDK/OneSignalSDK/Source/Requests.m

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -201,36 +201,45 @@ + (instancetype)withUserId:(NSString *)userId appId:(NSString *)appId deviceToke
201201
@end
202202

203203
@implementation OSRequestCreateDevice
204-
+ (instancetype _Nonnull)withAppId:(NSString * _Nonnull)appId withDeviceType:(NSNumber * _Nonnull)deviceType withEmail:(NSString * _Nullable)email withPlayerId:(NSString * _Nullable)playerId withEmailAuthHash:(NSString * _Nullable)emailAuthHash withExternalIdAuthToken:(NSString * _Nullable)externalIdAuthToken {
204+
+ (instancetype _Nonnull)withAppId:(NSString * _Nonnull)appId withDeviceType:(NSNumber * _Nonnull)deviceType withEmail:(NSString * _Nullable)email withPlayerId:(NSString * _Nullable)playerId withEmailAuthHash:(NSString * _Nullable)emailAuthHash withExternalUserId: (NSString * _Nullable)externalUserId withExternalIdAuthToken:(NSString * _Nullable)externalIdAuthToken {
205205
let request = [OSRequestCreateDevice new];
206206

207-
request.parameters = @{
208-
@"app_id" : appId,
209-
@"device_type" : deviceType,
210-
@"identifier" : email ?: [NSNull null],
211-
@"email_auth_hash" : emailAuthHash ?: [NSNull null],
212-
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
213-
@"device_player_id" : playerId ?: [NSNull null]
214-
};
215-
207+
let params = [[NSMutableDictionary alloc] initWithDictionary:@{
208+
@"app_id" : appId,
209+
@"device_type" : deviceType,
210+
@"identifier" : email ?: [NSNull null],
211+
@"email_auth_hash" : emailAuthHash ?: [NSNull null],
212+
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
213+
@"device_player_id" : playerId ?: [NSNull null]
214+
}];
215+
216+
if (externalUserId) {
217+
params[@"external_user_id"] = externalUserId;
218+
}
219+
request.parameters = params;
216220
request.method = POST;
217221
request.path = @"players";
218222

219223
return request;
220224
}
221225

222-
+ (instancetype)withAppId:(NSString *)appId withDeviceType:(NSNumber *)deviceType withSMSNumber:(NSString *)smsNumber withPlayerId:(NSString *)playerId withSMSAuthHash:(NSString *)smsAuthHash withExternalIdAuthToken:(NSString *)externalIdAuthToken {
226+
+ (instancetype)withAppId:(NSString *)appId withDeviceType:(NSNumber *)deviceType withSMSNumber:(NSString *)smsNumber withPlayerId:(NSString *)playerId withSMSAuthHash:(NSString *)smsAuthHash withExternalUserId: (NSString * _Nullable)externalUserId withExternalIdAuthToken:(NSString *)externalIdAuthToken {
223227
let request = [OSRequestCreateDevice new];
224228

225-
request.parameters = @{
226-
@"app_id" : appId,
227-
@"device_type" : deviceType,
228-
@"identifier" : smsNumber ?: [NSNull null],
229-
SMS_NUMBER_AUTH_HASH_KEY : smsAuthHash ?: [NSNull null],
230-
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
231-
@"device_player_id" : playerId ?: [NSNull null]
232-
};
229+
let params = [[NSMutableDictionary alloc] initWithDictionary:@{
230+
@"app_id" : appId,
231+
@"device_type" : deviceType,
232+
@"identifier" : smsNumber ?: [NSNull null],
233+
SMS_NUMBER_AUTH_HASH_KEY : smsAuthHash ?: [NSNull null],
234+
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
235+
@"device_player_id" : playerId ?: [NSNull null]
236+
}];
237+
238+
if (externalUserId) {
239+
params[@"external_user_id"] = externalUserId;
240+
}
233241

242+
request.parameters = params;
234243
request.method = POST;
235244
request.path = @"players";
236245

iOS_SDK/OneSignalSDK/UnitTests/RequestTests.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ - (void)testUpdateEmailDeviceToken {
532532
}
533533

534534
- (void)testCreateDevice {
535-
let request = [OSRequestCreateDevice withAppId:testAppId withDeviceType:@0 withEmail:testEmailAddress withPlayerId:testUserId withEmailAuthHash:nil withExternalIdAuthToken:nil];
535+
let request = [OSRequestCreateDevice withAppId:testAppId withDeviceType:@0 withEmail:testEmailAddress withPlayerId:testUserId withEmailAuthHash:nil withExternalUserId:nil withExternalIdAuthToken:nil];
536536

537537
let correctUrl = correctUrlWithPath(@"players");
538538

@@ -542,13 +542,13 @@ - (void)testCreateDevice {
542542
}
543543

544544
- (void)testCreateDeviceWithAuthHash {
545-
let request = [OSRequestCreateDevice withAppId:testAppId withDeviceType:@0 withEmail:testEmailAddress withPlayerId:testUserId withEmailAuthHash:nil withExternalIdAuthToken:@"external_id_auth_token"];
545+
let request = [OSRequestCreateDevice withAppId:testAppId withDeviceType:@0 withEmail:testEmailAddress withPlayerId:testUserId withEmailAuthHash:nil withExternalUserId: @"external_user_id" withExternalIdAuthToken:@"external_id_auth_token"];
546546

547547
let correctUrl = correctUrlWithPath(@"players");
548548

549549
XCTAssertTrue([correctUrl isEqualToString:request.urlRequest.URL.absoluteString]);
550550

551-
XCTAssertTrue(checkHttpBody(request.urlRequest.HTTPBody, @{@"app_id" : testAppId, @"device_type" : @0, @"identifier" : testEmailAddress, @"email_auth_hash" : [NSNull null], @"device_player_id" : testUserId, @"external_user_id_auth_hash" : @"external_id_auth_token"}));
551+
XCTAssertTrue(checkHttpBody(request.urlRequest.HTTPBody, @{@"app_id" : testAppId, @"device_type" : @0, @"identifier" : testEmailAddress, @"email_auth_hash" : [NSNull null], @"device_player_id" : testUserId, @"external_user_id" : @"external_user_id", @"external_user_id_auth_hash" : @"external_id_auth_token"}));
552552
}
553553

554554
- (void)testUpdateNotificationTypes {

iOS_SDK/OneSignalSDK/UnitTests/SMSTests.m

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,33 @@ - (void)testRegisterWithAuthTokenAndExternalId {
558558
XCTAssertEqualObjects(self.ONESIGNAL_SMS_HASH_TOKEN, [smsExternalIdRequest.parameters objectForKey:SMS_NUMBER_AUTH_HASH_KEY]);
559559
}
560560

561+
- (void)testRegisterSmsAfterExternalUserId {
562+
[UnitTestCommonMethods initOneSignal_andThreadWait];
563+
[UnitTestCommonMethods foregroundApp];
564+
565+
[OneSignal setExternalUserId:self.ONESIGNAL_EXTERNAL_USER_ID withExternalIdAuthHashToken:self.ONESIGNAL_EXTERNAL_USER_ID_HASH_TOKEN withSuccess:nil withFailure:nil];
566+
[UnitTestCommonMethods runBackgroundThreads];
567+
568+
// The externalUserId is set as a parameter during the createDevice request.
569+
[OneSignal setSMSNumber:self.ONESIGNAL_SMS_NUMBER withSMSAuthHashToken:self.ONESIGNAL_SMS_HASH_TOKEN];
570+
[UnitTestCommonMethods runBackgroundThreads];
571+
572+
XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 5);
573+
574+
OneSignalRequest *pushExternalIdRequest = [OneSignalClientOverrider.executedRequests objectAtIndex:2];
575+
OneSignalRequest *smsCreateDeviceRequest = [OneSignalClientOverrider.executedRequests objectAtIndex:3];
576+
NSString *pushExpectedUrl = [NSString stringWithFormat:@"players/%@", OneSignalClientOverrider.pushUserId];
577+
NSString *smsExpectedUrl = @"players";
578+
XCTAssertEqualObjects(pushExpectedUrl, pushExternalIdRequest.path);
579+
XCTAssertEqualObjects(smsExpectedUrl, smsCreateDeviceRequest.path);
580+
581+
XCTAssertEqual(7, smsCreateDeviceRequest.parameters.count);
582+
XCTAssertTrue([smsCreateDeviceRequest.parameters objectForKey:@"app_id"]);
583+
XCTAssertEqualObjects(self.ONESIGNAL_EXTERNAL_USER_ID, [smsCreateDeviceRequest.parameters objectForKey:@"external_user_id"]);
584+
XCTAssertEqualObjects(self.ONESIGNAL_EXTERNAL_USER_ID_HASH_TOKEN, [smsCreateDeviceRequest.parameters objectForKey:@"external_user_id_auth_hash"]);
585+
XCTAssertEqualObjects(self.ONESIGNAL_SMS_HASH_TOKEN, [smsCreateDeviceRequest.parameters objectForKey:SMS_NUMBER_AUTH_HASH_KEY]);
586+
}
587+
561588
- (void)testExternalIdNotSetOnSMSRegister {
562589
[UnitTestCommonMethods initOneSignal_andThreadWait];
563590
[UnitTestCommonMethods foregroundApp];
@@ -575,7 +602,7 @@ - (void)testExternalIdNotSetOnSMSRegister {
575602
XCTAssertEqualObjects(@"players", createDeviceRequest.path);
576603
XCTAssertEqualObjects(expectedUrl, updateDeviceRequest.path);
577604

578-
XCTAssertEqual(6, createDeviceRequest.parameters.count);
605+
XCTAssertEqual(7, createDeviceRequest.parameters.count);
579606
XCTAssertTrue([createDeviceRequest.parameters objectForKey:@"app_id"]);
580607
XCTAssertEqualObjects(OneSignalClientOverrider.pushUserId, [createDeviceRequest.parameters objectForKey:@"device_player_id"]);
581608
XCTAssertEqualObjects(@(DEVICE_TYPE_SMS), [createDeviceRequest.parameters objectForKey:@"device_type"]);

0 commit comments

Comments
 (0)