2016-06-21 19 views
32

Może to być z góry pytanie, ale zastanawiam się, co używać zamiast UILocalNotification w iOS10. Obecnie pracuję nad aplikacją, która ma docelową implementację iOS 8, więc czy będzie dobrze używać UILocalNotification?UILocalNotification jest przestarzałe w iOS10

Odpowiedz

85

Tak, możesz używać UILocalNotification, stare API działają również dobrze z iOS10, ale lepiej korzystajmy z interfejsów API w strukturze powiadomień użytkownika. Dostępnych jest również kilka nowych funkcji, których można używać tylko w systemie iOS10.

Tak samo dzieje się z powiadomieniem zdalnym, aby uzyskać więcej informacji: Here.

Nowe funkcje:

  1. Teraz możesz albo obecny alert, dźwięk lub zwiększyć odznaki podczas gdy aplikacja jest w planie zbyt z iOS 10
  2. Teraz można obsługiwać wszystkie zdarzenia w jednym miejscu, gdy użytkownik podsłuchu (lub przesuwane) przycisku akcji, nawet gdy aplikacja została już zabita.
  3. Obsługa dotykowy 3D zamiast przesuwanego gestu.
  4. Teraz możesz usunąć specyficzne powiadomienie lokalne za pomocą tylko jednego kodu wiersza.
  5. Obsługa zaawansowanych powiadomień z niestandardowym interfejsem użytkownika.

Jest naprawdę łatwo nam konwertować UILocalNotification API do iOS10 użytkownika Powiadomienia API ramowych, są bardzo podobne.

Piszę tutaj wersję demonstracyjną, aby pokazać, jak korzystać z nowych i starych interfejsów API w tym samym czasie: iOS10AdaptationTips.

Na przykład

Z Swift realizacji:

  1. UserNotifications import

    /// Notification become independent from UIKit 
    import UserNotifications 
    
  2. żądanie autoryzacji dla localNotification

    let center = UNUserNotificationCenter.current() 
        center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in 
         // Enable or disable features based on authorization. 
        } 
    
  3. harmonogram localNotification

  4. aplikacja aktualizacja numer ikona odznaka

    @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 five 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"]) 
    } 
    

Objective-C realizacja:

  1. UserNotifications import

    // Notifications are independent from UIKit 
    #import <UserNotifications/UserNotifications.h> 
    
  2. żądanie autoryzacji dla localNotification

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; 
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) 
             completionHandler:^(BOOL granted, NSError * _Nullable error) { 
              if (!error) { 
               NSLog(@"request authorization succeeded!"); 
               [self showAlert]; 
              } 
             }]; 
    
  3. harmonogram localNotification

  4. aktualizacja numer ikona aplikacji odznaka

    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!"); 
        } 
    }]; 
    

idź do tutaj, aby uzyskać więcej informacji: iOS10AdaptationTips.

aktualizowane

Zakończenie aplikację spowodowane nieprzechwyconego wyjątku 'NSInternalInconsistencyException', powód: 'interwał czasowy musi wynosić co najmniej 60, powtarzając'

let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 60, repeats: true) 
+0

Brakuje nazwę argumentem „center.requestAuthorization ([. Alertu.sound]) ", powinno to być" center.requestAuthorization (options: [.alert, .sound]) " – MQoder

+0

Mam tę konfigurację w mojej aplikacji dokładnie tak, jak napisałem powyżej. Powiadomienie pojawiło się tylko raz. inne powiadomienie, a teraz nie otrzymuję żadnych powiadomień .. Wszelkie pomysły? – Nate4436271

+0

@MQoder Zaktualizowałem odpowiedź – ElonChan

7

Jabłko zrobili to znowu, poprawna implementacja to: 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 
    } 

i nie zapomnij dodać

import UserNotifications 
Powiązane problemy