Displaying notifications on lock screen - ios

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

Related

silent notification to alert in ios?

I'm sending a silent notification to a user that gets picked up trough "didReceiveRemoteNotification fetchCompletionHsndler" where I want to check som conditions and if it returns "true" for thoese want to make notificaton visible to a user -any idea on how can I accomplish that?
Yes, there are 2 ways for that.
If your condition returns true then:
1) Your app is an active state then use any third party/alert to show that navigation content.
2) Your app is in the background then fire local notification with exact content of the silent notification.
like this:
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [[NSDate date] dateByAddingTimeInterval:1]; // will fire notification after 1 second
notification.alertBody = #""; // pass your body text here
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

Reset or clear iOS app badge without any app interactions like open the app or push notification

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.

iOS Push Notifications don't adds to Notification Center

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.

How to open the app from the background task in iOS?

Is it possible to open an app from a background task in iOS?
I want my app to run in the background, and I want it to reappear for whatever reason without user input. Is this possible?
In Android you can have a service that runs in the background, and at any time you can start an Activity, which starts the app for that activity.
I know this does not make for a good user experience. I still want to know whether it can be done.
You can create schedule a local notification with a time offset of 0 (eg show an alert immediatly). If the use taps on the notification, the app will be launched.
But otherwise, you will not be able to launch out of the background into the forground without a notification.
NSDate * theDate = [[NSDate date] dateByAddingTimeInterval:0]; //
UIApplication* app = [UIApplication sharedApplication];
NSArray * oldNotifications = [app scheduledLocalNotifications];
// Clear out the old notification before scheduling a new one.
if ([oldNotifications count] > 0)
[app cancelAllLocalNotifications];
// Create a new notification.
UILocalNotification* alarm = [[UILocalNotification alloc] init];
if (alarm)
{
alarm.fireDate = theDate;
alarm.timeZone = [NSTimeZone defaultTimeZone];
alarm.repeatInterval = 0;
alarm.soundName = #"sonar";
alarm.alertBody = #"Background task complete, tap to show app" ;
[app scheduleLocalNotification:alarm];
}
From Apples Documentation:
"Notifications are a way for an app that is suspended, is in the background, or is not running to get the user’s attention. Apps can use local notifications to display alerts, play sounds, badge the app’s icon, or a combination of the three. For example, an alarm clock app might use local notifications to play an alarm sound and display an alert to disable the alarm. When a notification is delivered to the user, the user must decide if the information warrants bringing the app back to the foreground. (If the app is already running in the foreground, local notifications are delivered quietly to the app and not to the user.)"

UILocalNotification still shows up when App Notification Center is switched Off

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.

Resources