Skip to content

Commit 10cb679

Browse files
committed
Add OSDevice
* Unify all user device data on a same class * Getters for notification permission, user subscription, is user susbscribed, user id, push token, email id, email addess
1 parent 87e12c6 commit 10cb679

File tree

6 files changed

+210
-1
lines changed

6 files changed

+210
-1
lines changed

iOS_SDK/OneSignalDevApp/OneSignalDevApp/ViewController.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ - (void)viewDidLoad {
4141

4242
self.consentSegmentedControl.selectedSegmentIndex = (NSInteger) ![OneSignal requiresUserPrivacyConsent];
4343

44-
self.subscriptionSegmentedControl.selectedSegmentIndex = (NSInteger) OneSignal.getPermissionSubscriptionState.subscriptionStatus.subscribed;
44+
self.subscriptionSegmentedControl.selectedSegmentIndex = (NSInteger) OneSignal.getUserDevice.isSubscribed;
4545

4646
self.locationSharedSegementedControl.selectedSegmentIndex = (NSInteger) OneSignal.isLocationShared;
4747

iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
7A674F1B2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A674F1A2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m */; };
8989
7A674F1C2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A674F1A2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m */; };
9090
7A674F1D2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A674F1A2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m */; };
91+
7A676BE524981CEC003957CC /* OSDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A676BE424981CEC003957CC /* OSDevice.m */; };
9192
7A72EB0E23E252C200B4D50F /* OSInAppMessageDisplayStats.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A72EB0D23E252C200B4D50F /* OSInAppMessageDisplayStats.m */; };
9293
7A72EB0F23E252C700B4D50F /* OSInAppMessageDisplayStats.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A72EB0D23E252C200B4D50F /* OSInAppMessageDisplayStats.m */; };
9394
7A72EB1023E252C700B4D50F /* OSInAppMessageDisplayStats.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A72EB0D23E252C200B4D50F /* OSInAppMessageDisplayStats.m */; };
@@ -111,6 +112,8 @@
111112
7ABAF9D62457D3FF0074DFA0 /* ChannelTrackersTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ABAF9D52457D3FF0074DFA0 /* ChannelTrackersTests.m */; };
112113
7ABAF9D82457DD620074DFA0 /* SessionManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ABAF9D72457DD620074DFA0 /* SessionManagerTests.m */; };
113114
7ABAF9E324606E940074DFA0 /* OutcomeV2Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ABAF9E224606E940074DFA0 /* OutcomeV2Tests.m */; };
115+
7AC8D3A824993A0E0023EDE8 /* OSDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A676BE424981CEC003957CC /* OSDevice.m */; };
116+
7AC8D3A924993A0F0023EDE8 /* OSDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A676BE424981CEC003957CC /* OSDevice.m */; };
114117
7AD172382416D53B00A78B19 /* OSInAppMessageLocationPrompt.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AD172372416D53B00A78B19 /* OSInAppMessageLocationPrompt.m */; };
115118
7AD172392416D53B00A78B19 /* OSInAppMessageLocationPrompt.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AD172372416D53B00A78B19 /* OSInAppMessageLocationPrompt.m */; };
116119
7AD1723A2416D53B00A78B19 /* OSInAppMessageLocationPrompt.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AD172372416D53B00A78B19 /* OSInAppMessageLocationPrompt.m */; };
@@ -489,6 +492,7 @@
489492
7A65D629246627AD007FF196 /* OSInAppMessageViewOverrider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OSInAppMessageViewOverrider.m; sourceTree = "<group>"; };
490493
7A674F182360D813001F9ACD /* OSBaseFocusTimeProcessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSBaseFocusTimeProcessor.h; sourceTree = "<group>"; };
491494
7A674F1A2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSBaseFocusTimeProcessor.m; sourceTree = "<group>"; };
495+
7A676BE424981CEC003957CC /* OSDevice.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSDevice.m; sourceTree = "<group>"; };
492496
7A72EB0D23E252C200B4D50F /* OSInAppMessageDisplayStats.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSInAppMessageDisplayStats.m; sourceTree = "<group>"; };
493497
7A72EB1123E252D400B4D50F /* OSInAppMessageDisplayStats.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSInAppMessageDisplayStats.h; sourceTree = "<group>"; };
494498
7A880F2923FB45CE0081F5E8 /* OSInAppMessageOutcome.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSInAppMessageOutcome.h; sourceTree = "<group>"; };
@@ -1091,6 +1095,7 @@
10911095
9129C6BC1E89E7AB009CB6A0 /* OSSubscription.m */,
10921096
CA810FCF202BA97300A60FED /* OSEmailSubscription.h */,
10931097
CA810FD0202BA97300A60FED /* OSEmailSubscription.m */,
1098+
7A676BE424981CEC003957CC /* OSDevice.m */,
10941099
);
10951100
name = State;
10961101
sourceTree = "<group>";
@@ -1526,6 +1531,7 @@
15261531
91B6EA411E85D38F00B5CF01 /* OSObservable.m in Sources */,
15271532
7AF986432444C47400C36EAE /* OSNotificationTracker.m in Sources */,
15281533
4529DF0C1FA932AC00CEAB1D /* OneSignalTrackFirebaseAnalytics.m in Sources */,
1534+
7A676BE524981CEC003957CC /* OSDevice.m in Sources */,
15291535
7AFE856B2368DDB80091D6A5 /* OSFocusCallParams.m in Sources */,
15301536
91F58D891E7C9A240017D24D /* OneSignalNotificationSettingsIOS7.m in Sources */,
15311537
7A12EBD723060A6F005C4FA5 /* OSSessionManager.m in Sources */,
@@ -1614,6 +1620,7 @@
16141620
912412271E73342200E41FD7 /* OneSignalMobileProvision.m in Sources */,
16151621
912412331E73342200E41FD7 /* OneSignalTracker.m in Sources */,
16161622
91B6EA421E85D38F00B5CF01 /* OSObservable.m in Sources */,
1623+
7AC8D3A924993A0F0023EDE8 /* OSDevice.m in Sources */,
16171624
CA810FD2202BA97600A60FED /* OSEmailSubscription.m in Sources */,
16181625
CACBAAA2218A6243000ACAA5 /* OSInAppMessage.m in Sources */,
16191626
7A674F1C2360D82E001F9ACD /* OSBaseFocusTimeProcessor.m in Sources */,
@@ -1754,6 +1761,7 @@
17541761
7A5A818224897693002E07C8 /* MigrationTests.m in Sources */,
17551762
7AECE5A023675F6300537907 /* OSFocusTimeProcessorFactory.m in Sources */,
17561763
9129C6C01E89E7AB009CB6A0 /* OSSubscription.m in Sources */,
1764+
7AC8D3A824993A0E0023EDE8 /* OSDevice.m in Sources */,
17571765
912412141E73342200E41FD7 /* OneSignalAlertViewDelegate.m in Sources */,
17581766
CA63AFC52022670A00E340FB /* ReattemptRequest.m in Sources */,
17591767
7AFE856D2368DDB80091D6A5 /* OSFocusCallParams.m in Sources */,
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/**
2+
* Modified MIT License
3+
*
4+
* Copyright 2020 OneSignal
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* 1. The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* 2. All copies of substantial portions of the Software may only be used in connection
17+
* with services provided by OneSignal.
18+
*
19+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25+
* THE SOFTWARE.
26+
*/
27+
28+
#import <Foundation/Foundation.h>
29+
#import "OneSignal.h"
30+
31+
@implementation OSDevice
32+
33+
- (BOOL)isNotificationEnabled {
34+
return [[[OneSignal getPermissionSubscriptionState] permissionStatus] reachable];
35+
}
36+
37+
- (BOOL)isUserSubscribed {
38+
return [[[OneSignal getPermissionSubscriptionState] subscriptionStatus] userSubscriptionSetting];
39+
}
40+
41+
- (BOOL)isSubscribed {
42+
return [[[OneSignal getPermissionSubscriptionState] subscriptionStatus] subscribed];
43+
}
44+
45+
- (OSNotificationPermission)getNotificationPermissionStatus {
46+
return [[[OneSignal getPermissionSubscriptionState] permissionStatus] status];
47+
}
48+
49+
- (NSString *)getUserId {
50+
return [[[OneSignal getPermissionSubscriptionState] subscriptionStatus] userId];
51+
}
52+
53+
- (NSString *)getPushToken {
54+
return [[[OneSignal getPermissionSubscriptionState] subscriptionStatus] pushToken];
55+
}
56+
57+
- (NSString *)getEmailUserId {
58+
return [[[OneSignal getPermissionSubscriptionState] emailSubscriptionStatus] emailUserId];
59+
}
60+
61+
- (NSString *)getEmailAddress {
62+
return [[[OneSignal getPermissionSubscriptionState] emailSubscriptionStatus] emailAddress];
63+
}
64+
65+
@end

