App doesn't receive push notifications in background mode - ios

I'm developing an iOS app that receives well the remote notification when it is in the running state, but it doesn't receive any thing and the notification banner is not showing up in the background state. I set notification stale to banner, background fetch and remote notification are checked in the background modes menu, I'm using xcode 6 and didReceiveRemoteNotification to handle the notification.
Any ideas on how to fix this issu please ?

Check if Background App Refresh is enabled for your application.
Then check what callback method you're using, this must be
- (void)application:(UIApplication *)application didReceiveRemoteNotification:fetchCompletionHandler:

Related

Xamarin iOS notification with NotificationHub displayed without calling DidReceiveRemoteNotification when app is in background

I'm creating an App with xamarin using notification hub for the notification
When the app is in foreground i'm able to process the notification with my implementation of UNUserNotificationCenterDelegate in the WillPresentNotification method and displaying correct title and other data
While when the app is in backgorund or inactive the notification is displayed without passing through any method, so i can't format it
I already tried to add "content-available" as a parameter and what happend was that the plain notification, not formatted correctly is first displayed, then DidReceiveRemoteNotification is fired and another notification, with the correct format is displayed
iOS handles notifications differently depending on if your app is in the foreground or background.
App in foreground:
runs through DidReceiveRemoteNotification.
App in background:
does not immediately run through DidReceiveRemoteNotification. The OS generates and displays the notification. Upon selecting the notification, the app will run through DidReceiveRemoteNotification.
see documentation

iOS 7 - didReceiveRemoteNotification: not triggering on background

I know that this question is tipical but I'm missing something and I don't kwon what is.
I have a simple application, in iOS 7. Using Xcode 6. I'm developing in objective-c.
I want to receive push notifications and update my app icon badge to (1) but I can't trigger the didReceiveRemoteNotification method when the app is in background so I can't set the badge number. This is not my first app with push notifications and badges but I can't do it...
My code:
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
NSLog(#"RECEIVING NOTIFICATION");
When i'm on the app the badge is correctly setted and the log is printed, but if I'm in background mode the method is not triggered.
My payload APNS
{"aps":{"alert":"New push","sound":"default"}}
I want to set the badge manualy to 1. I don't need it on de payload.
Any suggestions?
Thanks
The remote notification will set the badge automatically according to the number of "badge" in aps.
For example:
{"aps":{"alert":"New push","sound":"default","badge":1}}
A bit late, but it might help someone else.
You can trigger - application:didReceiveRemoteNotification: when your app is in background by following this two steps:
Set Required background modes to App downloads content in response to push notifications in your Info.plist file
Add "content-available": 1 to your notification payload.
This will call - application:didReceiveRemoteNotification: and allow you to handle notifications in background (i.e, refresh the content of your app, etc...).
Hope this helps!

How to tell whether user opened app with notification with iOS 7 remote-notification background mode?

According to didReceiveRemoteNotification when in background , we used to be able to handle the user opening the app by clicking the action button on a push notification (or swiping on the push notification, depending on how the user sees push notifications) by implementing -application:didReceiveRemoteNotification: and then checking inside the method whether the application's applicationState was not active.
In iOS 7, there's the new remote-notification background mode, which allows the app to perform background fetch when a remote notification is displayed to the user (without the user necessarily doing anything to the notification). To support this mode, you are supposed to implement the -application:didReceiveRemoteNotification:fetchCompletionHandler: method.
The documentation for -application:didReceiveRemoteNotification: says that if your application delegate implements the application:didReceiveRemoteNotification:fetchCompletionHandler: method, then "the app object calls that method instead of this one." Which means we cannot use -application:didReceiveRemoteNotification: to handle remote notifications anymore, since it's not going to be called.
We should probably put handling logic in application:didReceiveRemoteNotification:fetchCompletionHandler:, but the previous trick for handling it doesn't make sense anymore -- previously, we depended on the fact that the only way for -application:didReceiveRemoteNotification: to be called when the app is not active was if the user tapped the action button on the notification to open the app. However, now, the whole point of the remote-notification background mode is that it can call application:didReceiveRemoteNotification:fetchCompletionHandler: in the background every time a remote notification is received, before the user does anything to it.
So then, how can we now tell when the user opens the app using the action button on the notification?
You still check the application state in application:didReceiveRemoteNotification:fetchCompletionHandler:
UIApplicationStateBackground - App is in the background receiving a push notification
UIApplicationStateInactive - App is opening from the user tapping a notification
I was use this delegate function to add the 『Notification Number』.
Cause our Server not send the Badge to our Clients.
Then I used the strange method to add the 『Notification Number』 with this delegate function, and I also add a code to switch UIViewController in this function.
I found out when I use the server push Notification to my test App, and the status of test App is in the background, even I am using Twitter or Safari.
My test App also switch UIViewController to another UIViewController after I push Notification from the server.

how to get all notifications when app is in background?

I can get the notification by calling didReceiveRemoteNotification , but if the App is running in background and there are 5 notifications, how to get all notifications when App become active?
Unfortunately, there is no way to do this. The data from a notification can only be pushed by clicking the individual notification. More info here: iOS Push Notification - How to get the notification data when you click on the app icon instead of notification

When my app is in background, push notifications are handled only if I touch the top notification banner

I've implemented
application:didReceiveRemoteNotification:
to store data in my app when a push notification is received.
However when my app is in background and I receive a notification, the data is stored only if I touch the notification banner appearing on top:
Instead, if I touch the app icon to reopen it, the content of the notification is not stored:
Since I'm receiving the notifications only when I use the distribution profile, I'm not sure if application:didReceiveRemoteNotification: is invoked only when I push the notification banner on top.
I thought it is always invoked at the time a notification is received, and not after a user action on the device.
UPDATE.
I don't know if this can help but, just to let you know, I haven't implemented any of these methods:
– applicationDidEnterBackground:
– applicationWillEnterForeground:
- applicationDidBecomeActive:
I think I've found out why. From documentation:
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).
If the application icon is tapped on a device running iOS, the
application calls the same method, but furnishes no information about
the notification.
http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html
However, I'm wondering if there is a way to load the payload even if the app has been re-opened by touching the icon.

Resources