Eu estou batendo minha cabeça. Estou implementando a notificação por push. Tudo está funcionando bem (o envio é recebido, o selo é atualizado), mas no iOS 13.3 o aplicativo de método (_: didReceiveRemoteNotification: fetchCompletionHandler :) não é chamado quando o aplicativo está em segundo plano. Se o aplicativo estiver em primeiro plano ou usando um dispositivo iOS 12, o método será chamado. Registro-me para notificação por push da seguinte maneira:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
A carga útil está configurada para o seguinte
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
Tentei adicionar "Notificações remotas" e "Processamento em segundo plano" como recursos do aplicativo em todas as variações (apenas "Notificações remotas" / "Processamento em segundo plano", sem nenhum desses recursos, ativando os dois) sem nenhuma alteração. Defino o delegado para o UNUserNotificationCenter, mas novamente sem sucesso. Defino os cabeçalhos de acordo:
curl -v \
-H 'apns-priority: 4' \
-H 'apns-topic: xx.xxxxx.xxxx' \
-H 'apns-push-type: alert' \
-H 'Content-Type: application/json; charset=utf-8' \
-d '{"aps": {"badge": 10,"alert": "test", "content-available":1}}' \
--http2 \
--cert pushcert.pem \
https://api.sandbox.push.apple.com/3/device/1234567890
Nos documentos, ele afirma que esse método é chamado mesmo quando o aplicativo está em segundo plano:
Use este método para processar notificações remotas recebidas para seu aplicativo. Diferente do aplicativo: didReceiveRemoteNotification: method, que é chamado apenas quando o aplicativo está sendo executado em primeiro plano, o sistema chama esse método quando o aplicativo está sendo executado em primeiro plano ou em segundo plano.
O que estou perdendo aqui para o iOS 13?
fonte
application(_:didReceiveRemoteNotification:withCompletionHandler:)
método?Respostas:
Você definiu
em seu back-end da carga útil do APS?
Também é necessário ter certeza de que você ativou o modo de segundo plano no arquivo info.plist do seu aplicativo para iOS
fonte
Eu gasto um tíquete de suporte para obter uma resposta para esse problema.
Acontece que a documentação não é 100% "válida" para o iOS 13 neste tópico. O dispositivo decide se deve acordar ou não. Embora a documentação afirme um pouco diferente.
A maneira preferida de implementação da Apple como uma extensão de notificação. Depois disso, você deve adaptar a carga útil para incluir "conteúdo mutável".
Depois, perguntei ao suporte se eu deveria arquivar um radar e eles responderam com "sim".
fonte
Implemente
didRegisterForRemoteNotificationsWithDeviceToken
e tambémdidFailToRegisterForRemoteNotificationsWithError
no representante do seu aplicativo, para verificar se o dispositivo faz uma boa conexão com o servidor APN da Apple. Se não for esse o caso, reinicie o dispositivo e / ou tente fazer uma conexão por outra rede Wi-Fi e reinicie o aplicativo.fonte
Este método de delegação: -
está sendo chamado quando clicamos na notificação para iOS 13 e o aplicativo está em segundo plano.
fonte
Você precisa implementar uma extensão de conteúdo de notificação
Como eu estava usando o OneSignal e seu código de configuração, isso funcionou bem para mim https://documentation.onesignal.com/docs/ios-sdk-setup
não tenho certeza se os bits do OneSignal fazem diferença, mas anexá-los de qualquer maneira
fonte