Estoy tratando de hacer que mi aplicación funcione en Xcode 8.0 , y me encuentro con un error. Sé que este código funcionó bien en versiones anteriores de swift, pero supongo que el código para esto se cambió en la nueva versión. Aquí está el código que estoy tratando de ejecutar:
let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.shared().registerForRemoteNotifications()
El error que obtengo es "Las etiquetas de argumento '(para Tipos :, categorías :)' no coinciden con ninguna sobrecarga disponible"
¿Hay un comando diferente que podría intentar para que esto funcione?
ios
push-notification
swift3
ios10
unusernotificationcenter
Asher Hawthorne
fuente
fuente
Respuestas:
Solicitar permiso de usuario
Obtener token de dispositivo
En caso de error
En caso de que necesite conocer los permisos otorgados
fuente
fuente
application.isRegisteredForRemoteNotifications()
para ver si se trata de concedido, y use otro método de delegado en caso de que haya un error. ¿Correcto? ¿Algo más?application.registerForRemoteNotifications()
después de sucenter.requestAuthorization
A continuación, vaya al editor del proyecto para su objetivo y, en la pestaña General, busque la sección Marcos vinculados y bibliotecas.
Haga clic en + y seleccione UserNotifications.framework:
Usar métodos de delegado de notificaciones
Para recibir notificaciones push
Consulte el siguiente enlace para obtener más métodos de delegado de notificaciones
fuente
Tuve problemas con las respuestas aquí al convertir el objeto DeviceToken Data en una cadena para enviar a mi servidor con la versión beta actual de Xcode 8. Especialmente el que estaba usando deviceToken.description como en 8.0b6 que devolvería "32 Bytes" que no es muy útil :)
Esto es lo que funcionó para mí ...
Cree una extensión en Datos para implementar un método "hexString":
Y luego utilícelo cuando reciba la devolución de llamada al registrarse para recibir notificaciones remotas:
fuente
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
En iOS10 en lugar de su código, debe solicitar una autorización de notificación con lo siguiente: (No olvide agregar el
UserNotifications
Marco)Además, el código correcto para usted es (use en la
else
condición anterior, por ejemplo):Finalmente, asegúrese de que
Push Notification
esté activado entarget
->Capabilities
->Push notification
. (configúraloOn
)fuente
Bueno, esto funciona para mí. Primero en AppDelegate
Luego:
Para obtener el dispositivo token:
fuente
Atención, deberías estar usando el hilo principal para esta acción.
fuente
Primero , escuche el estado de notificación del usuario, es decir,
registerForRemoteNotifications()
para obtener el token del dispositivo APN;Segundo , solicitar autorización. Cuando el usuario lo autorice, deviceToken se enviará al oyente, el
AppDelegate
;Tercero , informe el token del dispositivo a su servidor.
fuente
La respuesta de ast1 es muy simple y útil. A mí me funciona, muchas gracias. Solo quiero señalarlo aquí, para que las personas que necesitan esta respuesta puedan encontrarla fácilmente. Entonces, aquí está mi código para registrar notificaciones locales y remotas (push).
fuente
Simplemente haga lo siguiente en
didFinishWithLaunching:
:Recuerde sobre la declaración de importación:
fuente
registerForRemoteNotifications()
al controlador de finalización derequestAuthorization()
. Es posible que desee rodearregisterForRemoteNotifications()
con unaif granted
declaración:center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in if granted { UIApplication.shared.registerForRemoteNotifications() } }
Echa un vistazo a este código comentado:
¡Avísame si hay algún problema!
fuente