Skip to content

Commit 861baf1

Browse files
committed
Generalize Channel data access (#858)
* Use user state to populate register user requests * Remove userId from OSUserStateSynchronizer methods * Make each OSUserStateSynchronizer responsible for retrieving the channel user-id * Remove auth hash token from OSUserStateSynchronizer methods * Make each OSUserStateSynchronizer responsible for retrieving the channel auth hash token * Remove device type from OSUserStateSynchronizer methods * Make each OSUserStateSynchronizer responsible for retrieving the channel device type * Create getStateSynchronizers for generic handle * Make request methods iterate over getStateSynchronizers, method doesn't care on which channel are running * Generalize registerUserWithState meethod * Make registerUserWithState use generic OSUserStateSynchronizer channels * Remove unnecessary comment from common requests * Remove comment result of copy-paste * Generalize result in parsing * Choose result from one primary channel and return that result, If no primary channel available search result from one secondary channel
1 parent dad584a commit 861baf1

9 files changed

+231
-146
lines changed

iOS_SDK/OneSignalSDK/Source/OSStateSynchronizer.m

Lines changed: 86 additions & 90 deletions
Large diffs are not rendered by default.

iOS_SDK/OneSignalSDK/Source/OSUserStateEmailSynchronizer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,6 @@ THE SOFTWARE.
2929

3030
@interface OSUserStateEmailSynchronizer : OSUserStateSynchronizer
3131

32+
- (instancetype)initWithEmailSubscriptionState:(OSEmailSubscriptionState *)emailSubscriptionState;
33+
3234
@end

iOS_SDK/OneSignalSDK/Source/OSUserStateEmailSynchronizer.m

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,57 @@ of this software and associated documentation files (the "Software"), to deal
2727

2828
#import <Foundation/Foundation.h>
2929
#import "OSUserStateEmailSynchronizer.h"
30+
#import "OSEmailSubscription.h"
31+
32+
@interface OSUserStateEmailSynchronizer ()
33+
34+
@property (strong, nonatomic, readwrite, nonnull) OSEmailSubscriptionState *currentEmailSubscriptionState;
35+
36+
@end
3037

3138
@implementation OSUserStateEmailSynchronizer
3239

40+
- (instancetype)initWithEmailSubscriptionState:(OSEmailSubscriptionState *)emailSubscriptionState {
41+
self = [super init];
42+
if (self)
43+
_currentEmailSubscriptionState = emailSubscriptionState;
44+
return self;
45+
}
46+
47+
- (NSString *)getId {
48+
return _currentEmailSubscriptionState.emailUserId;
49+
}
50+
51+
- (NSString *)getIdAuthHashToken {
52+
return _currentEmailSubscriptionState.emailAuthCode;
53+
}
54+
55+
- (NSString *)getExternalIdAuthHashToken {
56+
return nil;
57+
}
58+
59+
- (NSString *)getEmailAuthHashToken {
60+
return [self getIdAuthHashToken];
61+
}
62+
63+
- (NSString *)getChannelId {
64+
return OS_EMAIL;
65+
}
66+
67+
- (NSNumber *)getDeviceType {
68+
return @(DEVICE_TYPE_EMAIL);
69+
}
3370

71+
- (NSDictionary *)getRegistrationData:(OSUserState *)registrationState {
72+
NSMutableDictionary *emailDataDic = (NSMutableDictionary *)[registrationState.toDictionary mutableCopy];
73+
emailDataDic[@"device_type"] = self.getDeviceType;
74+
emailDataDic[@"email_auth_hash"] = self.getEmailAuthHashToken;
75+
76+
// If push device has external id we want to add it to the email device also
77+
if (registrationState.externalUserId)
78+
emailDataDic[@"external_user_id"] = registrationState.externalUserId;
79+
80+
return emailDataDic;
81+
}
3482

3583
@end

iOS_SDK/OneSignalSDK/Source/OSUserStatePushSynchronizer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ THE SOFTWARE.
2929

3030
@interface OSUserStatePushSynchronizer : OSUserStateSynchronizer
3131

32-
32+
- (instancetype)initWithSubscriptionState:(OSSubscriptionState *)subscriptionState;
3333

3434
@end

iOS_SDK/OneSignalSDK/Source/OSUserStatePushSynchronizer.m

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,52 @@ of this software and associated documentation files (the "Software"), to deal
2727

2828
#import <Foundation/Foundation.h>
2929
#import "OSUserStatePushSynchronizer.h"
30+
#import "OSSubscription.h"
31+
32+
@interface OSUserStatePushSynchronizer ()
33+
34+
@property (strong, nonatomic, readwrite, nonnull) OSSubscriptionState *currentSubscriptionState;
35+
36+
@end
3037

3138
@implementation OSUserStatePushSynchronizer
3239

40+
- (instancetype)initWithSubscriptionState:(OSSubscriptionState *)subscriptionState {
41+
self = [super init];
42+
if (self)
43+
_currentSubscriptionState = subscriptionState;
44+
return self;
45+
}
46+
47+
- (NSString *)getId {
48+
return _currentSubscriptionState.userId;
49+
}
50+
51+
- (NSString *)getIdAuthHashToken {
52+
return _currentSubscriptionState.externalIdAuthCode;
53+
}
54+
55+
- (NSString *)getExternalIdAuthHashToken {
56+
return [self getIdAuthHashToken];
57+
}
58+
59+
- (NSString *)getEmailAuthHashToken {
60+
return nil;
61+
}
62+
63+
- (NSString *)getChannelId {
64+
return OS_PUSH;
65+
}
66+
67+
- (NSNumber *)getDeviceType {
68+
return @(DEVICE_TYPE_PUSH);
69+
}
70+
71+
- (NSDictionary *)getRegistrationData:(OSUserState *)registrationState {
72+
NSMutableDictionary *pushDataDic = (NSMutableDictionary *)[registrationState.toDictionary mutableCopy];
73+
pushDataDic[@"identifier"] = _currentSubscriptionState.pushToken;
74+
75+
return pushDataDic;
76+
}
3377

3478
@end

iOS_SDK/OneSignalSDK/Source/OSUserStateSynchronizer.h

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,50 +28,48 @@ THE SOFTWARE.
2828
#import "OneSignal.h"
2929
#import "Requests.h"
3030
#import "OneSignalLocation.h"
31+
#import "OSUserState.h"
3132

3233
@interface OSUserStateSynchronizer : NSObject
3334

34-
- (OSRequestRegisterUser * _Nonnull)registerUserWithData:(NSDictionary * _Nonnull)registrationData
35-
userId:(NSString * _Nullable)userId;
35+
- (NSString * _Nonnull)getId;
36+
37+
- (NSString * _Nullable)getIdAuthHashToken;
38+
39+
- (NSString * _Nullable)getExternalIdAuthHashToken;
40+
41+
- (NSString * _Nullable)getEmailAuthHashToken;
42+
43+
- (NSString * _Nonnull)getChannelId;
44+
45+
- (NSNumber * _Nonnull)getDeviceType;
46+
47+
- (NSDictionary *)getRegistrationData:(OSUserState *)registrationState;
48+
49+
- (OSRequestRegisterUser * _Nonnull)registerUserWithData:(NSDictionary * _Nonnull)registrationDatad;
3650

3751
- (OSRequestUpdateExternalUserId * _Nonnull)setExternalUserId:(NSString *_Nonnull)externalId
3852
withExternalIdAuthHashToken:(NSString * _Nullable)hashToken
39-
withUserId:(NSString * _Nonnull)userId
4053
withAppId:(NSString * _Nonnull)appId;
4154

42-
- (OSRequestSendTagsToServer * _Nonnull)sendTagsWithUserId:(NSString * _Nonnull)userId
43-
appId:(NSString * _Nonnull)appId
55+
- (OSRequestSendTagsToServer * _Nonnull)sendTagsWithAppId:(NSString * _Nonnull)appId
4456
sendingTags:(NSDictionary * _Nonnull)tags
45-
networkType:(NSNumber * _Nonnull)networkType
46-
emailAuthHashToken:(NSString * _Nullable)emailAuthHashToken
47-
externalIdAuthHashToken:(NSString * _Nullable)externalIdAuthHashToken;
57+
networkType:(NSNumber * _Nonnull)networkType;
4858

4959
- (OSRequestSendPurchases * _Nonnull)sendPurchases:(NSArray * _Nonnull)purchases
50-
appId:(NSString * _Nonnull)appId
51-
userId:(NSString * _Nonnull)userId
52-
externalIdAuthToken:(NSString * _Nullable)externalIdAuthToken;
60+
appId:(NSString * _Nonnull)appId;
5361

5462
- (OSRequestBadgeCount * _Nonnull)sendBadgeCount:(NSNumber * _Nonnull)badgeCount
55-
appId:(NSString * _Nonnull)appId
56-
userId:(NSString * _Nonnull)userId
57-
emailAuthHashToken:(NSString * _Nullable)emailAuthHashToken
58-
externalIdAuthHashToken:(NSString * _Nullable)externalIdAuthHashToken;
63+
appId:(NSString * _Nonnull)appId;
5964

6065
- (OSRequestSendLocation * _Nonnull)sendLocation:(os_last_location * _Nonnull)lastLocation
6166
appId:(NSString * _Nonnull)appId
62-
userId:(NSString * _Nonnull)userId
6367
networkType:(NSNumber * _Nonnull)networkType
64-
backgroundState:(BOOL)background
65-
emailAuthHashToken:(NSString * _Nullable)emailAuthHashToken
66-
externalIdAuthHashToken:(NSString * _Nullable)externalIdAuthHashToken;
68+
backgroundState:(BOOL)background;
6769

6870
- (OSRequestOnFocus * _Nonnull)sendOnFocusTime:(NSNumber * _Nonnull)activeTime
69-
userId:(NSString * _Nonnull)userId
7071
appId:(NSString * _Nonnull)appId
7172
netType:(NSNumber * _Nonnull)netType
72-
emailAuthToken:(NSString * _Nullable)emailAuthHash
73-
externalIdAuthToken:(NSString * _Nullable)externalIdAuthToken
74-
deviceType:(NSNumber * _Nonnull)deviceType
7573
influenceParams:(NSArray <OSFocusInfluenceParam *> * _Nullable)influenceParams;
7674

7775
@end

iOS_SDK/OneSignalSDK/Source/OSUserStateSynchronizer.m

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,65 +27,60 @@ of this software and associated documentation files (the "Software"), to deal
2727

2828
#import <Foundation/Foundation.h>
2929
#import "OSUserStateSynchronizer.h"
30-
30+
#import "OSMacros.h"
3131

3232
@implementation OSUserStateSynchronizer
3333

34-
- (OSRequestRegisterUser *)registerUserWithData:(NSDictionary *)registrationData
35-
userId:(NSString *)userId {
36-
return [OSRequestRegisterUser withData:registrationData userId:userId];
34+
- (NSString *)getId { mustOverride(); }
35+
36+
- (NSString *)getExternalIdAuthHashToken { mustOverride(); }
37+
38+
- (NSString *)getEmailAuthHashToken { mustOverride(); }
39+
40+
- (NSNumber *)getDeviceType { mustOverride(); }
41+
42+
- (NSString *)getChannelId { mustOverride(); }
43+
44+
- (NSDictionary *)getRegistrationData:(OSUserState *)registrationState { mustOverride(); }
45+
46+
- (OSRequestRegisterUser *)registerUserWithData:(NSDictionary *)registrationData {
47+
return [OSRequestRegisterUser withData:registrationData userId:[self getId]];
3748
}
3849

3950
- (OSRequestUpdateExternalUserId *)setExternalUserId:(NSString *)externalId
4051
withExternalIdAuthHashToken:(NSString *)hashToken
41-
withUserId:(NSString *)userId
4252
withAppId:(NSString *)appId {
43-
return [OSRequestUpdateExternalUserId withUserId:externalId withUserIdHashToken:hashToken withOneSignalUserId:userId appId:appId];
53+
return [OSRequestUpdateExternalUserId withUserId:externalId withUserIdHashToken:hashToken withOneSignalUserId:[self getId] appId:appId];
4454
}
4555

46-
- (OSRequestSendTagsToServer *)sendTagsWithUserId:(NSString *)userId
47-
appId:(NSString *)appId
56+
- (OSRequestSendTagsToServer *)sendTagsWithAppId:(NSString *)appId
4857
sendingTags:(NSDictionary *)tags
49-
networkType:(NSNumber *)networkType
50-
emailAuthHashToken:(NSString *)emailAuthHashToken
51-
externalIdAuthHashToken:(NSString *)externalIdAuthHashToken {
52-
return [OSRequestSendTagsToServer withUserId:userId appId:appId tags:tags networkType:networkType withEmailAuthHashToken:emailAuthHashToken withExternalIdAuthHashToken:externalIdAuthHashToken];
58+
networkType:(NSNumber *)networkType{
59+
return [OSRequestSendTagsToServer withUserId:[self getId] appId:appId tags:tags networkType:networkType withEmailAuthHashToken:[self getEmailAuthHashToken] withExternalIdAuthHashToken:[self getExternalIdAuthHashToken]];
5360
}
5461

5562
- (OSRequestSendPurchases *)sendPurchases:(NSArray *)purchases
56-
appId:(NSString *)appId
57-
userId:(NSString *)userId
58-
externalIdAuthToken:(NSString *)externalIdAuthToken {
59-
return [OSRequestSendPurchases withUserId:userId externalIdAuthToken:externalIdAuthToken appId:appId withPurchases:purchases];
63+
appId:(NSString *)appId {
64+
return [OSRequestSendPurchases withUserId:[self getId] externalIdAuthToken:[self getIdAuthHashToken] appId:appId withPurchases:purchases];
6065
}
6166

6267
- (OSRequestBadgeCount *)sendBadgeCount:(NSNumber *)badgeCount
63-
appId:(NSString *)appId
64-
userId:(NSString *)userId
65-
emailAuthHashToken:(NSString *)emailAuthHashToken
66-
externalIdAuthHashToken:(NSString *)externalIdAuthHashToken {
67-
return [OSRequestBadgeCount withUserId:userId appId:appId badgeCount:badgeCount emailAuthToken:emailAuthHashToken externalIdAuthToken:externalIdAuthHashToken];
68+
appId:(NSString *)appId{
69+
return [OSRequestBadgeCount withUserId:[self getId] appId:appId badgeCount:badgeCount emailAuthToken:[self getEmailAuthHashToken] externalIdAuthToken:[self getExternalIdAuthHashToken]];
6870
}
6971

7072
- (OSRequestSendLocation *)sendLocation:(os_last_location *)lastLocation
7173
appId:(NSString *)appId
72-
userId:(NSString *)userId
7374
networkType:(NSNumber *)networkType
74-
backgroundState:(BOOL)background
75-
emailAuthHashToken:(NSString *)emailAuthHashToken
76-
externalIdAuthHashToken:(NSString *)externalIdAuthHashToken {
77-
return [OSRequestSendLocation withUserId:userId appId:appId location:lastLocation networkType:networkType backgroundState:background emailAuthHashToken:emailAuthHashToken externalIdAuthToken:externalIdAuthHashToken];
75+
backgroundState:(BOOL)background{
76+
return [OSRequestSendLocation withUserId:[self getId] appId:appId location:lastLocation networkType:networkType backgroundState:background emailAuthHashToken:[self getEmailAuthHashToken] externalIdAuthToken:[self getExternalIdAuthHashToken]];
7877
}
7978

8079
- (OSRequestOnFocus *)sendOnFocusTime:(NSNumber *)activeTime
81-
userId:(NSString *)userId
8280
appId:(NSString *)appId
8381
netType:(NSNumber *)netType
84-
emailAuthToken:(NSString *)emailAuthHash
85-
externalIdAuthToken:(NSString *)externalIdAuthToken
86-
deviceType:(NSNumber *)deviceType
8782
influenceParams:(NSArray <OSFocusInfluenceParam *> *)influenceParams {
88-
return [OSRequestOnFocus withUserId:userId appId:appId activeTime:activeTime netType:netType emailAuthToken:emailAuthHash externalIdAuthToken:externalIdAuthToken deviceType:deviceType influenceParams:influenceParams];
83+
return [OSRequestOnFocus withUserId:[self getId] appId:appId activeTime:activeTime netType:netType emailAuthToken:[self getEmailAuthHashToken] externalIdAuthToken:[self getExternalIdAuthHashToken] deviceType:[self getDeviceType] influenceParams:influenceParams];
8984
}
9085

9186
@end

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1697,7 +1697,7 @@ + (void)registerUserInternal {
16971697
// Make sure we only call create or on_session once per open of the app.
16981698
if (![self shouldRegisterNow])
16991699
return;
1700-
1700+
17011701
[_outcomeEventsController clearOutcomes];
17021702
[_sessionManager restartSessionIfNeeded:_appEntryState];
17031703

iOS_SDK/OneSignalSDK/Source/OneSignalCommonDefines.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ typedef enum {ATTRIBUTED, NOT_ATTRIBUTED} FocusAttributionState;
186186
#define OS_EMAIL @"email"
187187
#define OS_SUCCESS @"success"
188188

189+
#define OS_CHANNELS @[OS_PUSH, OS_EMAIL]
190+
189191
// OneSignal API Client Defines
190192
typedef enum {GET, POST, HEAD, PUT, DELETE, OPTIONS, CONNECT, TRACE} HTTPMethod;
191193
#define OS_API_CLIENT_STRINGS @[@"GET", @"POST", @"HEAD", @"PUT", @"DELETE", @"OPTIONS", @"CONNECT", @"TRACE"]

0 commit comments

Comments
 (0)