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
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:
- Teraz możesz albo obecny alert, dźwięk lub zwiększyć odznaki podczas gdy aplikacja jest w planie zbyt z iOS 10
- 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.
- Obsługa dotykowy 3D zamiast przesuwanego gestu.
- Teraz możesz usunąć specyficzne powiadomienie lokalne za pomocą tylko jednego kodu wiersza.
- 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:
UserNotifications import
/// Notification become independent from UIKit import UserNotifications
żądanie autoryzacji dla localNotification
let center = UNUserNotificationCenter.current() center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in // Enable or disable features based on authorization. }
harmonogram localNotification
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:
UserNotifications import
// Notifications are independent from UIKit #import <UserNotifications/UserNotifications.h>
żą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]; } }];
harmonogram localNotification
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)
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
lokalne powiadomienia dla iOS
10 w Objetcive-C
Jeśli programowanie przez chwilę jestem pewien, że są zaznajomieni z klasą UILocalNotification
, a teraz z przybywając z iOS
10 widać, że UILocalNotification
jest przestarzałe. Szczegółowy wizyty realizacji tego blogu
- 1. Przestarzałe: Function eregi() jest przestarzałe w
- 2. UILocalNotification jest zerowa po zamknięciu aplikacji
- 3. Dlaczego isJavaLetterOrDigit jest przestarzałe?
- 4. dismissModalViewControllerAnimated jest przestarzałe
- 5. Czy auto_ptr jest przestarzałe?
- 6. getActionView jest przestarzałe?
- 7. Dlaczego context2d.backingStorePixelRatio jest przestarzałe?
- 8. $ HADOOP_HOME jest przestarzałe, Hadoop
- 9. WakefulBroadcastReceiver jest przestarzałe
- 10. 'initWithFrame: reuseIdentifier' jest przestarzałe
- 11. UILocalNotification w ogóle nie działa
- 12. CBCentralManager iOS10 i iOS9
- 13. ProgressDialog jest przestarzałe
- 14. Zrozumienie UILocalNotification stref czasowych
- 15. UILineBreakModeTailTruncation jest przestarzałe
- 16. "isGooglePlayServicesAvailable" (to) jest przestarzałe.
- 17. "sharedDispatcher" jest przestarzałe
- 18. MockitoJUnitRunner jest przestarzałe
- 19. Czy 9P jest przestarzałe?
- 20. UILocalNotification niestandardowy dźwięk
- 21. UILocalNotification nie jest uruchamiany, gdy urządzenie jest zablokowane
- 22. Wysokość powiększenia widżetu dzisiaj - iOS10
- 23. Spring Boot: SpringBootServletInitializer jest przestarzałe
- 24. SecurityAction.RequestMinimum jest przestarzałe w .Net 4.0
- 25. devise.registrations.reasons w plikach yml jest przestarzałe?
- 26. GKPeerPickerController jest przestarzałe w iOS 7
- 27. MKPolylineView initWithPolyLine: jest przestarzałe w iOS 7
- 28. Activity.setProgress (int progress) jest przestarzałe
- 29. Android StringBody (String) jest przestarzałe
- 30. Próbuje realizować beginBackgroundTaskWithExpirationHandler i UILocalNotification
Brakuje nazwę argumentem „center.requestAuthorization ([. Alertu.sound]) ", powinno to być" center.requestAuthorization (options: [.alert, .sound]) " – MQoder
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
@MQoder Zaktualizowałem odpowiedź – ElonChan