iOS_SDK/OneSignalSDK/Source/OneSignal.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,48 @@ typedef NS_ENUM(NSInteger, OSNotificationPermission) {
335335

336336
@end
337337

338+
@interface OSDevice : NSObject
339+
/**
340+
* Get the app's notification permission
341+
* @return false if the user disabled notifications for the app, otherwise true
342+
*/
343+
- (BOOL)isNotificationEnabled;
344+
/**
345+
* Get whether the user is subscribed to OneSignal notifications or not
346+
* @return false if the user is not subscribed to OneSignal notifications, otherwise true
347+
*/
348+
- (BOOL)isUserSubscribed;
349+
/**
350+
* Get whether the user is subscribed
351+
* @return true if isNotificationEnabled, isUserSubscribed, getUserId and getPushToken are true, otherwise false
352+
*/
353+
- (BOOL)isSubscribed;
354+
/**
355+
* Get the user notification permision status
356+
* @return OSNotificationPermission
357+
*/
358+
- (OSNotificationPermission)getNotificationPermissionStatus;
359+
/**
360+
* Get user id from registration (player id)
361+
* @return user id if user is registered, otherwise false
362+
*/
363+
- (NSString*)getUserId;
364+
/**
365+
* Get apple deice push token
366+
* @return push token if available, otherwise null
367+
*/
368+
- (NSString*)getPushToken;
369+
/**
370+
* Get the user email id
371+
* @return email id if user address was registered, otherwise null
372+
*/
373+
- (NSString*)getEmailUserId;
374+
/**
375+
* Get the user email
376+
* @return email address if set, otherwise null
377+
*/
378+
- (NSString*)getEmailAddress;
379+
@end
338380

339381
typedef void (^OSWebOpenURLResultBlock)(BOOL shouldOpen);
340382

@@ -451,6 +493,7 @@ typedef NS_ENUM(NSUInteger, ONE_S_LOG_LEVEL) {
451493
+ (void)IdsAvailable:(OSIdsAvailableBlock)idsAvailableBlock __deprecated_msg("Please use getPermissionSubscriptionState or addSubscriptionObserver and addPermissionObserver instead.");
452494

453495
+ (OSPermissionSubscriptionState*)getPermissionSubscriptionState;
496+
+ (OSDevice*)getUserDevice;
454497

455498
+ (void)addPermissionObserver:(NSObject<OSPermissionObserver>*)observer;
456499
+ (void)removePermissionObserver:(NSObject<OSPermissionObserver>*)observer;

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,13 @@ + (void)setMSubscriptionStatus:(NSNumber*)status {
332332
mSubscriptionStatus = [status intValue];
333333
}
334334

335+
static OSDevice* _userDevice;
336+
+ (OSDevice *)getUserDevice {
337+
if (!_userDevice)
338+
_userDevice = [OSDevice new];
339+
return _userDevice;
340+
}
341+
335342
/*
336343
Indicates if the iOS params request has started
337344
Set to true when the method is called and set false if the request's failure callback is triggered

iOS_SDK/OneSignalSDK/UnitTests/ProvisionalAuthorizationTests.m

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,4 +196,90 @@ - (void)testNoProvisionalAuthorization {
196196
}
197197
}
198198

199+
- (void)testOSDeviceHasEmailAddress {
200+
NSString *testEmail = @"[email protected]";
201+
202+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
203+
handleNotificationAction:nil
204+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
205+
[UnitTestCommonMethods runBackgroundThreads];
206+
207+
XCTAssertNil([[OneSignal getUserDevice] getEmailAddress]);
208+
209+
[OneSignal setEmail:testEmail];
210+
[UnitTestCommonMethods runBackgroundThreads];
211+
212+
XCTAssertEqual(testEmail, [[OneSignal getUserDevice] getEmailAddress]);
213+
}
214+
215+
- (void)testOSDeviceHasEmailId {
216+
NSString *testEmail = @"[email protected]";
217+
218+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
219+
handleNotificationAction:nil
220+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
221+
[UnitTestCommonMethods runBackgroundThreads];
222+
223+
XCTAssertNil([[OneSignal getUserDevice] getEmailAddress]);
224+
225+
[OneSignal setEmail:testEmail];
226+
[UnitTestCommonMethods runBackgroundThreads];
227+
228+
XCTAssertNotNil([[OneSignal getUserDevice] getEmailAddress]);
229+
}
230+
231+
- (void)testOSDeviceHasUserId {
232+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
233+
handleNotificationAction:nil
234+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
235+
[UnitTestCommonMethods runBackgroundThreads];
236+
237+
XCTAssertNotNil([[OneSignal getUserDevice] getUserId]);
238+
}
239+
240+
- (void)testOSDeviceHasPushToken {
241+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
242+
handleNotificationAction:nil
243+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
244+
[UnitTestCommonMethods runBackgroundThreads];
245+
246+
XCTAssertNotNil([[OneSignal getUserDevice] getPushToken]);
247+
}
248+
249+
- (void)testOSDeviceSubscribed {
250+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
251+
handleNotificationAction:nil
252+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
253+
[UnitTestCommonMethods runBackgroundThreads];
254+
255+
XCTAssertTrue([[OneSignal getUserDevice] isSubscribed]);
256+
}
257+
258+
- (void)testOSDeviceUserSubscribed {
259+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
260+
handleNotificationAction:nil
261+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
262+
[UnitTestCommonMethods runBackgroundThreads];
263+
264+
XCTAssertTrue([[OneSignal getUserDevice] isUserSubscribed]);
265+
}
266+
267+
- (void)testOSDeviceNotificationReachable {
268+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
269+
handleNotificationAction:nil
270+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
271+
[UnitTestCommonMethods runBackgroundThreads];
272+
273+
XCTAssertTrue([[OneSignal getUserDevice] isNotificationEnabled]);
274+
}
275+
276+
- (void)testOSDeviceHasNotificationPermissionStatus {
277+
[OneSignal initWithLaunchOptions:nil appId:@"b2f7f966-d8cc-11e4-bed1-df8f05be55ba"
278+
handleNotificationAction:nil
279+
settings:@{kOSSettingsKeyAutoPrompt: @false}];
280+
[UnitTestCommonMethods runBackgroundThreads];
281+
282+
XCTAssertEqual(OSNotificationPermissionAuthorized, [[OneSignal getUserDevice] getNotificationPermissionStatus]);
283+
}
284+
199285
@end

0 commit comments

Comments
 (0)