-->

Does iOS start app in background after reboot if r

2020-06-19 12:40发布

问题:

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.