I want to do some tasks as soon as user comes online even he is in background. I am using Reachability class for checking internet. But this class is not notifying me when i am at background. I know people asked this question earlier but didn't got any solutions there. If i use beginBackgroundTaskWithExpirationHandler
.
It gives me 3 to 4 min only, after that if network change i am not getting any notification. Please suggest me something.I think it is possible because native mail app work in that manner and my app support iOS7 only.
3 Answers
It is not possible to do exactly what you want. You can not base your assumptions on Apple supplied apps as Apple has access to processes / APIs that you don't. Mail is running as a daemon process on the device and your app will never be doing that.
Read about the iOS 7 background capabilities. It is based around your app getting processing time just before the user wants to run the app - not at arbitrary times of your choice.

- 118,658
- 15
- 128
- 151
You cannot get notification form your classes while the app is in the background, you can make use of the new iOS 7 background fetching possibilities. Here is a tutorial http://www.objc.io/issue-5/multitasking.html

- 4,908
- 24
- 36
use Background Fetch mode from Capabilities. Firstable you need to check the checkbox for background mode:
Project settings -> Capabilities -> BackgroundMode -> Background Fetch
Then you need to ask for time interval as often as you can the sooner the better so i suggest application:didFinishLaunchingWithOptions:
and you need to put this line:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
return YES;
}
UIApplicationBackgroundFetchIntervalMinimum
- The smallest fetch interval supported by the system.
And then when background fetch will fire you can check in AppDelegate
with method:
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus status = [reachability currentReachabilityStatus];
switch (status) {
case NotReachable: {
NSLog(@"no internet connection");
break;
}
case ReachableViaWiFi: {
NSLog(@"WiFi");
break;
}
case ReachableViaWWAN: {
NSLog(@"cellular");
break;
}
}
completionHandler(YES);
}
Supports iOS 7.0+

- 15,485
- 6
- 64
- 84