2012-02-08 8 views
11

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?

+0

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. –

Respuesta

19

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".

18

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.
+1

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 –

+0

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

+0

De acuerdo con @leolobato, el enlace al artículo ya no es válido. – Zorayr

1

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.

Cuestiones relacionadas