Приложение не запускается из убитого состояния с помощью тихого уведомления
Я хочу обновить местоположение пользователя на сервере, когда получено автоматическое уведомление. Я включил push-уведомления и фоновый режим в качестве удаленного уведомления и местоположения. Но мой -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
не вызывается, когда приложение находится в нерабочем состоянии или не работает. Я проверяю это, отправляя данные о местоположении в pubnub. Главная проблема в том, что когда я начал кодировать эту часть, она работала отлично, но через некоторое время она перестала работать, и после этого до сих пор я борюсь с этим. Любая помощь будет оценена.
Вот мой код:
// В приложении делегат
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler{
handler(UIBackgroundFetchResultNewData);
[[RemoteNotification sharedInstance] pushNotificationReceived:userInfo];
}
//RemoteNotification Modal
- (void) pushNotificationReceived:(NSDictionary *) userInfo
{
[self registerBackgroundTaskHandler];
//get the location here, or start getting the location
locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy= kCLLocationAccuracyBest;
locationManager.delegate = self;
[locationManager startUpdatingLocation];
}
- (void) registerBackgroundTaskHandler
{
__block UIApplication *app = [UIApplication sharedApplication];
self.backgroundTaskId = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:self.backgroundTaskId];
self.backgroundTaskId = 0;
}];
}
- (void) endBackgroundTask
{
if (self.backgroundTaskId)
{
UIApplication *app = [UIApplication sharedApplication];
[app endBackgroundTask:self.backgroundTaskId];
self.backgroundTaskId = 0;
}
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
[locationManager stopUpdatingLocation];
[[DHWebservices sharedInstance] sendLocationWithLocation:[locations objectAtIndex:0] success:^(NSDictionary *data) {
[self endBackgroundTask];
} errorBlock:^(id error) {
}];
}
Я использую Firebase для отправки уведомлений с помощью почтальона.
это мой формат уведомления:
{
"to" : "fF97NwwMTvw:APA91bERqtpIxpSVXNujO_Wl1dVuPXuaJyNP2ygtVlNXxp618ykSubhQZXnh5BS3VPkqdto0lzPzJtQIzR0OIgq8oFZAuhhWfdWim5XRlxv3ut9Y1QGzu6VafNU3OqU8pJT75gg9J3-g",
"content_available": true,
"priority": "high",
"data" : {
"key1" : "abc",
"key2" : 123
}
}