2017-05-01 98 views
1

我需要CloudKit的推送通知,因此我不想要求用戶在首次啓動應用程序時收到通知許可。我只想在實際需要權限的位置詢問用戶。因此,我在應用內設置控制器中添加了兩個按鈕 - 一個允許用戶設置CloudKit,另一個允許用戶在推送通知尚未啓用時啓用推送通知。問題出現在OneSignal應該設置的方式中。該設置應該發生在application:didFinishLaunchingWithOptions:,並且使用的方法(setupOneSignalWithLaunchOptions:)需要launchOptions參數。有沒有辦法從應用程序內的viewController設置OneSignal,而不是從App Delegate?在應用程序之後爲OneSign註冊推送通知:didFinishLaunchingWithOptions

編輯:我想我可以保存launchOptions並使用它們,當我準備在以後安裝OneSignal時。在應用程序的後續啓動中,setupOneSignalWithLaunchOptions:將按預期方式調用,位於application:didFinishLaunchingWithOptions:。但是,當用戶最初啓用通知時,我將使用保存的launchOptions,因爲該應用可能在一段時間內不會再次啓動(它在後臺運行)。

+0

你的編輯是什麼,我會建議你做的。另一種方法是探索'launchOptions'字典來查看裏面的內容,也許你可以很容易地複製它,不過我建議存儲你從'UIApplication'中獲得的內容,因爲如果它將來發生變化,它不會破壞你的應用程序功能。 – EmilioPelaez

回答

1

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-

+0

好吧,我可以設置OneSignal,無論用戶是否選擇晚些時候接收推送通知,對吧?這非常有幫助。然而,promptForPushNotificationsWithUserResponse的問題是,我需要使用[[UIApplication sharedApplication] registerForRemoteNotifications],因爲OneSignal不是唯一使用推送/遠程通知的API。 – SAHM

+0

我可能需要發佈一個關於使用registerForRemoteNotifications代替promptForPushNotificationsWithUserResponse的新問題。 – SAHM

+0

是的,你需要發佈一個新的問題。 – Dima