Pregunta

Estoy desarrollando una aplicación con notificaciones push. Para comprobar todas las posibilidades de interacción con el usuario, que me gustaría probar mi aplicación cuando un usuario se niega a tener notificaciones push habilitados para mi aplicación durante el primer inicio.

El cuadro de diálogo (iniciado por registerForRemoteNotificationTypes), sin embargo, sólo aparece una vez por aplicación. ¿Cómo se restablece la memoria de mi aplicación del iPhone OS. La eliminación de la aplicación y volver a instalar no ayuda.

¿Fue útil?

Solución

Nota técnica TN2265: Solución de problemas notificaciones push

  

La primera vez que una aplicación push-habilitado   se registra para las notificaciones push, iOS   pide al usuario si desea recibir   notificaciones de esa aplicación. Una vez el   usuario ha respondido a esta alerta es   no se presenta de nuevo a menos que el dispositivo   se restaura o la aplicación ha sido   desinstalado durante al menos un día.

     

Si desea simular un primer tiempo   plazo de su aplicación, se puede salir de la aplicación   desinstalado por un día. Puede lograr   este último sin tener que esperar una   día ajustando el reloj del sistema   reenviar un día o más, convirtiendo el   dispositivo completamente, luego girando   el dispositivo de nuevo.

Actualización: Como se señaló en los comentarios a continuación, esta solución parado de trabajar desde iOS 5.1. Me gustaría animar a la presentación de un insecto con Apple para que puedan actualizar su documentación. La solución actual parece estar restablecer contenido y la configuración del dispositivo.

Actualización:. La nota técnica se ha actualizado con nuevos pasos que funcionan correctamente como de iOS 7

  
      
  1. Eliminar la aplicación del dispositivo.
  2.   
  3. Apagar el dispositivo por completo y volver a encenderla.
  4.   
  5. Vaya a Ajustes> General> Fecha y hora y establecer la fecha por delante un día o más.
  6.   
  7. Apague el dispositivo completamente nuevo y volver a encenderla.
  8.   

ACTUALIZACIÓN como de iOS 9

Simplemente borrar y volver a instalar la aplicación va a restablecer el estado de la notificación a notDetermined (es decir, aparecerán mensajes).

Gracias a la respuesta por Gomfucius a continuación: https://stackoverflow.com/a/33247900/704803

Otros consejos

Otro sólo para las pruebas solución a esto es simplemente cambiando su ID de paquete. Pero no se olvide de cambiar de nuevo una vez que haya terminado!

En iOS 9.0.2, estoy recibiendo el "registro de empuje notificación de alerta" cada vez que eliminar la aplicación y volver a instalarlo. Esto es cierto tanto para las descargas de producción AppStore y el modo adhoc.

ACTUALIZACIÓN: Se confirma esto está funcionando para iOS 9.x

Como ya se ha señalado el enfoque para restablecer el estado de notificación para una aplicación en un dispositivo se cambia a una nueva iOS5.

Esto funciona para mí en iOS6:

  • eliminar la aplicación del dispositivo
  • Establecer la fecha y hora dispositivo de dos días o más por delante
  • Reiniciar el dispositivo
  • Establecer la fecha y hora dispositivo de dos días o más por delante
  • Reiniciar el dispositivo
  • Instalar y ejecutar la aplicación de nuevo

Sin embargo esto sólo hacer que el mensaje inicial aparece de nuevo - no va a eliminar cualquier otra materia relacionada con el estado de empuje

.

El plist: /private/var/mobile/Library/RemoteNotification/Clients.plist

... contiene los clientes registrados para notificaciones push. La eliminación de la entrada de su aplicación va a hacer que vuelva a aparecer el símbolo

Si lo hace mediante programación parece funcionar para mí cada vez. Tengo una construcción con la siguiente línea sin comentar:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

Lo ejecuto cada vez que quiero para anular el registro de la PN. Puede que tenga que poner fin a la aplicación explícita de la lista Recientes y jugar un poco con el centro de notificaciones en aplicación Configuración para hacerlo bien.

Además, el indicador de la interfaz de usuario que pide al usuario a registrarse para PN puede no aparecer. No estoy seguro si se ha desactivado en cualquiera de las versiones recientes de iOS.

Como ianolito Dicho esto, fijar la fecha debería funcionar:

  

Puede lograr esto último sin tener que esperar un día ajustando el reloj del sistema hacia adelante un día o más, apagar el dispositivo por completo, a continuación, girando el dispositivo de nuevo.

Me di cuenta en mi dispositivo (iPhone 4, iOS 6.1.2) ajustar el reloj del sistema un día hacia adelante o incluso unos pocos días no funcionó para mí. Así que me puse la fecha hacia adelante un mes y luego lo hizo el trabajo y mi solicitud mostró una notificación rápida de nuevo.

Espero que esta ayuda para cualquier persona, puede ser una especie de dolor de cabeza!

