Si el usuario rechaza las notificaciones de habilitar habilitar, obtendremos un error, a través de didFailToRegisterForRemoteNotificationsWithError. ¿Alguien sabe cuál será el código en el objeto NSError en este caso (para diferenciarlo de, digamos, que no hay conexión disponible)?didFailToRegisterForRemoteNotificationsWithError: ¿el usuario ha rechazado el error?
Respuesta
No creo que su declaración inicial (siempre) sea cierta. Si una aplicación está firmada correctamente con un perfil de aprovisionamiento válido, llamar al registerForRemoteNotificationTypes:
dará como resultado application:didRegisterForRemoteNotificationsWithDeviceToken:
independientemente de las opciones de Notificaciones del usuario en la aplicación Configuración. Desde mi experiencia, las únicas veces que he visto llamar al application:didFailToRegisterForRemoteNotificationsWithError:
se debieron a una aplicación firmada incorrectamente. El error en cuestión menciona "no se encontró un derecho válido de aps-environment para la aplicación".
Aunque esta pregunta es antigua, y de acuerdo con la mayoría de la respuesta de @ Jerred, pensé en publicar una respuesta actualizada de todos modos.
La respuesta a la pregunta principal en el hilo es NO.
aplicación: didFailToRegisterForRemoteNotificationsWithError: se invoca cuando la aplicación se firma con un perfil de aprovisionamiento incorrecto.
Además,
aplicación: didRegisterForRemoteNotificationsWithDeviceToken: se llama sólo cuando el usuario permite al-menos una de la insignia, bandera/o ajuste de sonido de alerta en el centro de notificaciones (en la aplicación de configuración) para su aplicación.
hay escenarios donde IOS no llamará a cualquiera de estos métodos
- Cuando el usuario se niega a conceder permisos para la aplicación para enviar notificaciones push
- Cuando no hay conectividad de red y permisos concedidos por el usuario para enviar empuje notificaciones
- Cuando el usuario deshabilita las notificaciones push para la aplicación desde el centro de notificaciones en la aplicación Configuración.
Es un buen artículo a excepción de una parte: "Existen entornos separados para APNS: ** sandbox (para compilaciones de desarrollo y ad hoc) ** y producción. Cada uno tiene su propio certificado, y el procedimiento de aprovisionamiento debe repetirse entre los dos.". Las compilaciones Ad-hoc llegan realmente a los APNS de producción: "El sistema operativo establece una conexión constante con el entorno de espacio aislado para las compilaciones de desarrollo; las compilaciones ad hoc y de distribución se conectan al entorno de producción". de https://developer.apple.com/library/ios/technotes/tn2265/_index.html # // apple_ref/doc/uid/DTS40010376-CH1-TNTAG42 –
Sería genial actualizar la respuesta con lo que el artículo describía como las mejores prácticas, ya que ahora ya no está disponible. – leolobato
De acuerdo con @leolobato, el enlace al artículo ya no es válido. – Zorayr
Según mi experiencia, el método didFailToRegisterForRemoteNotificationsWithError:
está reservado para casos más graves, lo que impide que la aplicación incluso muestre al usuario el cuadro de diálogo de solicitud de permiso de notificación. Los casos que conozco incluyen la aplicación que se ejecuta en dispositivos que no admiten notificaciones push (por ejemplo, Simulator) o alguna configuración incorrecta en el derecho de aps-environment en el binario de la aplicación.
- 1. Error de conexión AirPrint rechazado
- 2. El servidor ha rechazado las credenciales del cliente, WCF como servicio de Windows
- 3. ERROR: ha denegado el permiso para el lenguaje C
- 4. Detectar si el usuario ha usado el botón Atrás
- 5. Detectando cuando el usuario ha descartado el teclado virtual
- 6. Git push rechazado
- 7. intento de conexión con "ECONNREFUSED - Conexión rechazado por el servidor"
- 8. Notorio Git Error: control remoto rechazado (no se pudo bloquear)
- 9. Informe de errores de Django: cómo saber qué usuario ha desencadenado el error.
- 10. de error 1045 (28000) ha denegado el acceso de 'root' @ 'localhost' usuario (usando la contraseña: SÍ)
- 11. UIGetScreenImage será rechazado ahora?
- 12. inotify - ¿cómo saber qué usuario ha modificado el archivo?
- 13. Javascript: Procesar cuando el usuario ha dejado de escribir
- 14. Flex: Cómo detectar si el usuario ha bloqueado el objeto compartido de la escritura
- 15. ¿Cómo saber si el usuario ha actualizado la aplicación o ha instalado una copia nueva?
- 16. ¿Cómo se simula el error "MYSQL se ha ido"?
- 17. # 2006 El servidor MySQL se ha ido error en Wamp
- 18. JQuery ordenable: ¿se ha solucionado el error en IE?
- 19. C1001: Se ha producido un error interno en el compilador
- 20. El Java Runtime Environment ha detectado un error fatal: Error interno; Error: ShouldNotReachHere()
- 21. git, Heroku: gancho de pre-recepción rechazado
- 22. origen de git push DENEGADO por fallthru, gancho rechazado: gitolite
- 23. Compruebe si el usuario ha habilitado el GPS después de solicitar
- 24. Cómo comprobar que el usuario ha hecho clic en el botón Actualizar o cerrar x
- 25. Comprobando si el usuario ha cambiado el valor de cookie, manualmente
- 26. ¿Cómo se sabe que el usuario ha hecho clic en "X" o en el botón "Cerrar"?
- 27. Detectar si el salvapantallas está activo y/o el usuario ha bloqueado la pantalla en Windows
- 28. ¿Se ha conservado el orden agregado de valores definidos por el usuario de SQL?
- 29. Error de Eclipse: 'Configuración de la ruta de compilación' ha encontrado el error
- 30. ¿Por qué recibo el error "El usuario autenticado no ha instalado la aplicación con el ID del cliente" al usar la API de Google Drive de forma nativa?
Realmente debería adjudicar la respuesta a Jerred: esta es la respuesta correcta. Solo tuve que volver a verificar esto para uno de los clientes de mi empresa. Descarga nuestra aplicación Enterprise (que usa los servicios de producción push), rechazó todas las notificaciones cuando se le preguntó y la aplicación aún obtuvo un token. Al habilitarlos en Configuración, reiniciar la aplicación y luego deshabilitarlos en Configuración, reinicie la aplicación; en todos los casos, el token se devuelve correctamente. –