2017-05-01 3 views
1

Ich brauche Push-Benachrichtigungen für CloudKit, also möchte ich den Benutzer nicht um Benachrichtigungen Erlaubnis beim ersten Start der App bitten. Ich möchte den Benutzer nur an dem Punkt fragen, wo die Erlaubnis wirklich benötigt wird. Daher füge ich zwei Schaltflächen auf einem In-App-Einstellungs-Controller hinzu - einer, mit dem der Benutzer CloudKit einrichten kann, und einem, der es dem Benutzer ermöglicht, Push-Benachrichtigungen zu aktivieren, wenn sie noch nicht aktiviert wurden. Das Problem besteht darin, dass OneSignal eingerichtet werden soll. Das Setup soll in application:didFinishLaunchingWithOptions: geschehen, und die verwendete Methode (setupOneSignalWithLaunchOptions:) benötigt den Parameter launchOptions. Gibt es eine Möglichkeit, OneSignal von einem viewController innerhalb der App einzurichten, im Gegensatz zum App Delegate?Registrieren Push-Benachrichtigungen für OneSignal nach der Anwendung: didFinishLaunchingWithOptions

EDIT: Ich denke, ich kann launchOptions speichern und verwenden, wenn ich bereit bin, OneSignal zu einem späteren Zeitpunkt einzurichten. Bei nachfolgenden Starts der App würde setupOneSignalWithLaunchOptions: wie vorgesehen aufgerufen werden, in application:didFinishLaunchingWithOptions:. Aber wenn der Benutzer zunächst Benachrichtigungen aktiviert, werde ich die gespeicherte launchOptions verwenden, weil die App möglicherweise für einige Zeit nicht mehr gestartet wird (es läuft im Hintergrund).

+0

Ihre Bearbeitung ist, was würde ich Ihre schlagen. Eine andere Alternative ist, das 'launchOptions'-Wörterbuch zu erkunden, um zu sehen, was da drin ist, vielleicht können Sie es einfach replizieren, obwohl ich vorschlagen würde, das von' UIApplication' zu speichern, denn wenn es sich in der Zukunft ändert, wird es Ihre App nicht zerstören Funktionalität. – EmilioPelaez

Antwort

1

Das OneSignal SDK hat eine Einstellung namens kOSSettingsKeyAutoPrompt. Sie können für diese Einstellung in einem Wert von false geben, wenn Sie die Bibliothek initialisieren mit:

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

Dies wird die Warnung prompt führen nicht zu erscheinen und Sie können es stattdessen später auslösen durch den Aufruf:

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

Weitere Informationen: https://documentation.onesignal.com/v3.0/docs/ios-native-sdk#section--kossettingskeyautoprompt-

+0

Ok, ich kann also OneSignal einrichten, unabhängig davon, ob der Benutzer sich später für Push-Benachrichtigungen entscheidet oder nicht, oder? Das ist sehr hilfreich. Das Problem mit promptForPushNotificationsWithUserResponse: ist, dass ich [[UIApplication sharedApplication] registerForRemoteNotifications] verwenden muss, weil OneSignal nicht die einzige API ist, die Push/Remote-Benachrichtigungen verwendet. – SAHM

+0

Ich muss wahrscheinlich eine neue Frage über die Verwendung von RegisterForRemoteNotifications anstelle von promptForPushNotificationsWithUserResponse. – SAHM

+0

Ja, Sie müssen dafür eine neue Frage stellen. – Dima

Verwandte Themen