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 AppDelegate
nunca é 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:
- Sandbox: POST https://api.sandbox.push.apple.com/3/device/ {deviceToken}
- Produção: POST https://api.push.apple.com/3/device/ {deviceToken}
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?
fonte