问题
I have an iOS7 app which registers for background mode remote-notification:
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>
It works fine before reboot and app gets this event while in background:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
But it looks like after reboot I don't get this event anymore until I start application manually.
So, question is: can I make iOS7 to run my app into background after reboot when it receives silent push notification for my app? My push notifications don't have "alert" field, only "contentAvailable" - can this be a reason? I've seen apps like whatsapp being able to receive and show push notifications immediately after reboot so it looks doable for at least "alert" kind of notifications.
I know that I can use significant location monitoring to restart app at some point after reboot but I would like to avoid showing location icon on toolbar all the time. Can background-fetch mode help with that? Is there any statistics, how fast after reboot app with background fetch mode will be executed?
回答1:
No, It won't work. Because your app will be in Not Running state as you rebooted your device.
As per apple doc, the new multitasking API(fetch and remote-notification) will work only when the app in the suspended/background/foreground state. If the app is in background/foreground state, then application:didReceiveRemoteNotification:fetchCompletionHandler
will get triggered. If the app is in suspended state, then -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
will get triggered.
In your case the app is in Not Running state, because of that application:didReceiveRemoteNotification:fetchCompletionHandler
is never get triggered.
Please refer apple doc for more about app states.
来源:https://stackoverflow.com/questions/20682909/does-ios-start-app-in-background-after-reboot-if-remote-notification-defined-in