I have the following code implemented in applicationDidEnterBackground:
-(void)applicationDidEnterBackground:(UIApplication *)application
{
// Fire date is set to 30 secs and repeat interval is set to 1 min
// for testing purpose.
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:30];
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.alertBody = #"Test Notification";
localNotification.soundName = UILocalNotificationDefaultSoundName;
localNotification.repeatInterval = NSMinuteCalendarUnit;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
The variable localNotification is initialised in application:didFinishLaunchingWithOptions.
All local notifications are cancelled in applicationDidBecomeActive.
Steps:
1) The app Notification Center is initially On when the app is put into background by the user hitting the HOME button.
2) Notification shows up accordingly.
3) Turn app Notification Center to Off in Settings.
4) Notification still shows up.
Notification will be not shown if the app Notification Center is turned off. Is this correct? If my assumption is wrong, how can I cancel the notification when the user turns off the app Notification Center. Deployment target is iOS5.1. iPhone is running iOS6.1.
I’m not sure I understand you, but when you pull an app out of notification center it stops showing it in the notification center window, but it’ll still show the banner or alert on the screen unless you turn that off as well.
Related
Any possibility to reset/clear app badge without any app interactions such as opening the app or any push/local notifications. My need is, I want to reset my app badge starting off every day without even opening the app or with any notifications.
You can schedule local notification for end of day with badge count equal 0. Check this out Updating iOS badge without push notifications
I solved this problem with the help of this solution. The working code is:
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
NSCalendarUnit unitDay = NSCalendarUnitDay;
localNotification.repeatInterval = unitDay;
localNotification.fireDate = fireDate;
localNotification.applicationIconBadgeNumber = -1;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
Local notification has no alertBody, so local notification will not display upfront.
If need to show alertBody then add localNotification.alertBody = #"Your notification alertBody";.
Thanks for the answer.
I realizing push notification handling on my iOS application on Xamarin.iOS platform but my problem actual for iOS native too.
I need to handle push notification when my application is in Background Mode for some reasons, so I turn on Background Mode and Push Notification using in my project. Also I include the content-available key with a value of 1 into the payload’s aps dictionary. Also I include alert, badge and sound keys because I want to show this push notification for user and add it into Notification Center.
As a result after push notification receiving in Background Mode (when application is not active):
1) I handle push notification receiving using DidReceiveRemoteNotification() method.
2) The user see notification rolls down from the top of the screen as a banner.
3) I change application icon badge counter.
My problem is that push notification don't adds to Notification Center after all this actions.
As I understand after handling the push notification in DidReceiveRemoteNotification() method iOS mark this notification like handled and doesn't add them to Notification Center. As possible solution I can create Local Notification, schedule them and it'll added to Notification Center but the user will again see notification rolls down from the top of the screen as a banner and that's not good (it looks like user gets 2 notifications but only 1 shows in Notification Center).
What's the actual reason for this behaviour and how can I solve this problem?
You can try VoIP Push notification Service.
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type
NSDictionary *payloadInfo = payload.dictionaryPayload;
[self showLocalNotificationWithInfo: payloadInfo];
}
- (void) showLocalNotificationWithInfo:(NSDictionary *)infoDict{
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [NSDate date];
localNotification.alertBody = #"Your title message";
localNotification.soundName = #"YourSoundFileName.mp3";
localNotification.userInfo = userInfo;
localNotification.fireDate = [NSDate date];
localNotification.timeZone = [NSTimeZone systemTimeZone];
localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
Apple VoIP Push Service
Thank you guys for your answers. I found a reason of this behavior - the problem was with badge key in push notification body. This key had 0 value and thats why iOS marked new notifications as readed and they didn't add to Notification Center.
I want to show a banner notification on the lock screen. But, while the screen is locked and off, it will not turn back on to show me the notifications.
The behavior I'm looking for is as follows:
The screen will be off, and locked. When the app gets a notification, it will turn on the screen and display a banner on the lock screen.
How can I do this?
This is automatically handled by iOS. When a notification is sent to an app, it will display the banner notification as you are looking for. In app delegate you can register notifications and handle.
UILocalNotification *notification = [[UILocalNotification alloc] init];
NSDate *fireDate = [[NSDate alloc] initWithTimeInterval:5 sinceDate:[NSDate date]];
[notification setFireDate:fireDate];
[notification setSoundName:UILocalNotificationDefaultSoundName];
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
[notification setTimeZone:timeZone];
[notification setAlertBody:#"You have a new notification!"];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
This will create a new notification and fire it after 5 seconds. If the application is in the foreground, nothing will happen (unless handled in the app delegate). But if you background the application (such as shutting off the screen), you will receive a banner notification and hear the default notification sound.
If you need local notification : it means at specific time, the notification will be shown. Use UILocalNotification
If you need notification is sent from server. Here is what you need
http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1
I have a strange issue using local notifications. The notification appears to work perfectly in the simulator. However, when using it on the device, the notification does not show that "fold down" at the top of the screen when it is fired. I know the alert is working because the badge number appears on my app icon, and if I slide down and look at all notifications, the new notification is listed. For some reason I just don't see it happening on the top of the home screen. I have also checked the app's notification settings on the device and it is set to show at the top.
Here is sample code in my .m file.
[[UIApplication sharedApplication] cancelAllLocalNotifications];
UILocalNotification *_localNotification = [[UILocalNotification alloc]init];
_localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
_localNotification.timeZone = [NSTimeZone defaultTimeZone];
_localNotification.alertBody = #"You are notified";
_localNotification.soundName = UILocalNotificationDefaultSoundName;
_localNotification.applicationIconBadgeNumber = [[UIApplication
sharedApplication]applicationIconBadgeNumber]+1;
[[UIApplication sharedApplication]scheduleLocalNotification:_localNotification];
Any help would be fantastic. Thank you!
Simply restarted the iPhone and it worked just fine. Weird.
When my iOS app exits, it registers a series of local notifications, which update the badge number at specific times. The local notifications do not bring up a popup, they simply update the badge. On my old iPod touch which does not support multitasking, this works perfectly. However, on my multitasking enabled devices, I am experiencing a very strange bug: when I have "exited" the app (i.e. it is still running in the background, but I am doing something else), the local notifications are not firing. Is there any reason why the local notifications would not fire when the app is in the background?
The code to create the local notifications runs in a loop (I create a bunch of them):
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.applicationIconBadgeNumber = totalCount; // a number generated earlier in the code
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.fireDate = endDate; // a date generated earlier
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
[localNotification release];
And also I have created the following function in my app delegate, which tells me how many notifications are set up before the app enters the background:
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(#"# Notifications: %d", [[[UIApplication sharedApplication] scheduledLocalNotifications] count]);
}
The app constantly tells me that there are 64 notifications (the number that should be set up) when it enters the background.
Check the following from Apple's developers docs:
"Each application on a device is limited to 64 scheduled local notifications. The system discards scheduled notifications in excess of this limit, keeping only the 64 notifications that will fire the soonest. Recurring notifications are treated as a single notification."
Could you problem be related to the number of notifications been scheduled?
You can find further information in http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/WhatAreRemoteNotif.html
Well #Jason you need to set the alertBody of the local notification atleast to show an alert view, thats all there is to it.
Also if you dont wont to show the view option in the alert box then set the hasAction attribute to NO.
Swift Version:
func applicationDidEnterBackground(application: UIApplication) {
let notification = UILocalNotification()
notification.alertBody = "App has been entered in background"
notification.alertAction = "open"
notification.fireDate = NSDate()
notification.soundName = UILocalNotificationDefaultSoundName
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}