Невозможно получить тихое уведомление, когда приложение неактивно iOS

Я разрабатываю приложение и использую тихие push-уведомления для отправки некоторых данных. Push работает нормально, когда приложение активно, но если я прокручиваю приложение или оно неактивно, мое приложение не получает push-уведомление. Я включил push-уведомление в фоновом режиме в разделе «Возможности», а также добавил требуемый ключ фонового режима в info.plist.

Это пример данных, которые я отправляю вместе с push

  {
   "aps": {
      "content-available": 1
    },
    "yourdatakey":{data}
}

Что мне делать, чтобы решить эту проблему??.. Может ли приложение iOS получать тихие push-уведомления в неактивном режиме?

    -(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler
{    
    if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO( @"10.0" ) )
    {
        NSLog( @"iOS version >= 10. Let NotificationCenter handle this one." );
        return;
    }
    NSLog( @"HANDLE PUSH, didReceiveRemoteNotification: %@", userInfo );

    if( [UIApplication sharedApplication].applicationState == UIApplicationStateInactive )
    {
        NSLog( @"INACTIVE" );
        completionHandler( UIBackgroundFetchResultNewData );
    }
    else if( [UIApplication sharedApplication].applicationState == UIApplicationStateBackground )
    {
        NSLog( @"BACKGROUND" );
        completionHandler( UIBackgroundFetchResultNewData );
    }  
    else  
    {  
        NSLog( @"FOREGROUND" );  
        completionHandler( UIBackgroundFetchResultNewData );  
    }  
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
    NSLog( @"Handle push from foreground" );
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
         withCompletionHandler:(void (^)())completionHandler
{
    NSLog( @"Handle push from background or closed" );
}

Push играет решающую роль в моем приложении и не хочет никаких задержек. Что я должен сделать, чтобы получить толчок немедленно??...


comment
Вы видите баннер в центре уведомлений?   -  person Krishna Datt Shukla    schedule 21.12.2016


Ответы (1)


Насколько я могу судить, тихое push-уведомление должно выглядеть примерно так:

{ 
      "to" : "<DEVICE_ID>",
      "priority" : "high",
      "content_available" : true,
      "data" : { "custom_key":"custom value", "custom_key_2":"custom value 2" }
}

Для меня это отправляется почти сразу, когда приложение находится на переднем плане или в фоновом режиме. Однако, когда приложение неактивно, оно вообще не проходит (не запускает приложение для обработки сообщения).

Если я добавлю в сообщение следующее:

  "notification" : { "body" : "Notification Text", "sound" : "chime.aiff" }

Он будет воспроизводить звуковой сигнал и отображать «Текст уведомления» в области уведомлений, когда приложение неактивно, но по-прежнему не запускает приложение для обработки части данных сообщения. Я понимаю, что это, вероятно, задумано, но я использовал это, чтобы подтвердить, что я что-то получаю, пока приложение неактивно.

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

Редактировать: появляется, если пользователь принудительно закрывает приложение (проведите пальцем вверх в диспетчере задач), Apple отключает запуск приложения при получении push-уведомления. Вы ничего не можете с этим поделать. В документации Apple говорится, что если вы снова запустите приложение вручную или перезапустите устройство, оно снова позволит запускать приложение из автоматических push-уведомлений, но я не обнаружил, что это так. Я думаю, что короткий ответ таков: «тихие push-уведомления на iOS работают, когда Apple решает позволить им работать». Думаю, если вам нужна мобильная операционная система, которая работает ожидаемым образом, направляйте своих пользователей на Android.

person Dave Price    schedule 20.12.2016
comment
Я просто хотел бы подтвердить, что у меня тоже есть эта проблема, и похоже, что у других тоже: forums.developer.apple.com/thread/36776 - person scott dickerson; 22.03.2017