How to stop alert notifications in (ios 7) objective c - ios

I have implemented remote notification in objective-c . But my problem is I want to stop alert notification .Blow my code which I am using
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
IRemoteNotificationTypeSound ];
but I still getting banner notification . and didreceiveremotenotificationmethod is successfully called
but when I change the code to
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
IRemoteNotificationTypenone ];
Then I receive no alert, no sound, and also didreceiveremotenotification not called. I want that app not show alert banner. But it must call didreceiveremotenotification in background mode, because in didreceiveremotenotification I am receiving necessary data
.

Related

Programmatically delete Remote Notifications from Notification Centre

How can we pragmatically remove any pending remote notifications sent for my app from notification centre. I want to clear them up on app launch.
I have tried with [[UIApplication sharedApplication] cancelAllLocalNotifications]; API but its not helping.
PS: This question is specific to iOS 10 and old threads are not duplicates for this one.
Finally...
This one works like charm!
[[UNUserNotificationCenter currentNotificationCenter] removeAllDeliveredNotifications];
You can clear all notifications from notification centre by using these simple lines of code
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
use wherever you want. From my side I have used when user pressed logout.
You can use in
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
method to clear notifications after app opens
AFAIK, you should do it by using the background mode for remote notifications, and then responding to these notifications by issuing a local notifications.
You can remove local notifications, but not remote notifications.
Reseting the application badge number also remove all the notifications (local & remote) from the notification center.
Objective C
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
Swift
UIApplication.shared.applicationIconBadgeNumber = 0
This can definitely be achieved by using removeDeliveredNotifications(withIdentifiers:) method available in UserNotifications.framework.
For a detailed tutorial, please follow this
https://medium.com/#sebastianosiski/implementing-removable-remote-notifications-on-ios-a17d74832bde

objective c Push notification BackGround remove old one when receive new one in Notification center

I created a application. That receives push notifications from server.
This all works for me.
But the only thing is that i want that my old push notification in notification center will be removed when i receive a new one.
What do i need to do in this function
- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo {
This doesn't solve my problem
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
doesn't work
It is for Background(when you are home screen or locked your phone).
Or is it possible to replace your old push notification for new one

How to clear notification in didreceiveremoteNotification method when app running in background?

I need to clear the notification in notification center , when i click notification in notification center or badge when app in background. I can able to get log in didreceiveremoteNotification . But not clearing the notification in notification center.
you could try these two lines which i am always using when receiving a notification
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
setApplicationIconBadgeNumber is a multipurpose property to set the badge number and also clear the notifications
If I understand you correctly, you are trying to clear the badge of the push notification.
If so, use this code in
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
applicationDidBecomeActive

How can you get the payload of a push notification if app is already running in the background when the user taps the notification?

If a push notification is displayed to the user and the user taps it and the app is brought to the foreground from a background state then how can the app get the payload of the notification?
Because the app is already running didFinishLaunchingWithOptions: won't get called and because the app was in the background when the push arrived didReceiveRemoteNotification: won't have been called.
There are two places so I usually make a method that handles both something like this:
- (void)handleMessageFromRemoteNotification:(NSDictionary *)userInfo
Then in: application:didFinishLaunchingWithOptions:
if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
[self handleMessageFromRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]];
}
also in: application:didReceiveRemoteNotification:
[self handleMessageFromRemoteNotification:userInfo
If you want to do something different if the app is running check application.applicationState == UIApplicationStateActive in didReceiveRemoteNotification
According to Apple documentation the method didFinishLauchingWithOptions: is called when the user taps the action button of the notification.
As a result of the presented notification, the user taps the action
button of the alert or taps (or clicks) the application icon. If the
action button is tapped (on a device running iOS), the system launches
the application and the application calls its delegate’s
application:didFinishLaunchingWithOptions: method (if implemented); it
passes in the notification payload (for remote notifications) or the
local-notification object (for local notifications).
Then in this method it is easy to recover the content of the notification by doing for example :
UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotif) {
NSString *itemName = [localNotif.userInfo objectForKey:ToDoItemKey];
[viewController displayItem:itemName]; // custom method
app.applicationIconBadgeNumber = localNotif.applicationIconBadgeNumber-1;
}
"because the app was in the background when the push arrived didReceiveRemoteNotification: won't have been called."
This, or didReceiveRemoteNotification:withExpirationHandler, should get called if the app is in the background and gets switched to the foreground when the user taps on the notification.
However I got into a situation when this wasn't working as the reason was the content of the push was incorrect, I can't remember the details but double check what's in there.

Handling user acting on UILocalNotification

My goal is to open a specific screen when user clicks on a UILocalNotification from the iOS Notification Center.
Now if the app is being resumed from the background when user acts on the Notification, I notice didReceiveLocalNotification is called:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
Now I can get the userInfo dictionary from the UILocalNotification object and opens the proper screen.
Unfortunately, this same method is called also when my app publishes a UILocationNotification while the app is running in the foreground:
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
How would I distinguish between the 2 cases?
It passes to you the application object that contains the state in its .applicationState property.
Consequently, you can make sure it is not active by testing...
if (application.applicationState != UIApplicationStateActive){
// do your stuff
}
And that's it!

Resources