Приложение не запускается из убитого состояния с помощью тихого уведомления

Я хочу обновить местоположение пользователя на сервере, когда получено автоматическое уведомление. Я включил 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
}
}

0 ответов

Другие вопросы по тегам