C'est peut-être une question d'avance mais je me demande quoi utiliser à la place de UILocalNotification
dans iOS10. Je travaille sur une application dont la cible de déploiement est iOS8, puis-je utiliser UILocalNotification
?
Oui, vous pouvez utiliser UILocalNotification
. Les anciennes API fonctionnent également avec iOS10, mais il est préférable d’utiliser les API du framework Notifications utilisateur à la place. Il existe également de nouvelles fonctionnalités que vous ne pouvez utiliser qu'avec la structure de notifications d'utilisateurs iOS10.
Cela arrive aussi à la notification à distance, pour plus d'informations: ici .
Nouvelles fonctionnalités:
Il est très facile pour nous de convertir les API UILocalNotification
en iOS10 Les API du cadre Notifications utilisateur, elles sont vraiment similaires.
J'écris une démonstration ici pour montrer comment utiliser les nouvelles et les anciennes API en même temps: iOS10AdaptationTips .
Par exemple,
Avec la mise en œuvre rapide:
importer UserNotifications
/// Notification become independent from UIKit
import UserNotifications
demander une autorisation pour la notification locale
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
calendrier localNotification
mettre à jour le numéro de badge d'icône d'application
@IBAction func triggerNotification(){
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey: "Elon said:", arguments: nil)
content.body = NSString.localizedUserNotificationString(forKey: "Hello Tom!Get up, let's play with Jerry!", arguments: nil)
content.sound = UNNotificationSound.default()
content.badge = UIApplication.shared().applicationIconBadgeNumber + 1;
content.categoryIdentifier = "com.elonchan.localNotification"
// Deliver the notification in 60 seconds.
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 60.0, repeats: true)
let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger)
// Schedule the notification.
let center = UNUserNotificationCenter.current()
center.add(request)
}
@IBAction func stopNotification(_ sender: AnyObject) {
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()
// or you can remove specifical notification:
// center.removePendingNotificationRequests(withIdentifiers: ["FiveSecond"])
}
Mise en œuvre d'Objective-C:
importer UserNotifications
// Notifications are independent from UIKit
#import <UserNotifications/UserNotifications.h>
demander une autorisation pour la notification locale
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
[self showAlert];
}
}];
calendrier localNotification
mettre à jour le numéro de badge d'icône d'application
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = [NSString localizedUserNotificationStringForKey:@"Elon said:"
arguments:nil];
content.body = [NSString localizedUserNotificationStringForKey:@"Hello Tom!Get up, let's play with Jerry!"
arguments:nil];
content.sound = [UNNotificationSound defaultSound];
// 4. update application icon badge number
content.badge = [NSNumber numberWithInteger:([UIApplication sharedApplication].applicationIconBadgeNumber + 1)];
// Deliver the notification in five seconds.
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger
triggerWithTimeInterval:5.f
repeats:NO];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"FiveSecond"
content:content
trigger:trigger];
/// 3. schedule localNotification
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@"add NotificationRequest succeeded!");
}
}];
Allez ici pour plus d'informations: iOS10AdaptationTips .
Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', motif: 'l'intervalle de temps doit être égal à au moins 60 si la répétition'
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 60, repeats: true)
Apple l’a refait, la bonne implémentation est: AppDelegate.Swift
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.currentNotificationCenter()
center.requestAuthorizationWithOptions([.Alert, .Sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
} else {
// Fallback on earlier versions
}
et n'oubliez pas d'ajouter
import UserNotifications
Notifications locales pour iOS
10 dans Objetcive-C
Si vous programmez pendant un certain temps, je suis sûr que vous connaissez bien la classe UILocalNotification
et que maintenant, avec l'arrivée de iOS
10, vous pouvez voir que UILocalNotification
est obsolète. Pour une mise en œuvre détaillée, visitez ce blog.
Swift 4
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
} else {
// REGISTER FOR Push NOTIFICATIONS
let notifTypes:UIUserNotificationType = [.alert, .badge, .sound]
let settings = UIUserNotificationSettings(types: notifTypes, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
application.applicationIconBadgeNumber = 0
}
MARK: - DELEGATES FOR NOTIFICATIONS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let installation = PFInstallation.current()
installation?.setDeviceTokenFrom(deviceToken)
installation?.saveInBackground(block: { (succ, error) in
if error == nil {
print("DEVICE TOKEN REGISTERED!")
} else {
print("\(error!.localizedDescription)")
}
})
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("application:didFailToRegisterForRemoteNotificationsWithError: %@", error)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
print("\(userInfo)")
// PFPush.handle(userInfo)
if application.applicationState == .inactive {
PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(inBackground: userInfo, block: nil)
}
}