2017-01-30 5 views
0

Ich möchte meinen Benutzern erlauben, lokale Benachrichtigungen in meiner App zu aktivieren/deaktivieren. Ich weiß, dass, wenn ich für UILocalNotification registrieren, das Pop-up nur einmal angezeigt wird, egal wie oft Register aufgerufen wird. Gibt es eine Möglichkeit, ihre Antwort zurückzusetzen und sie erneut zu fragen, wenn der Benutzer später entscheidet, Benachrichtigungen in meiner App zu aktivieren?UILocalNotification-Anfrage anzeigen, nachdem Benutzer auf "nicht zulassen" geklickt hat

Enable/Disable Notifications Toggle

application.registerUserNotificationSettings(
    UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], 
           categories: nil)) 

Kann ich zurückgesetzt ihre Antwort auf registerUserNotificationSettings()? So etwas wie

// if user clicked enable notifications 
let grantedSettings = application.currentUserNotificationSettings() 
// reset grantedSettings 
// call registerUserNotificationSettings() again 

PS: Ich weiß, dass UNNotificationRequest jetzt empfohlen wird, aber ich möchte unterstützen iOS 9.0 und ich lese UNNotificationRequest für iOS ist 10+.

Antwort

2

Sie Einstellungen der App des Benutzers Benutzer auf Seite der Geräteeinstellung App senden können, sie im Stich gelassen LocalNotification Opt-in in

  • iOS älter als Version 10 dos keine Informationen zur Verfügung stellen, wenn der Benutzer um Erlaubnis, bevor oder nicht verweigert .
  • In Ihrer App müssen Sie in NSUserDefaults speichern oder irgendwo, dass Sie bereits die Erlaubnis gefragt haben.
  • Jedes Mal, wenn Sie eine Berechtigung benötigen, prüfen Sie zunächst, ob eine Berechtigung verfügbar ist oder nicht.
  • Wenn die Berechtigung nicht verfügbar ist und Ihre App zuvor noch keinen Benutzer gefragt hat (basierend auf dem gespeicherten Status im vorherigen Schritt), fragen Sie nach der Berechtigung.
  • Wenn Sie zuvor die Berechtigung von einem Benutzer angefordert haben (basierend auf dem gespeicherten Status im vorherigen Schritt), fragen Sie die Benutzer, ob sie die Berechtigung zulassen möchten. Wenn sie "Ja" sagen, leiten Sie sie an die Geräteeinstellungs-App weiter.

Objective-C für iOS < = 10 (Veraltete in iOS 10)

Dies ist ein Code Schnipsel für UIUserNotificationSettings

UIUserNotificationSettings *currentSettings = [[UIApplication sharedApplication] currentUserNotificationSettings] 
if (currentSettings.types == UIUserNotificationTypeNone) // Permission does not exist either user denied or never been asked before 

if (!(currentSettings.types & (UIUserNotificationTypeAlert | UIUserNotificationTypeSound))) // This means your app does not have permission alert and to play sounds with notification. 

Dieser Code Schnipsel anfragende zeigt, wie Benutzer senden Geräteeinstellungsseite.

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
       if ([[UIApplication sharedApplication] canOpenURL:url]) { 
        [[UIApplication sharedApplication] openURL:url]; 
       } 

Swift 3 für iOS < = 10 (Veraltete in iOS 10)

Dies ist ein Code Schnipsel für UIUserNotificationSettings

let currentSettings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) 
if currentSettings.types.isEmpty { 
     // Here you decide whether to prompt user with new authorization request 
     // or send user to setting app based on your stored variable 
    } 

Dieser Code Schnipsel zeigt erkundigt, wie Benutzer senden Geräteeinstellungsseite.

if let urlStr = URL(string: UIApplicationOpenSettingsURLString) { 
     if UIApplication.shared.canOpenURL(urlStr) { 
      UIApplication.shared.openURL(urlStr) 
     } 
    } 

Für iOS 10 und über

stattdessen eine Variable in Ihrer App die Überprüfung, ob die App überhaupt für die Zulassung oder nicht gefragt zu sparen, prüfen Sie den Wert von authorizationStatus von UNNotificationSettings Klasse

Der Wert dieser Eigenschaft wird nicht ermittelt, wenn Ihre App die Autorisierung mit der Methode requestAuthorization (options: completionHandler :) noch nie angefordert hat.

zusammen mit anderen UNNotificationSettings Pendant Methoden ähnlich wie ältere Version dieser Klasse (UIUserNotificationSettings) um Erlaubnis bitten oder überprüfen Sie die verfügbaren Berechtigungen wie Abzeichen, Alarm oder Ton.

+0

Ein Hauptproblem mit dieser Antwort ist es in Objective-C. Trotzdem ist es eine gute Antwort. Hier ist eine Antwort, die das selbe in Swift genau beschreibt: http://stackoverflow.com/questions/41303746/swift-3-camera-permission-dialog-priming-prime-permissions-in-ios10 – dfd

+0

Danke das hilft. 'UIApplicationOpenSettingsURLString' bringt mich direkt zu den Benachrichtigungseinstellungen meiner App! Auch danke @dfd für den Link, sehr gut über diese "Permission Priming" Idee zu wissen. – Coder1224

+1

Ich habe diese Frage wegen der Antwort vorgemerkt. Eines Tages wird es mir auch helfen. Schön, dass es dir vielleicht eine Alternative zum Nachdenken gegeben hat. – dfd

1

Nein, Sie können nur einmal um eine Benachrichtigungsberechtigung bitten, und die Berechtigung wird vom Betriebssystem verwaltet. Wenn sie Don't Allow drücken, muss der Benutzer in Einstellungen gehen und die Berechtigung manuell ändern.

Die Art und Weise, wie viele Apps umgehen, zeigt eine benutzerdefinierte "weiche" Warnung, bevor das iOS-Dialogfeld angezeigt wird. Auf diese Weise können Sie, wenn der Benutzer auf "nicht jetzt" klickt, Ihre benutzerdefinierte Benachrichtigung zu einem späteren Zeitpunkt anzeigen und den iOS-Dialog anzeigen, wenn der Benutzer bereit ist, Benachrichtigungen (oder andere Berechtigungen) zu aktivieren.

TLDR; Nein, der Benutzer muss seine Benachrichtigungseinstellungen nach und einschließlich des ersten Dialogfelds verwalten.

+0

Das ist sehr hilfreich, danke. Schade, dass es so sein muss. – Coder1224

Verwandte Themen