startUpdatingLocation of LocationManager through silent push notification

cllocationmanager, ios, ios7, objective-c, uibackgroundtask

Solution

I have successfully implement this Using Silent Pushnotification & it Call startUpdatingLocation and I am able to get location data in delegate method :

Using This Payload:

{
    "aps": {
        "content-available": 1
    },
    "SilentPush": "4"
}

I have enabled location & remote notification for Background mode:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
     __block UIBackgroundTaskIdentifier bgTask =0;
    UIApplication  *app = [UIApplication sharedApplication];
     bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [self.locationManager startUpdatingLocation];

 }];

didUpdateLocations

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
        lastLoc=[locations lastObject];
        [logFile addLocObject:[NSString stringWithFormat:@"Loc: %@",lastLoc]];
}

Problem

I am creating app that needs to wake up in background at particular time . I have tried : UILocalNotification : But i Don't want to use UILocalNotification because it needs user interaction to tap on notification and than only app will wake up and start location manager. I have also used `[locationManager startUpdatingLocation];` enabled with background Modes Location updates, this is works but it will take lot of battery. So with using new iOS 7 feature `Silent pushNotification` and `didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:` method i need to start location manager in background, ``` -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ NSLog(@"Receive RemoteNotification in fetchCompletionHandler with UserInfo:%@",userInfo); application.applicationIconBadgeNumber=0; __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ [self.locationManager startUpdatingLocation]; [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; } ``` Silent Push notification is working correctly , Payload for PushNotification: ``` {"aps" : {"content-available" : 1},"SilentPushId" : "07"} ``` But this will not start location manager , Please somebody help me. EDIT: If it is not possible please give me some suggestions.

Original source

Related problems