Notificação por push silenciosa (plano de fundo) não recebida no macOS Catalina (aplicativo Catalyst)

9

No momento, estou implementando notificações push do nosso servidor back-end para nosso aplicativo (macOS Catalina e iOS - mesma base de código), usando o Apple Push Notifications e o modo de autenticação baseado em token (gerando JWT de keyId, teamId, ... e assinando com a chave privada gerada no console do desenvolvedor da Apple) para enviar push ao serviço APN.

O problema que enfrento é que posso enviar com êxito notificações de "alerta" (status 200, com cabeçalho apns-push-type: alert) e recebê-las no meu dispositivo iOS e MacOS (as notificações por push aparecem com êxito no modo de produção e sandbox), mas por algum motivo "silencioso "empurra (com cabeçalho apns-push-type: background), apenas são recebidas no meu dispositivo iOS (iPhone), mas não no meu Mac ( didReceiveRemoteNotification(...)em AppDelegatenunca é chamado).

O que eu fiz até agora:

  • Verifique se o cabeçalho da solicitação APN está configurado corretamente para envio silencioso: apns-push-type: background
  • Certifique-se de ter o cabeçalho de tópico APN correto: apns-topic: my.bundle.id(isso é diferente para sandbox / produção)
  • Adicionado o cabeçalho de prioridade "semi-exigido": apns-priority: 5(somente ao enviar push em segundo plano)
  • Verificou-se que o JWT criado é válido e usado no cabeçalho de autenticação do APN: authorization: mytoken(esse deve ser o caso, caso contrário, o serviço APN não responderia com o status 200)
  • Confirmei que meu aplicativo tem os direitos e recursos corretos definidos no Xcode (meu raciocínio: esse deve ser o caso, caso contrário, as notificações push de 'alerta' também não funcionarão)
  • Verifique duas vezes se as notificações por push do aplicativo Mac são permitidas / ativadas (configurações do sistema verificadas)
  • Verifique se o token do dispositivo que estou enviando o envio é realmente do dispositivo destinado a recebê-lo (por exemplo, meu MacBook)
  • Verifiquei se a chave privada que estou usando para assinar o JWT tem o recurso APN
  • Testado enquanto o aplicativo Mac está sendo executado, mas não está em foco e também quando está em foco

As solicitações de APNs que estou executando para enviar o push são:

A carga útil (JSON) que estou enviando para o serviço APN no corpo da solicitação é a seguinte:

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

De qualquer forma (produção e sandbox, ambos com o token do dispositivo iOS e macOS), minha solicitação ao APN retorna com um código de status 200. Meu MacBook está executando o Catalina 10.15.3. O que estou fazendo de errado aqui ou é algo que simplesmente não é suportado por aplicativos Catalyst?

Philipp Jahoda
fonte

Respostas:

2

Nossa pergunta doozy. Estou razoavelmente familiarizado com as dores de cabeça dos APNs, mas algo me ocorreu nos últimos documentos :

Além disso, a solicitação POST da notificação deve conter o campo de cabeçalho apns-push-type com um valor de segundo plano e o campo apns-priority com um valor de 5. O servidor APNs requer o campo apns-push-type ao enviar notificações push para Apple Watch e recomenda-o para todas as plataformas. Para obter mais informações, consulte Criar e enviar uma solicitação POST aos APNs.

A coisa da prioridade 5 faz diferença?

Além disso, minha tentativa geralmente de corrigir esses problemas é testar em um arquivo, em oposição a uma construção do Xcode. AFAIK, o servidor push de produção, pode enviar apenas para a App Store, ad-hoc, empresa ou builds de voo de teste; portanto, se você estiver construindo a partir do Xcode, não acho que você receba notificações por push com apns de produção.

Matthew Weldon
fonte
1
Obrigado por seus pensamentos. Eu tentei com o cabeçalho de prioridade de macacos (valor 5) também, infelizmente não há diferença. Tentarei as sugestões finais que você fez sobre o teste com uma compilação arquivada.
Philipp Jahoda 20/02
O arquivamento @PhilippJahoda fyi é apenas metade da solução, você ainda precisa distribuir ad-hoc ou um dos outros métodos listados para receber notificações push de produção. Isso torna a depuração uma dor maior também. Espero que você possa resolver isso, ficarei feliz em saber quando o fizer.
Matthew Weldon
Sim, obrigado pelo aviso. Essa coisa é uma grande dor na bunda. Mais pensamentos além disso? Não consigo entender o fato de que ele está funcionando no iOS, mas não no macOS.
Philipp Jahoda 26/02