Skip to content

Commit

Permalink
Showing 6 changed files with 63 additions and 27 deletions.
2 changes: 1 addition & 1 deletion iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m
Original file line number Diff line number Diff line change
@@ -233,7 +233,7 @@ - (void)setSMSNumber:(NSString *)smsNumber
[self callFailureBlockOnMainThread:failureBlock withError:error];
}];
} else {
[OneSignalClient.sharedClient executeRequest:[OSRequestCreateDevice withAppId:appId withDeviceType:@(DEVICE_TYPE_SMS) withSMSNumber:smsNumber withPlayerId:_currentSubscriptionState.userId withSMSAuthHash:hashToken withExternalIdAuthToken:self.currentSubscriptionState.externalIdAuthCode] onSuccess:^(NSDictionary *result) {
[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) {
let smsPlayerId = (NSString*)result[@"id"];

if (smsPlayerId) {
2 changes: 1 addition & 1 deletion iOS_SDK/OneSignalSDK/Source/OneSignal.m
Original file line number Diff line number Diff line change
@@ -2505,7 +2505,7 @@ + (void)setEmail:(NSString * _Nonnull)email withEmailAuthHashToken:(NSString * _
[self callFailureBlockOnMainThread:failureBlock withError:error];
}];
} else {
[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) {
[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) {

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

4 changes: 2 additions & 2 deletions iOS_SDK/OneSignalSDK/Source/Requests.h
Original file line number Diff line number Diff line change
@@ -84,9 +84,9 @@ NS_ASSUME_NONNULL_END
@end

@interface OSRequestCreateDevice : OneSignalRequest
+ (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;
+ (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;

+ (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;
+ (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;
@end

@interface OSRequestLogoutEmail : OneSignalRequest
47 changes: 28 additions & 19 deletions iOS_SDK/OneSignalSDK/Source/Requests.m
Original file line number Diff line number Diff line change
@@ -201,36 +201,45 @@ + (instancetype)withUserId:(NSString *)userId appId:(NSString *)appId deviceToke
@end

@implementation OSRequestCreateDevice
+ (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 {
+ (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 {
let request = [OSRequestCreateDevice new];

request.parameters = @{
@"app_id" : appId,
@"device_type" : deviceType,
@"identifier" : email ?: [NSNull null],
@"email_auth_hash" : emailAuthHash ?: [NSNull null],
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
@"device_player_id" : playerId ?: [NSNull null]
};

let params = [[NSMutableDictionary alloc] initWithDictionary:@{
@"app_id" : appId,
@"device_type" : deviceType,
@"identifier" : email ?: [NSNull null],
@"email_auth_hash" : emailAuthHash ?: [NSNull null],
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
@"device_player_id" : playerId ?: [NSNull null]
}];

if (externalUserId) {
params[@"external_user_id"] = externalUserId;
}
request.parameters = params;
request.method = POST;
request.path = @"players";

return request;
}

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

request.parameters = @{
@"app_id" : appId,
@"device_type" : deviceType,
@"identifier" : smsNumber ?: [NSNull null],
SMS_NUMBER_AUTH_HASH_KEY : smsAuthHash ?: [NSNull null],
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
@"device_player_id" : playerId ?: [NSNull null]
};
let params = [[NSMutableDictionary alloc] initWithDictionary:@{
@"app_id" : appId,
@"device_type" : deviceType,
@"identifier" : smsNumber ?: [NSNull null],
SMS_NUMBER_AUTH_HASH_KEY : smsAuthHash ?: [NSNull null],
@"external_user_id_auth_hash" : externalIdAuthToken ?: [NSNull null],
@"device_player_id" : playerId ?: [NSNull null]
}];

if (externalUserId) {
params[@"external_user_id"] = externalUserId;
}

request.parameters = params;
request.method = POST;
request.path = @"players";

6 changes: 3 additions & 3 deletions iOS_SDK/OneSignalSDK/UnitTests/RequestTests.m
Original file line number Diff line number Diff line change
@@ -532,7 +532,7 @@ - (void)testUpdateEmailDeviceToken {
}

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

let correctUrl = correctUrlWithPath(@"players");

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

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

let correctUrl = correctUrlWithPath(@"players");

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

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"}));
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"}));
}

- (void)testUpdateNotificationTypes {
29 changes: 28 additions & 1 deletion iOS_SDK/OneSignalSDK/UnitTests/SMSTests.m
Original file line number Diff line number Diff line change
@@ -558,6 +558,33 @@ - (void)testRegisterWithAuthTokenAndExternalId {
XCTAssertEqualObjects(self.ONESIGNAL_SMS_HASH_TOKEN, [smsExternalIdRequest.parameters objectForKey:SMS_NUMBER_AUTH_HASH_KEY]);
}

- (void)testRegisterSmsAfterExternalUserId {
[UnitTestCommonMethods initOneSignal_andThreadWait];
[UnitTestCommonMethods foregroundApp];

[OneSignal setExternalUserId:self.ONESIGNAL_EXTERNAL_USER_ID withExternalIdAuthHashToken:self.ONESIGNAL_EXTERNAL_USER_ID_HASH_TOKEN withSuccess:nil withFailure:nil];
[UnitTestCommonMethods runBackgroundThreads];

// The externalUserId is set as a parameter during the createDevice request.
[OneSignal setSMSNumber:self.ONESIGNAL_SMS_NUMBER withSMSAuthHashToken:self.ONESIGNAL_SMS_HASH_TOKEN];
[UnitTestCommonMethods runBackgroundThreads];

XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 5);

OneSignalRequest *pushExternalIdRequest = [OneSignalClientOverrider.executedRequests objectAtIndex:2];
OneSignalRequest *smsCreateDeviceRequest = [OneSignalClientOverrider.executedRequests objectAtIndex:3];
NSString *pushExpectedUrl = [NSString stringWithFormat:@"players/%@", OneSignalClientOverrider.pushUserId];
NSString *smsExpectedUrl = @"players";
XCTAssertEqualObjects(pushExpectedUrl, pushExternalIdRequest.path);
XCTAssertEqualObjects(smsExpectedUrl, smsCreateDeviceRequest.path);

XCTAssertEqual(7, smsCreateDeviceRequest.parameters.count);
XCTAssertTrue([smsCreateDeviceRequest.parameters objectForKey:@"app_id"]);
XCTAssertEqualObjects(self.ONESIGNAL_EXTERNAL_USER_ID, [smsCreateDeviceRequest.parameters objectForKey:@"external_user_id"]);
XCTAssertEqualObjects(self.ONESIGNAL_EXTERNAL_USER_ID_HASH_TOKEN, [smsCreateDeviceRequest.parameters objectForKey:@"external_user_id_auth_hash"]);
XCTAssertEqualObjects(self.ONESIGNAL_SMS_HASH_TOKEN, [smsCreateDeviceRequest.parameters objectForKey:SMS_NUMBER_AUTH_HASH_KEY]);
}

- (void)testExternalIdNotSetOnSMSRegister {
[UnitTestCommonMethods initOneSignal_andThreadWait];
[UnitTestCommonMethods foregroundApp];
@@ -575,7 +602,7 @@ - (void)testExternalIdNotSetOnSMSRegister {
XCTAssertEqualObjects(@"players", createDeviceRequest.path);
XCTAssertEqualObjects(expectedUrl, updateDeviceRequest.path);

XCTAssertEqual(6, createDeviceRequest.parameters.count);
XCTAssertEqual(7, createDeviceRequest.parameters.count);
XCTAssertTrue([createDeviceRequest.parameters objectForKey:@"app_id"]);
XCTAssertEqualObjects(OneSignalClientOverrider.pushUserId, [createDeviceRequest.parameters objectForKey:@"device_player_id"]);
XCTAssertEqualObjects(@(DEVICE_TYPE_SMS), [createDeviceRequest.parameters objectForKey:@"device_type"]);

0 comments on commit 62dfa45

Please sign in to comment.