J'ai une fonction publique pour la notification locale et je veux appeler cette fonction dans applicationWillTerminate. Quand j'essaye cela, rien ne se passe. Je suis sûr que la fonction de notification locale est ok parce que quand je l'appelle dans viewDidLoad, cela fonctionne correctement.Swift - Appel de la méthode de notification locale dans applicationWillTerminate
Ceci est la fonction pour la notification locale;
func scheduleLocalNotification(second: Double) {
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
let content = UNMutableNotificationContent()
content.badge = 1
content.title = "Title!"
content.body = "Message!"
content.categoryIdentifier = "id"
content.userInfo = ["key": "value"]
content.sound = UNNotificationSound.default()
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: second, repeats: false)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
} else {
// Fallback on earlier versions
}
}
AppDelegate; J'ai recherché SO pour des problèmes similaires et trouvé 2 questions, mais aucune d'entre elles ne résout mon problème.
Send local notification after termination app swift 2
Local notification on application termination
Edit: demande d'autorisation;
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if (!launchedBefore) {
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Authorization granted!")
} else {
print("Authorization not granted!")
}
}
} else {
let settings = UIUserNotificationSettings(types: [.alert, .badge , .sound], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
}
UserDefaults.standard.set(true, forKey: "launchedBefore")
}
// Override point for customization after application launch.
return true
}
Comment êtes-vous mettre fin à l'application pour tester cela? – Paulw11
@ Paulw11 appuyez deux fois sur le bouton et se débarrasser de l'application. J'utilise aussi un vrai appareil pour tester. – THO
Avez-vous 'requestAuthorization (options: completionHandler:)' quelque part plus tôt dans votre code? – rmp