Параллельный beginBackgroundTaskWithName для push-уведомлений

Я хочу запустить и фоновое задание при получении push-уведомления. Пока у меня есть следующее:

  -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

  NSString* taskName = [NSString stringWithFormat:@"PushNotificationTask-%@", [[NSUUID UUID] UUIDString]];

  NSLog(@"Starting bg-task for push notification %@", taskName);

  self.pnBgTask = [application beginBackgroundTaskWithName:taskName expirationHandler:^{
    NSLog(@"Expiring bg-task for push notification %@", taskName);

    [application endBackgroundTask:self.pnBgTask];
    self.pnBgTask = UIBackgroundTaskInvalid;
  }];

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    // do work here

    NSLog(@"Ending bg-task for push notification %@", taskName);
    [application endBackgroundTask:self.pnBgTask];
    self.pnBgTask = UIBackgroundTaskInvalid;
  });

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

Может кто-нибудь предложить хороший шаблон для решения этой проблемы?

0 ответов

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