iOS: badge counter vs. Notification center - objective-c

I am a bit (a lot) confused about the Notification Center and the app badge counter. I have designed an iOS to-do app which uses local notifications to alert users of a scheduled reminder (which they set in the app) . The app also uses the icon batch counter to display the # of tasks due "today".
At the time of a set reminder notifications correctly show up in Notification Center. However, once the app has been opened the notifications are cleared from Notification Center. The idea is that the notifications remain available in Notification Center until the user clears them.
I have discussed this with my developer and he states that notifications can only be saved in NC when we do not use the icon batch counter. This seems very illogical to me since the icon batch counter shows the # of tasks due "today" and the notifications shown in Notification Center are alerts set by the user.
Hope you guys can help here.... Thanks!

application can set its own badge (counter) independent of the notification scheduled. so u can surely set whatever counter you want to show the today's task by:
NSUInteger tasksCount = 10;
[UIApplication sharedApplication].applicationIconBadgeNumber = tasksCount;
talking about the notifications to show in NF bar, it is configurable by user in Device's Native: Settings-> Notifications-> so you cannot force the user to show all notifications in NF bar (lets say 50 for the day) if user has configured for only 5.
Coming back to your concern, when the app is launched, Notifications from NF bar are not automatically wiped off. you have to write the CODE to remove them from inside the app.
[[UIApplication sharedApplication] cancelAllLocalNotifications];
OR
[[UIApplication sharedApplication] cancelLocalNotification:<notification object>];

Related

iOS 11 new notification center removes all delivered notifications after user make any action with one of them

I have an issue on iOS 11. All delivered notification automatically removing from notification tray after I select any action for one of them. This happens before my code start handling action. In iOS 10 everything is ok, all delivered notifications stay in delivered and disappear only notification where I proceed some action.
My app schedule reminders with custom action, 2 buttons Activate and Stop. User can receive many of them in one day, but its very important to keep already delivered notifications, because most of them is uniq and make different actions.
If it is iOS 11 new notification center behavior or known issue, where I can read about this? Thanks a lot for help.
Minimum deployment target in my app is iOS10 and I use new UNNotificationRequest for scheduling local notifications.

Updating notification badge after dissmissing notification from Notification Center

My app uses Local Notifications. There are situations when more than one notification is scheduled and at some point displayed. When notifications are displayed badge number is updated automatically. When user clicks on one of the notifications I manually decrease badge number and cancel the notification.
The problem starts when user manually dismisses notification from Notification Center. The badge number is not updated. There are situations when there are no notifications displayed in Notification Center and badge shows a number. User is not able to clear the badge.
Setting the badge number to 0 (instead of decreasing it) after clicking on one of the notifications is not an option because it causes all notifications to disappear from Notification Center.
Is there a good way to resolve this issue?
Is there a good way to resolve this issue?
No.
Your app isn't notified when a user dismisses the local notification. Only push notifications can set the badge number when your app isn't running.
The badge is intended to represent the internal state of some data in your app that you control. There is no way to make it always match the number of items in the user's notification center. This is also why you get no notification if the user cancels your local notification.

Detect when a user clears notification from the notification center

My app needs to know if a user deletes/clears the apps notifications from the notification center using the clear button.
Is there either away to detect when the user removes the notification from the notification center or grab an array of notification on the notification center?
You (ie App) cannot interact with NotificationCenter, NotificationCenter interacts with the user. A user can choose not to receive any push-notifications.
http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html

ios 6 UILocalNotification

I have implemented UILocalNotification for iOS 6 but every time the notification is launched, it is displayed as a banner. Is there way I can default it to be an alert (like previous iOS 4)?
Thanks in advance everyone!
This is a setting which you cannot set programmatically. All apps that use notifications have a setting in the Settings app which you can choose from alert, banner, or none.
So bottom line, it is up to the user to select the type of notification.

How can you disable the iOS Notification Center within your App?

If you have a full screen iOS app and you want to prevent the notification center from being pulled down, can you and how?
Also can you block notification alerts or banners from displaying while your app is loading? (I think this is a no way for sure but wanted to ask just in case.)
It has been my experience that fullscreen apps (statusBarHidden = YES) have a slightly different notification center behavior by default: Swiping down over the area previously occupied by the status bar will only show a little tab. Only swiping the tab will then show the notification center. This has been enough to prevent accidental activation for me so far.
Currently, there is no public API for manipulating the behavior of the notification center. I am of the opinion that it's not likely that an app will ever be able to block a notification's appearance, and only slightly less unlikely that an app would be able to prevent the notification center from appearing. iOS is all about a consistent user experience experience at the price of developer freedom. I could see being frustrated by this kind of functionality if I were an unexpecting user.
All that said, there is always the dark-side of undocumented APIs. I would not be surprised if you could pull off some cleverness using those on a jailbroken device, but that's not my cup-o'-tea.
I just now figured this out. I am developing a game that runs in landscape and whenever I touched the left side, the notification center tab would appear. To fix this, you want to add the following:
setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft
I added this right after I setStatusBarHidden and I no longer have the problem of the notification tab.
Hope that helps.
An API was introduced in iOS 11, alongside a change in behavior to how Notification Center (and Control Center) is presented, to allow you to specify the desired behavior.
UIViewController.preferredScreenEdgesDeferringSystemGestures
In iOS 11+, Notification Center will always pull down when swiping from the very top of the screen, even if the status bar is hidden. preferredScreenEdgesDeferringSystemGestures allows you to specify that swiping a screen edge should not trigger the standard system UI, and instead it will provide a pull-out tab that the user must swipe again to bring out the system UI.
This is intended to be used for games where users swipe frequently, where it would be undesired to bring in system UI instead of control the game. For an immersive app like that, you can return .all to specify you don't want any system UI to appear the first time you swipe any edges of the screen, and it should instead prefer your app's own gestures.
Note that this will disable the ability to swipe once from the bottom to close an app on iPhones and iPads that don't have home buttons - the user will have to swipe twice to close the app.
There is still no way to completely disable Notification Center from within your app, nor prevent notifications from appearing while your app is in the foreground.
I built a very simple code snippet to address this issue programatically. I have a timer set-up in my app delegate that runs every .2 seconds each time it runs it keeps moving the status bar orientation so it doesn't impact the game play. I haven't experienced the annoying notification center in my app since! The only issue is the volume control rotates constantly and might be annoying but it's less annoying than notification center
int tick=0;
-(void)toggleNC
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
tick++;
if (tick==1)
{
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];
}
if (tick==2){
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
}
if (tick==3){
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
}
if (tick==4){
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDown];
tick=0;
}
}