@@ -426,6 +426,7 @@ + (void)clearStatics {
426426 requestedProvisionalAuthorization = false ;
427427
428428 app_id = nil ;
429+ registeredWithApple = false ;
429430 _osNotificationSettings = nil ;
430431 waitingForApnsResponse = false ;
431432 waitingForOneSReg = false ;
@@ -530,6 +531,7 @@ + (id)initWithLaunchOptions:(NSDictionary*)launchOptions
530531 }
531532
532533 [OneSignalCacheCleaner cleanCachedUserData ];
534+ [OneSignal checkIfApplicationImplementsDeprecatedMethods ];
533535
534536 let success = [self initAppId: appId withSettings: settings];
535537 if (!success)
@@ -540,6 +542,9 @@ + (id)initWithLaunchOptions:(NSDictionary*)launchOptions
540542 if (!_didCallDownloadParameters && appId && appId != (id )[NSNull null ])
541543 [self downloadIOSParamsWithAppId: appId];
542544
545+ let standardUserDefaults = OneSignalUserDefaults.initStandard ;
546+ [self initSettings: settings withStandardUserDefaults: standardUserDefaults];
547+
543548 if (initDone)
544549 return self;
545550 initDone = true ;
@@ -552,74 +557,7 @@ + (id)initWithLaunchOptions:(NSDictionary*)launchOptions
552557
553558 if (appId && mShareLocation)
554559 [OneSignalLocation getLocation: false ];
555-
556- let standardUserDefaults = OneSignalUserDefaults.initStandard ;
557- [OneSignal checkIfApplicationImplementsDeprecatedMethods ];
558-
559- if ([OneSignalHelper isIOSVersionGreaterThanOrEqual: @" 8.0" ])
560- registeredWithApple = self.currentPermissionState .accepted ;
561- else
562- registeredWithApple = self.currentSubscriptionState .pushToken || [standardUserDefaults getSavedBoolForKey: OSUD_REGISTERED_WITH_APPLE defaultValue: false ];
563-
564- // Check if disabled in-app launch url if passed a NO
565- if (settings[kOSSettingsKeyInAppLaunchURL ] && [settings[kOSSettingsKeyInAppLaunchURL ] isKindOfClass: [NSNumber class ]])
566- [self enableInAppLaunchURL: [settings[kOSSettingsKeyInAppLaunchURL ] boolValue ]];
567- else if (![standardUserDefaults keyExists: OSUD_NOTIFICATION_OPEN_LAUNCH_URL]) {
568- // Only need to default to true if the app doesn't already have this setting saved in NSUserDefaults
569- [self enableInAppLaunchURL: true ];
570- }
571-
572- if (settings[kOSSSettingsKeyPromptBeforeOpeningPushURL ] && [settings[kOSSSettingsKeyPromptBeforeOpeningPushURL ] isKindOfClass: [NSNumber class ]]) {
573- promptBeforeOpeningPushURLs = [settings[kOSSSettingsKeyPromptBeforeOpeningPushURL ] boolValue ];
574- [standardUserDefaults saveBoolForKey: OSUD_PROMPT_BEFORE_NOTIFICATION_LAUNCH_URL_OPENS withValue: promptBeforeOpeningPushURLs];
575- }
576- else
577- promptBeforeOpeningPushURLs = [standardUserDefaults getSavedBoolForKey: OSUD_PROMPT_BEFORE_NOTIFICATION_LAUNCH_URL_OPENS defaultValue: false ];
578-
579- usesAutoPrompt = YES ;
580- if (settings[kOSSettingsKeyAutoPrompt ] && [settings[kOSSettingsKeyAutoPrompt ] isKindOfClass: [NSNumber class ]])
581- usesAutoPrompt = [settings[kOSSettingsKeyAutoPrompt ] boolValue ];
582-
583- if (settings[kOSSettingsKeyProvidesAppNotificationSettings ] && [settings[kOSSettingsKeyProvidesAppNotificationSettings ] isKindOfClass: [NSNumber class ]] && [OneSignalHelper isIOSVersionGreaterThanOrEqual: @" 12.0" ])
584- providesAppNotificationSettings = [settings[kOSSettingsKeyProvidesAppNotificationSettings ] boolValue ];
585560
586- // Register with Apple's APNS server if we registed once before or if auto-prompt hasn't been disabled.
587- if (usesAutoPrompt || registeredWithApple)
588- [self registerForPushNotifications ];
589- else {
590- [self checkProvisionalAuthorizationStatus ];
591- [self registerForAPNsToken ];
592- }
593-
594- /* Check if in-app setting passed assigned
595- * LOGIC: Default - InAppAlerts enabled / InFocusDisplayOption InAppAlert.
596- * Priority for kOSSettingsKeyInFocusDisplayOption.
597- */
598- NSNumber *IAASetting = settings[kOSSettingsKeyInAppAlerts ];
599- let inAppAlertsPassed = IAASetting && (IAASetting.integerValue == 0 || IAASetting.integerValue == 1 );
600-
601- NSNumber *IFDSetting = settings[kOSSettingsKeyInFocusDisplayOption ];
602- let inFocusDisplayPassed = IFDSetting && IFDSetting.integerValue > -1 && IFDSetting.integerValue < 3 ;
603-
604- if (inAppAlertsPassed || inFocusDisplayPassed) {
605- if (!inFocusDisplayPassed)
606- self.inFocusDisplayType = (OSNotificationDisplayType)IAASetting.integerValue ;
607- else
608- self.inFocusDisplayType = (OSNotificationDisplayType)IFDSetting.integerValue ;
609- }
610-
611- if (self.currentSubscriptionState .userId )
612- [self registerUser ];
613- else {
614- [self .osNotificationSettings getNotificationPermissionState: ^(OSPermissionState *state) {
615- if (state.answeredPrompt ) {
616- [self registerUser ];
617- } else {
618- [self registerUserAfterDelay ];
619- }
620- }];
621- }
622-
623561 /*
624562 * No need to call the handleNotificationOpened:userInfo as it will be called from one of the following selectors
625563 * - application:didReceiveRemoteNotification:fetchCompletionHandler
@@ -704,6 +642,71 @@ + (bool)initAppId:(NSString*)appId withSettings:(NSDictionary*)settings {
704642 return true ;
705643}
706644
645+ + (void )initSettings : (NSDictionary *)settings withStandardUserDefaults : (OneSignalUserDefaults*)standardUserDefaults {
646+ if ([OneSignalHelper isIOSVersionGreaterThanOrEqual: @" 8.0" ])
647+ registeredWithApple = self.currentPermissionState .accepted ;
648+ else
649+ registeredWithApple = self.currentSubscriptionState .pushToken || [standardUserDefaults getSavedBoolForKey: OSUD_REGISTERED_WITH_APPLE defaultValue: false ];
650+
651+ // Check if disabled in-app launch url if passed a NO
652+ if (settings[kOSSettingsKeyInAppLaunchURL ] && [settings[kOSSettingsKeyInAppLaunchURL ] isKindOfClass: [NSNumber class ]])
653+ [self enableInAppLaunchURL: [settings[kOSSettingsKeyInAppLaunchURL ] boolValue ]];
654+ else if (![standardUserDefaults keyExists: OSUD_NOTIFICATION_OPEN_LAUNCH_URL]) {
655+ // Only need to default to true if the app doesn't already have this setting saved in NSUserDefaults
656+ [self enableInAppLaunchURL: true ];
657+ }
658+
659+ if (settings[kOSSSettingsKeyPromptBeforeOpeningPushURL ] && [settings[kOSSSettingsKeyPromptBeforeOpeningPushURL ] isKindOfClass: [NSNumber class ]]) {
660+ promptBeforeOpeningPushURLs = [settings[kOSSSettingsKeyPromptBeforeOpeningPushURL ] boolValue ];
661+ [standardUserDefaults saveBoolForKey: OSUD_PROMPT_BEFORE_NOTIFICATION_LAUNCH_URL_OPENS withValue: promptBeforeOpeningPushURLs];
662+ }
663+ else
664+ promptBeforeOpeningPushURLs = [standardUserDefaults getSavedBoolForKey: OSUD_PROMPT_BEFORE_NOTIFICATION_LAUNCH_URL_OPENS defaultValue: false ];
665+
666+ usesAutoPrompt = YES ;
667+ if (settings[kOSSettingsKeyAutoPrompt ] && [settings[kOSSettingsKeyAutoPrompt ] isKindOfClass: [NSNumber class ]])
668+ usesAutoPrompt = [settings[kOSSettingsKeyAutoPrompt ] boolValue ];
669+
670+ if (settings[kOSSettingsKeyProvidesAppNotificationSettings ] && [settings[kOSSettingsKeyProvidesAppNotificationSettings ] isKindOfClass: [NSNumber class ]] && [OneSignalHelper isIOSVersionGreaterThanOrEqual: @" 12.0" ])
671+ providesAppNotificationSettings = [settings[kOSSettingsKeyProvidesAppNotificationSettings ] boolValue ];
672+
673+ // Register with Apple's APNS server if we registed once before or if auto-prompt hasn't been disabled.
674+ if (usesAutoPrompt || registeredWithApple)
675+ [self registerForPushNotifications ];
676+ else {
677+ [self checkProvisionalAuthorizationStatus ];
678+ [self registerForAPNsToken ];
679+ }
680+
681+ /* Check if in-app setting passed assigned
682+ * LOGIC: Default - InAppAlerts enabled / InFocusDisplayOption InAppAlert.
683+ * Priority for kOSSettingsKeyInFocusDisplayOption.
684+ */
685+ NSNumber *IAASetting = settings[kOSSettingsKeyInAppAlerts ];
686+ let inAppAlertsPassed = IAASetting && (IAASetting.integerValue == 0 || IAASetting.integerValue == 1 );
687+
688+ NSNumber *IFDSetting = settings[kOSSettingsKeyInFocusDisplayOption ];
689+ let inFocusDisplayPassed = IFDSetting && IFDSetting.integerValue > -1 && IFDSetting.integerValue < 3 ;
690+
691+ if (inAppAlertsPassed || inFocusDisplayPassed) {
692+ if (!inFocusDisplayPassed)
693+ self.inFocusDisplayType = (OSNotificationDisplayType)IAASetting.integerValue ;
694+ else
695+ self.inFocusDisplayType = (OSNotificationDisplayType)IFDSetting.integerValue ;
696+ }
697+
698+ if (self.currentSubscriptionState .userId )
699+ [self registerUser ];
700+ else {
701+ [self .osNotificationSettings getNotificationPermissionState: ^(OSPermissionState *state) {
702+ if (state.answeredPrompt )
703+ [self registerUser ];
704+ else
705+ [self registerUserAfterDelay ];
706+ }];
707+ }
708+ }
709+
707710// Checks to see if we should register for APNS' new Provisional authorization
708711// (also known as Direct to History).
709712// This behavior is determined by the OneSignal Parameters request
0 commit comments