Jak mogę skonfigurować powiadomienia lokalne, aby o określonej godzinie moja aplikacja generowała powiadomienie / alert z dostosowaną wiadomością?
źródło
Jak mogę skonfigurować powiadomienia lokalne, aby o określonej godzinie moja aplikacja generowała powiadomienie / alert z dostosowaną wiadomością?
Oto przykładowy kod dla LocalNotification, który działał dla mojego projektu.
Cel C:
Ten blok kodu w AppDelegate
pliku:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
// Override point for customization after application launch.
return YES;
}
// This code block is invoked when application is in foreground (active-mode)
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
UIAlertView *notificationAlert = [[UIAlertView alloc] initWithTitle:@"Notification" message:@"This local notification"
delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[notificationAlert show];
// NSLog(@"didReceiveLocalNotification");
}
Ten blok kodu w pliku .m dowolnego ViewController
:
-(IBAction)startLocalNotification { // Bind this method to UIButton action
NSLog(@"startLocalNotification");
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:7];
notification.alertBody = @"This is local notification!";
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.soundName = UILocalNotificationDefaultSoundName;
notification.applicationIconBadgeNumber = 10;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
Powyższy kod wyświetla AlertView po interwale 7 sekund po naciśnięciu przycisku, który wiąże startLocalNotification
Jeśli aplikacja jest w tle, to wyświetlaBadgeNumber
jako 10 i z domyślnym dźwiękiem powiadomienia.
Ten kod działa dobrze na iOS 7.xi niższych, ale na iOS 8 wyświetli następujący błąd na konsoli:
Podjęto próbę zaplanowania lokalnego powiadomienia z alertem, ale nie otrzymałem pozwolenia od użytkownika na wyświetlanie alertów
Oznacza to, że musisz zarejestrować się w celu uzyskania lokalnego powiadomienia. Można to osiągnąć za pomocą:
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
[application registerUserNotificationSettings [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
Możesz również polecić bloga do lokalnego powiadomienia.
Szybki:
Twój AppDelegate.swift
plik powinien wyglądać następująco:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Badge | UIUserNotificationType.Alert, categories: nil))
return true
}
Swift plik (powiedzmy ViewController.swift
), w którym chcesz utworzyć lokalne powiadomienie, powinien zawierać poniższy kod:
//MARK: - Button functions
func buttonIsPressed(sender: UIButton) {
println("buttonIsPressed function called \(UIButton.description())")
var localNotification = UILocalNotification()
localNotification.fireDate = NSDate(timeIntervalSinceNow: 3)
localNotification.alertBody = "This is local notification from Swift 2.0"
localNotification.timeZone = NSTimeZone.localTimeZone()
localNotification.repeatInterval = NSCalendarUnit.CalendarUnitMinute
localNotification.userInfo = ["Important":"Data"];
localNotification.soundName = UILocalNotificationDefaultSoundName
localNotification.applicationIconBadgeNumber = 5
localNotification.category = "Message"
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}
//MARK: - viewDidLoad
class ViewController: UIViewController {
var objButton : UIButton!
. . .
override func viewDidLoad() {
super.viewDidLoad()
. . .
objButton = UIButton.buttonWithType(.Custom) as? UIButton
objButton.frame = CGRectMake(30, 100, 150, 40)
objButton.setTitle("Click Me", forState: .Normal)
objButton.setTitle("Button pressed", forState: .Highlighted)
objButton.addTarget(self, action: "buttonIsPressed:", forControlEvents: .TouchDown)
. . .
}
. . .
}
Sposób, w jaki pracujesz z Powiadomieniem lokalnym w iOS 9 i starszych, jest zupełnie inny w iOS 10.
Przedstawia to poniższy zrzut ekranu z informacji o wydaniu Apple.
Możesz skierować dokument referencyjny Apple do UserNotification.
Poniżej znajduje się kod powiadomienia lokalnego:
Cel C:
W App-delegate.h
użyciu pliku@import UserNotifications;
Delegat aplikacji powinien być zgodny z UNUserNotificationCenterDelegate
protokołem
W didFinishLaunchingOptions
użyciu poniższy kod:
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
[self showAlert];
}
}];
-(void)showAlert {
UIAlertController *objAlertController = [UIAlertController alertControllerWithTitle:@"Alert" message:@"show an alert!" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"Ok clicked!");
}];
[objAlertController addAction:cancelAction];
[[[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController] presentViewController:objAlertController animated:YES completion:^{
}];
}
Teraz utwórz przycisk w dowolnym kontrolerze widoku, a w IBAction użyj poniższego kodu:
UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@“Notification!” arguments:nil];
objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@“This is local notification message!“arguments:nil];
objNotificationContent.sound = [UNNotificationSound defaultSound];
// 4. update application icon badge number
objNotificationContent.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
// Deliver the notification in five seconds.
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:10.f repeats:NO];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@“ten” content:objNotificationContent trigger:trigger];
// 3. schedule localNotification
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@“Local Notification succeeded“);
} else {
NSLog(@“Local Notification failed“);
}
}];
Swift 3:
AppDelegate.swift
użyciu plikuimport UserNotifications
UNUserNotificationCenterDelegate
protokołemW didFinishLaunchingWithOptions
użyciu poniższy kod
// Override point for customization after application launch.
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
if error != nil {
print("Request authorization failed!")
} else {
print("Request authorization succeeded!")
self.showAlert()
}
}
func showAlert() {
let objAlert = UIAlertController(title: "Alert", message: "Request authorization succeeded", preferredStyle: UIAlertControllerStyle.alert)
objAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
//self.presentViewController(objAlert, animated: true, completion: nil)
UIApplication.shared().keyWindow?.rootViewController?.present(objAlert, animated: true, completion: nil)
}
Teraz utwórz przycisk w dowolnym kontrolerze widoku, a w IBAction użyj poniższego kodu:
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey: "Hello!", arguments: nil)
content.body = NSString.localizedUserNotificationString(forKey: "Hello_message_body", arguments: nil)
content.sound = UNNotificationSound.default()
content.categoryIdentifier = "notify-test"
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
let request = UNNotificationRequest.init(identifier: "notify-test", content: content, trigger: trigger)
let center = UNUserNotificationCenter.current()
center.add(request)
W pliku appdelegate.m napisz następujący kod w applicationDidEnterBackground, aby uzyskać lokalne powiadomienie
źródło
Tworzenie lokalnych powiadomień jest dość łatwe. Po prostu wykonaj następujące kroki.
W funkcji viewDidLoad () zapytaj użytkownika o pozwolenie na wyświetlanie powiadomień przez aplikacje. W tym celu możemy użyć następującego kodu.
Następnie możesz utworzyć przycisk, a następnie w funkcji akcji możesz napisać następujący kod, aby wyświetlić powiadomienie.
Powiadomienie zostanie wyświetlone, wystarczy kliknąć przycisk strony głównej po naciśnięciu przycisku powiadomienia. Gdy aplikacja jest na pierwszym planie, powiadomienie nie jest wyświetlane. Ale jeśli używasz iPhone'a X. Możesz wyświetlać powiadomienia, nawet gdy aplikacja jest na pierwszym planie. W tym celu wystarczy dodać delegata o nazwie UNUserNotificationCenterDelegate
Aby uzyskać więcej informacji, odwiedź ten wpis na blogu: Samouczek dotyczący lokalnych powiadomień systemu iOS
źródło
Zaktualizowano za pomocą Swift 5 Generalnie używamy trzech typów powiadomień lokalnych
Gdzie możesz wysłać proste powiadomienie tekstowe lub z przyciskiem akcji i załącznikiem.
Korzystając z pakietu UserNotifications w aplikacji, poniższy przykład Żądanie uprawnienia do powiadamiania, przygotuj i wyślij powiadomienie zgodnie z działaniem użytkownika AppDelegate i użyj kontrolera widoku, który zawiera listę różnych typów testów powiadomień lokalnych.
AppDelegate
i ViewController
źródło
To działa, ale w systemie iOS 8.0 i nowszych aplikacja musi zarejestrować się w celu korzystania z powiadomień użytkowników,
-[UIApplication registerUserNotificationSettings:]
zanim będzie można zaplanować i przedstawić UILocalNotifications, nie zapomnij o tym.źródło
Użytkownicy systemu iOS 8 i nowszych powinni uwzględnić to w pełnomocniku aplikacji, aby działało.
Dodanie tych wierszy kodu pomogłoby,
źródło
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ApparelsViewControllerHide) name:@"ApparelsViewControllerHide" object:nil];
źródło
Zakładam, że poprosiłeś o autoryzację i zarejestrowałeś swoją aplikację do powiadamiania.
Oto kod do tworzenia lokalnych powiadomień
źródło