在 application:didFinishLaunchingWithOptions 之后为 OneSignal 注册推送通知

Registering Push Notifications for OneSignal after application:didFinishLaunchingWithOptions

我需要 CloudKit 的推送通知,所以我不想在应用程序首次启动时询问用户通知权限。我只想在实际需要权限的时候询问用户。因此,我在应用程序内设置控制器上添加了两个按钮 - 一个允许用户设置 CloudKit,另一个允许用户启用推送通知(如果尚未启用)。问题在于 OneSignal 的设置方式。该设置应该在 application:didFinishLaunchingWithOptions: 中发生,并且使用的方法 (setupOneSignalWithLaunchOptions:) 需要 launchOptions 参数。有没有办法从应用程序中的 viewController 设置 OneSignal,而不是从 App Delegate 设置?

编辑:我想我可以保存 launchOptions 并在我准备好稍后设置 OneSignal 时使用它们。在应用程序的后续启动中,setupOneSignalWithLaunchOptions: 将按预期在 application:didFinishLaunchingWithOptions: 中调用。但是当用户最初启用通知时,我将使用保存的 launchOptions,因为该应用程序可能会在一段时间内不会再次启动(它会在后台 运行)。

OneSignal SDK 有一个名为 kOSSettingsKeyAutoPrompt 的设置。您可以在初始化库时为该设置传入一个值 false

+ (id)initWithLaunchOptions:(NSDictionary*)launchOptions appId:(NSString*)appId handleNotificationAction:(OSHandleNotificationActionBlock)actionCallback settings:(NSDictionary*)settings;

这将导致警报提示不出现,您可以稍后通过调用来触发它:

+ (void)promptForPushNotificationsWithUserResponse:(void(^)(BOOL accepted))completionHandler;

更多信息:https://documentation.onesignal.com/v3.0/docs/ios-native-sdk#section--kossettingskeyautoprompt-