I developed a VoIP app and I read from the documentation that a VoIP app automatically restarts on phone reboot. However, DidFinishLaunchingWithOptions is not called on reboot so my connection cannot be restored.
The only way to reconnect is to start it manually it seems.
I can see the app is in memory, because it is quite quick to start when I click on it, but I thought the app should be able to restore its connection without user intervention.
Any thoughts? What am I missing? Is there another callback in AppDelegate that I missed?
The app is capable of receiving remote notifications in this state.
According to
Voip Pushkit notification will not re-launch the app if it was force-quitted and device was rebooted
this seems to work in most cases.
I have not found any official documents on this.
EDIT:
Here
https://developer.apple.com/library/ios/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html#//apple_ref/doc/uid/TP40015243-CH30-SW1
is the official documentation on pushkit, which describes that the app is woken up, even if it not running or in background mode.
Related
Is there any apns push that can wake application up, do something in background and keep silence?
I found two solutions, but still not perfect:
Background notification. It can wakes app up in the background and gives it time to do something, but Apple doesn’t guarantee the delivery and it can't work after device is rebooted
UNNotificationServiceExtension. It can wakes app up and do something in the background, even if the device is rebooted. But, it can't be silent.
Our flow on iOS was:
Receive remote notification
Download data from server
Determine whether to notify from the content of the data
In iOS 12, our solution is PushKit, but it has some restrictions in iOS 13 now, so we have to make some changes.
Could anyone give me some advice, please? Thanks.
According to the documentation silent notifications are processed by the delegate application(_:didReceiveRemoteNotification:fetchCompletionHandler:) also when the app is in "Not Running" state. This behavior does not apply if the app was force-quitted by the user.
But the documentation mentions that if the device has been restarted after a force-quit, the notification will trigger again the app launch on the device.
Excerpt from the documentation:
... However, the system does not automatically launch your app if the user has force-quit it. In that situation, the user must relaunch your app or restart the device before the system attempts to launch your app automatically again.
Can anyone confirm this to be working (maybe with earlier iOS versions)?
My experience (using iOS 10.x) is that if the app was force-quitted the app won't be restarted even after (multiple) device reboot.
I have a VOIP enabled app, that has suitable codes to enable the app to run on background. The app runs fine (say for example it is able to receive calls) when its on background.
Now, when I restart the phone (with my app in question running on the background), I see after the restart the app is there on the list of apps running (this I am able to verify by double tapping the home button). However, my app is not actually running on the background, it does not receive any calls.
Once I open the app, it 'relaunches' and is now able to receive calls. Is this the expected behaviour? Or am I missing something? I need to renewable the app in background mode once the phone is restarted.
Is there a way to know when the device is rebooted in ios, like "BOOT_COMPLETED" permission in android. Went through internet and could not find and appropriate answer. Any help would be appreciated.
https://github.com/lithium3141/BootLaunch
You can refer this page but one think, if your app doesn't have voip feature means Apple will reject your application.
Apple State in their document:
https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW1
UIBackgroundModes
voip-The app provides Voice-over-IP services. Apps with this key are automatically launched after system boot so that the app can
reestablish VoIP services. Apps with this key are also allowed to play
background audio.
remote-notification-The app uses remote notifications as a signal that there is new content available for download. When a remote
notification arrives, the system launches or resumes the app in the
background and gives it a small amount of time to download the new
content.
This value is supported in iOS 7.0 and later.
voip key is the technique used most of the voip applications like skype.
Geo Fencing is praised by many, yet I could not easily find an answer to the following.
iOS and/or Android, does an inactive app send you notifications if you are close by?
My question is probably more like: is there an underlying system that knows your app needs to check for your location against the in-app locations and does so despite the app not being active.
Forget the settings where you can switch off geolocation for particular apps, let's assume that is switched on.
But let's assume I just switched my iphone on, no app is running yet. So I am carrying that sleeping phone in my pocket. Would I receive location notifications?
I am currently testing this with Highlight, but maybe someone knows the code/tech side to this answer.
Varies by OS.
On Android, apps can run as a service that are automatically started when the phone boots up. In this case, the user does not need to start the app. So, on Android, yes you would receive location notifications in sleep mode. See http://developer.android.com/guide/components/services.html or https://stackoverflow.com/questions/9866970/tutorial-for-android-services for more info on Android Services.
On Apple, I'm not so sure about running apps as a service like Android. However, I believe there are events that apps in the background can register for. So again, the app (once started) would receive notifications in sleep mode.