Estou tentando fazer meu aplicativo funcionar no Xcode 8.0 e estou com um erro. Eu sei que esse código funcionou bem nas versões anteriores do swift, mas estou assumindo que o código para isso foi alterado na nova versão. Aqui está o código que estou tentando executar:
let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.shared().registerForRemoteNotifications()
O erro que estou recebendo é "Os rótulos de argumento '(paraTipos :, categorias :)' não correspondem a nenhuma sobrecarga disponível"
Existe um comando diferente que eu poderia tentar fazer funcionar?
ios
push-notification
swift3
ios10
unusernotificationcenter
Asher Hawthorne
fonte
fonte
Respostas:
Solicitar permissão do usuário
Obtendo o token do dispositivo
Em caso de erro
Caso você precise conhecer as permissões concedidas
fonte
fonte
application.isRegisteredForRemoteNotifications()
para ver se é concedido e use outro método delegado para o caso de ocorrer um erro. Certo? Algo mais?application.registerForRemoteNotifications()
após o seucenter.requestAuthorization
Em seguida, vá para o editor de projeto do seu destino e, na guia Geral, procure a seção Frameworks e Bibliotecas Vinculadas.
Clique em + e selecione UserNotifications.framework:
Usar métodos de delegação de notificação
Para receber notificação por push
Verifique o link abaixo para obter mais métodos de delegação de notificação
fonte
Eu tive problemas com as respostas aqui ao converter o objeto Data do deviceToken em uma string para enviar ao meu servidor com o beta atual do Xcode 8. Especialmente aquele que estava usando o deviceToken.description como em 8.0b6 que retornaria "32 bytes" que não é muito útil :)
Isto é o que funcionou para mim...
Crie uma extensão em Data para implementar um método "hexString":
E use isso quando receber o retorno de chamada do registro para notificações remotas:
fonte
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
No iOS10, em vez do seu código, você deve solicitar uma autorização para notificação com o seguinte: (Não se esqueça de adicionar o
UserNotifications
Framework)Além disso, o código correto para você é (use na
else
condição anterior, por exemplo):Por fim, verifique se
Push Notification
está ativado emtarget
->Capabilities
->Push notification
. (ativeOn
)fonte
Bem, este trabalho para mim. Primeiro no AppDelegate
Então:
Para obter o devicetoken:
fonte
Atenção, você deve usar o thread principal para esta ação.
fonte
Primeiro , ouça o status de notificação do usuário, ou seja,
registerForRemoteNotifications()
para obter o token do dispositivo APNs;Segundo , solicite autorização. Ao ser autorizado pelo usuário, o deviceToken será enviado ao ouvinte, o
AppDelegate
;Terceiro , relate o token do dispositivo ao seu servidor.
fonte
A resposta do ast1 é muito simples e útil. Funciona para mim, muito obrigado. Eu só quero apontar aqui, para que as pessoas que precisam dessa resposta possam encontrá-la facilmente. Então, aqui está o meu código para registrar notificações locais e remotas (push).
fonte
Simplesmente faça o seguinte em
didFinishWithLaunching:
:Lembre-se da declaração de importação:
fonte
registerForRemoteNotifications()
o manipulador de conclusão derequestAuthorization()
. Você pode até querer cercarregisterForRemoteNotifications()
com umaif granted
declaração:center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in if granted { UIApplication.shared.registerForRemoteNotifications() } }
Dê uma olhada neste código comentado:
Deixe-me saber se há algum problema!
fonte