Уведомление Silent pu sh (фон) не получено в macOS Catalina (приложение Catalyst) - PullRequest
9 голосов
/ 11 февраля 2020

В настоящее время я выполняю pu sh уведомлений с нашего внутреннего сервера в наше приложение (macOS Catalina & iOS - та же самая база кода), используя Apple Pu sh Уведомления & основанный на токене способ аутентификации (генерирование JWT из keyId, teamId, ... и подписание его с помощью закрытого ключа, сгенерированного в консоли разработчика Apple) для отправки запросов в службу APN.

Проблема I Я сталкиваюсь с тем, что я могу успешно отправлять "оповещения" уведомлений (статус 200, с заголовком apns-push-type: alert) и получать их на моем устройстве iOS и MacOS (уведомления pu sh успешно появляются в режиме производства и песочнице), но для по какой-то причине «тихие» нажатия (с заголовком apns-push-type: background) принимаются только на моем iOS устройстве (iPhone), , но не на моем Ma c (didReceiveRemoteNotification(...) in * 1012) * никогда не вызывается).

Что я сделал до сих пор:

  • Удостоверился, что заголовок запроса APN правильно настроен для беззвучного pu sh: apns-push-type: background
  • Убедитесь, что у вас правильный APN topi c header: apns-topic: my.bundle.id (это отличается для песочницы / производства)
  • Добавлен «необязательный» приоритетный заголовок: apns-priority: 5 (только при доставке фоновых нажатий)
  • Проверено, что Созданный JWT действителен и используется в заголовке аутентификации APN: authorization: mytoken (это должно иметь место, иначе служба APN не ответила бы со статусом 200)
  • Подтверждено, что мое приложение имеет правильные права и возможности, определенные в Xcode (моё рассуждение: это должно быть так, иначе 'alert' уведомления pu sh также не будут работать)
  • Дважды проверил, что уведомления pu sh для приложения Ma c разрешены / включены (проверил настройки системы)
  • Удостоверился, что токен устройства, на который я отправляю pu sh, фактически получен с устройства, предназначенного для получения pu sh (например, моего MacBook)
  • Проверено, что закрытый ключ, который я использую для подписи JWT, имеет возможность APN
  • Протестировано во время работы приложения Ma c, но не в фокусе, а также в фокусе
* 10 40 * Запросы APN, которые я выполняю для отправки pu sh:

Полезная нагрузка (JSON), которую я отправляю службе APN в теле запроса, выглядит следующим образом:

{
   "aps": {
      "content-available": 1 # defines push as "silent"
   },
   "data": { #some key-value pairs here }
}

В любом случае (как в рабочей среде, так и в песочнице, с токеном устройства iOS и macOS) мой запрос к APN возвращается с кодом состояния 200. Мой MacBook работает под управлением Catalina 10.15.3. Что я, возможно, здесь делаю неправильно или это просто не поддерживается приложениями Catalyst?

1 Ответ

2 голосов
/ 19 февраля 2020

Ух ты, дузи вопрос. Я достаточно хорошо знаком с головными болями APN, но что-то всплыло у меня из последних документов :

Кроме того, запрос POST уведомления должен содержать apns-pu sh - введите поле заголовка со значением фона и поле приоритета apns со значением 5. Сервер APN требует поле типа apns-pu sh -типа при отправке уведомлений pu sh в Apple Watch и рекомендует его для все платформы. Для получения дополнительной информации см. Создание и отправка запроса POST в APN.

Имеет ли значение приоритет 5 значение?

Кроме того, обычно я пытаюсь решить эти проблемы, выполняя тестирование в архиве, а не в сборке Xcode. AFAIK сервер prod pu sh может отправлять только сборки в App Store, ad-ho c, enterprise или testflight, поэтому, если вы просто строите из Xcode, я не думаю, что вы получите pu sh уведомления с продукцией apns.

...