Estoy de acuerdo con micmdk .. tuve una configuración del entorno de desarrollo con notificaciones Push y necesitaba una manera de restablecer el teléfono para parecerse a una instalación inicial ... y sólo estos pasos precisos trabajado para mí ... requiere dos reinicios del dispositivo:

A partir de APPLE DOC TECH:

Restablecimiento de la Impulsión de Aviso Notificaciones permisos en iOS La primera vez que una aplicación push-habilitado se registra para las notificaciones push, el IOS pide al usuario si desea recibir notificaciones de esa aplicación. Una vez que el usuario ha respondido a esta alerta no se presenta de nuevo a menos que el dispositivo se restaura o la aplicación se ha desinstalado por lo menos durante un día.

Si desea simular una carrera por primera vez de su aplicación, se puede salir de la aplicación desinstalado por un día. Se puede lograr esto último sin tener que esperar un día siguiendo estos pasos:

  1. Eliminar la aplicación del dispositivo.

  2. Apagar el dispositivo por completo y volver a encenderla.

  3. Ir a Ajustes> General> Fecha y hora y establecer la fecha por delante un día o más.

  4. Apague el dispositivo completamente nuevo y volver a encenderla.

Me he preguntado acerca de esto en el pasado y llegó a la conclusión de que no era en realidad un caso de prueba válida para mi código. No creo que el código de aplicación puede realmente decir la diferencia entre alguien en declive notificaciones primera vez o después de la desactivación de los ajustes de notificación de iPhone. Es cierto que la experiencia del usuario es diferente, pero que se oculta dentro de la llamada a registerForRemoteNotificationTypes.

Llamando unregisterForRemoteNotifications no elimina por completo la aplicación de la configuración de las notificaciones - aunque no eliminar el contenido de la configuración de la aplicación. Así que esto todavía no hará que el diálogo que se presentará por segunda vez para el usuario la próxima vez que se ejecuta la aplicación (al menos no en v3.1.3 que estoy probando actualmente con). Pero como ya he dicho anteriormente es probable que no debe preocuparse por eso.

La misma nota técnica como referido en la respuesta aceptada ( TN2265 -. solución de problemas notificaciones push) ya se ha actualizado con una solución para iOS 5 o superior

En pocas palabras:. Crear una copia de seguridad y restauración de ella cada vez

  

En iOS 5 y después, restablecer los permisos notificaciones de inserción de alerta mediante la restauración del dispositivo desde una copia de seguridad (r. 11450187). Éstos son los pasos para hacer esto de manera eficiente:

     
      
  1. Utilice el Organizador Xcode para instalar la aplicación en el dispositivo. La clave es la instalación de la aplicación por primera vez, sin ejecutarlo.
  2.   
  3. Utilice iTunes para copia de seguridad del dispositivo.
  4.   
  5. Ejecutar la aplicación. Se presentarán los permisos de notificaciones push de alerta.
  6.   
  7. Cuando se desea restablecer los permisos de notificaciones push alerta, restaurar el dispositivo de la copia de seguridad que ha creado en el primer paso.
  8.   

En la nota de Apple Tech también describe que puede restaurar el dispositivo para restablecer el diálogo de notificación Push.

No dice que también se puede utilizar la opción "General -> Reset -> Borrar contenidos y ajustes". En el propio dispositivo (iOS 5.x)

Además de la respuesta de ianolito.

Tenía el mismo problema con una aplicación que descargué hace un año y negando notificación de inserción al principio. Ahora querer volver notificaciones push, estos pasos trabajaron para mí en iOS 7 beta. No está seguro de qué punto (s) activa exactamente.

  • Cierre y eliminar la aplicación.
  • Ir a la configuración de iCloud y eliminar la aplicación de la iCloud. Para ello, en todos los otros dispositivos en los que icloud copia de seguridad para aplicaciones habilitadas. Después de desactivación y eliminación de hacer una copia de seguridad fresca. La aplicación no debe aparecer más bajo las copias de seguridad. (Esta es quizá la razón por la Nota Técnica de Apple descrito por ianolito dejó de funcionar en iOS 5, iCloud ya fue introducido en iOS 5 y iCloud muchos tienen copia de seguridad para aplicaciones habilitadas.)
  • Ir a la configuración de la hora y establecer el tiempo más de 1 mes por delante.
  • Cambie el iPhone fuera (sin reinicio).
  • Espera un minuto, vuelva a encenderlo y descargar la aplicación de nuevo.
  • Iniciar la aplicación y se me presentó de nuevo el diálogo.
  • Habilitar copia de seguridad aplicación de nuevo, ya que todavía se desactiva. Corregir el tiempo.

Gracias a Dios que no tenía que "Borrar contenidos y ajustes". Tal vez pueda ayudar a alguien.

Después de horas de búsqueda, y suerte con las sugerencias anteriores, esto funcionó como un encanto para 3.x +

override func viewDidLoad() {
        super.viewDidLoad()


            requestAuthorization()

}

func requestAuthorization() {

        if #available(iOS 10.0, *) {

            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                print("Access granted: \(granted.description)")
            }

        } else {
            // Fallback on earlier versions
        }

    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top