I developed an application and used FCM to handle notifications. When the application is in background and a notification received, by clicking on the notification the application:didReceiveRemoteNotification: is called and everything is ok! but if the app is opened with other ways like tapping on the app icon, the application:didReceiveRemoteNotification: function is not called and the notification stays unread.
I know this is how it works but i want whenever there is a notification and no matter how the app opened the application:didReceiveRemoteNotification: called!
Related
I have subscribed to APNS notifications in my Swift iOS app.
I am only interested in user-facing notifications, so i have not setup a background mode.
If the app is open, the UNUserNotificationCenterDelegate's userNotificationCenter:willPresent:withCompletionHandler is called. If the app is in the background AND the user taps on the notification (which opens my app by default) userNotificationCenter: didReceive: withCompletionHandler is called.
However, if the user simply dismisses the notification in the notification center, then my app doesn't know that the notification was delivered.
Is it possible to somehow inspect which notifications were delivered when app was in the background or killed and that user hasn't tapped on, upon app launch?
Do you control the payload of the notification?
If you can put 'mutable-content' in the aps dictionary you can use a UNNotificationServiceExtension.
The extension will get notified before a notification is displayed.
You don't have to edit the notification but you'll be able to save any info about it that you want.
I already can manage push notifications from FCM when the app is in Foreground or background, when I do click in notification popup and open app "application didReceiveRemoteNotification" work without problem
My problem is that i don't know how get notification push data if the user open the app normaly (do click in icon app instead of click in notification) and I would lost the data if he close the notification
If the app is in background state UINotification called application didReceiveRemoteNotification , If app is in open state UINotification called application:didFinishLaunchingWithOptions, And can't possible to get data without click on notification in iOS.
check
UIApplicationLaunchOptionsRemoteNotificationKey
or
application:didFinishLaunchingWithOptions
My app is receiving a notification and my problem is that when I received one or more notifications in the background and when i click the app icon to bring me in my app foreground then the notification message(s) doesn't able to display in the foreground it will only works if I click the pop up message in notification center not the icon.
You will not get remote push notification data on launch of app after tapping icon. You can only parse push notification body only on tap of notification alert.
So if you want to do any MUST NEED operation for such notifications there is only way is to introduce server in between. So you can use any web service for it and this will be called every time your app launches or comes to foreground. Call that API on background and do the needful you want.
Sliding from the lock screen and/or pressing a notification from the notifications page... do both pass from applicationDidFinishLunchingWithOptions when the app is totally closed?
My concern is because, when the app is closed and not in background, whenever I press on the app from the notification, my app opens and goes where it has to go... but whenever I press slide to open, the app opens but it does not go to the page it should go.
The docs say that if the action button on the notification is pressed, it calls application:didFinishLaunchingWithOptions and passes in the notification payload. Later it says if the app is running in the foreground, it delivers the notification via application:didReceiveRemoteNotification:. This implies to me that when the app is backgrounded or not running, then application:didFinishLaunchingWithOptions is called. Otherwise, application:didReceiveRemoteNotification: is called.
application:didFinishLaunchingWithOptions: will only be called if your app is not launched already. While it is true that the options will include info on notifications if that is what ended up launching the app, what you want is to handle your local notification logic here:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
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.