2016-04-21 4 views
0

Я пытаюсь сделать вызов API после получения вызова «didEnterRegion». Когда приложение находится на передней панели, оно отлично работает. Но если приложение отключено или даже в фоновом режиме, вызов никогда не выполняется. Я попытался отладить его, но однажды «reportLocationEventToServerWithType» называется отладчиком «умирает», и вызов никогда не выполняется. Я не думаю, что это важно, но я использую Estimote sdk для мониторинга маяка. Вот фрагменты кода:AFNetworking api call после события geofence или beacon

- (void)beaconManager:(id)manager didEnterRegion:(CLBeaconRegion *)region{ 


UIApplication *app    = [UIApplication sharedApplication]; 



NSNumber * mallID = [self.dictBeaconsPerMall objectForKey:region.identifier]; 
Mall * mall = [Mall getMallWithID:mallID]; 

[ApplicationManager sharedInstance].locationManager.beaconRecognizedMall=mall; 
[[NSNotificationCenter defaultCenter]postNotificationName:nLocationMallUpdated object:nil]; 
UILocalNotification * not = [[UILocalNotification alloc]init]; 
    not.alertBody = [NSString stringWithFormat:@"DID Enter beacon region at: %@",mall.strTitle]; 
    not.alertAction = @"alertAction"; 
    not.soundName = UILocalNotificationDefaultSoundName; 

    [app presentLocalNotificationNow:not]; 


[[ApplicationManager sharedInstance].crashAndReportsManager reportLocationEventToServerWithType:@"beacon" andSubParam:region.identifier extraInfo:@{@"paramKey":@"key"}]; 
} 


-(void)reportLocationEventToServerWithType: (NSString*)type andSubParam:(NSString*) strID extraInfo: (NSDictionary*)extraInfo{ 

    NSString* udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
    NSMutableDictionary * params = [[NSMutableDictionary alloc]init]; 
    [params setObject:type forKey:@"type"]; 
    [params setObject:strID forKey:@"subParam"]; 
    [params setObject:udid forKey:@"udid"]; 

    if(extraInfo) 
     [params addEntriesFromDictionary:extraInfo]; 
    UserLogRequest * req = [[UserLogRequest alloc]initWithCallerObject:self andParams:params]; 
    req.showHud=NO; 
    req.showMessage=NO; 
    [[ApplicationManager sharedInstance].requestManager sendRequestForRequest:req]; 

}

инициализации запроса и менеджер запроса «sendRequestForRequest» работают хорошо в миллионах других ситуациях, поэтому их реализация не имеет никакого отношения.

Спасибо!

ответ

0

Выполнение фона в ios немного отличается. вы не можете выполнять фоновый режим без каких-либо настроек из возможностей в рамках целевой задачи проекта. вы должны включить фоновое выполнение из него для определенных требований, таких как местоположение, аудио и т. д., а затем вы должны реализовать код соответственно.

Вы ограниченные возможности для выполнения в фоновом режиме, как audioplaying, обновление местоположения, конечной задачей длины, передача голоса по IP и т.д.

см это apple documentation более подробно о выполнении фона и вы можете Google выполнение фона вы получили некоторые хорошие результаты.

Таким образом, причина неработоспособности вашей задачи в фоновом режиме заключается в том, что вы ее неправильно настроили.

надеюсь, что это поможет :)

+0

Спасибо! Я тоже это пробовал, но ничего. Упоминал фоновые режимы местоположения в plist и пытался сделать это с фоновой задачей. Еще не успел ... – user2162718

+0

Вы не можете позвонить api из фона. – Lion