¿Cuál es el caso para notificaciones push / locales?

Soy el OP y sé lo que me equivoqué.

Entonces, el código completo que estaba viendo era:

let notifyTypes: UIUserNotificationType = [.Alert, .Badge, .Sound, .None]
let notifySettings = UIUserNotificationSettings (forTypes: notificationTypes, categories: nil)
application.registerUserNotificationSettings (notifySettings)

Y el código es algo estúpido y confuso.

eliminar .None de la primera línea no haría ninguna diferencia.
No es algo para lo que te registras . Es solo algo de lo que sería considerado.

Imagina que escribiste la aplicación de correo de iPhone y cada vez que recibes un correo haces estallar una alerta y emites un sonido. Sin embargo, el usuario no quiere eso. Van Configuración >> Notificaciones >> apaga todas tus notificaciones.

Básicamente hacer:

Por lo tanto, su aplicación ahora debe tener en cuenta que ya no debería mostrar notificaciones. Si el usuario ha configurado “Permitir notificaciones” sin marcar, entonces no debería mostrar ningún tipo de notificaciones:

guard let settings = UIApplication.sharedApplication (). currentUserNotificationSettings () donde settings.types! = .Ninguno más {}

El fragmento a continuación obtiene su configuración actual … si ha desmarcado “Permitir notificaciones” como en la imagen de arriba, ¡su guardia debería fallar!

Si hipotéticamente Apple permitiera que no se registrara en .Ninguna, significaría que los usuarios no podrían desmarcar “Permitir notificaciones” nunca, pero sabemos que ese no es el caso.

En primer lugar, me gustaría señalar que UIUserNotificationType ahora está en desuso en iOS 10 según UIKit | Documentación para desarrolladores de Apple y UIKit | Documentación del desarrollador de Apple ( UIUserNotificationSettings y UIUserNotificationType , respectivamente). Según el primer enlace, debe usar UNNotificationSettings . También me gustaría señalar que .none no está realmente documentado como un tipo, por lo que parece que si bien existe , no se supone que se use .

En cuanto a los casos de uso de .none , hay un caso de uso “real” y un caso de uso “vago”. Tomemos los casos de uso “reales” primero. Si alguien está jugando un juego y se entrega una notificación, es posible que no desee interrumpir al jugador en ese momento si la notificación no requiere una respuesta inmediata. Este suele ser el caso de las notificaciones push generales: las que se envían a todos los usuarios de forma indiscriminada no suelen tener que tratarse de inmediato. Es mejor dejar que el usuario disfrute de su aplicación o juego y, por lo tanto, mantenerlos involucrados que interrumpir su sesión y tal vez molestarlos y hacer que se vayan (por lo general, las notificaciones dentro de la aplicación se manejan dentro de la aplicación en lugar de usar un servicio de notificación del sistema operativo, pero no siempre ) Sin embargo, este no es el único caso de uso. Recuerde las opciones que Apple ofrece a los usuarios para sus configuraciones de notificación. Hay una alerta , hay un banner y no hay ninguno . Es posible que los usuarios no quieran que se les moleste con una notificación en el momento del registro, pero aún así desean que se notifique una notificación para una interacción posterior. Honestamente, este comportamiento no tiene sentido para mí, pero Apple parece tener estudios de mercado para creer que este es un deseo real de una cantidad no insignificante de usuarios. .none existe porque Apple ofrece a los usuarios la opción de no mostrar visiblemente la notificación .

Pasemos ahora a los casos de uso “perezosos”. Una es que el desarrollador está utilizando notificaciones locales o push (generalmente la última) como una forma de mostrar notificaciones en la aplicación y son demasiado vagos para encontrar una solución que no produzca notificaciones silenciosas sin usar el Servicio de notificaciones. La segunda razón (no es tanto un caso de uso, como verá) es que el desarrollador es perezoso o simplemente se olvidó . Como no quiero ser demandado por difamación, no daré ejemplos específicos aquí, pero no es difícil encontrar ejemplos. Los desarrolladores no quieren detectar cuáles son las Configuraciones de notificación y simplemente establecerlas en .none en la aplicación o establecerlas en .none como marcador de posición y se olvidan de actualizar la configuración.

Entonces ahí lo tienes. Apple ofrece la opción a los desarrolladores porque les dio a los usuarios la opción de no molestarse por las notificaciones por la razón descrita en negrita arriba. Los desarrolladores lo usan porque los usuarios lo configuran de esa manera, hay una razón legítima para no molestar al usuario como se describe anteriormente, o porque son demasiado vagos para leer la configuración de notificaciones u olvidan actualizar la configuración una vez que leen las preferencias del usuario.

Editar: Anteriormente escribí sobre .none no está documentado y, por lo tanto, implica que se supone que no debe usarse. La parte sobre que .none se documenta no era cierta acerca de UIUserNotificationType pero después de una investigación más profunda, supe que está documentada en UNAlertStyle , que es una constante en UNNotificationSettings , el reemplazo de Apple para UIUserNotificationSettings que usó UIUserNotificationType . En segundo lugar, mi implicación sobre .none no se pretende utilizar contradice mi explicación más adelante en mi respuesta. Esta contradicción aparece porque estaba escribiendo desde múltiples POV, desde el POV de la documentación, el POV del desarrollador y el POV de Apple, por lo que esos POV se contradicen entre sí en este caso.

Puede usar una notificación para activar su aplicación y hacer que procese algo, por ejemplo:

  • Descargar nuevos datos.
  • Graba alguna información.
  • Utilice datos locales (como una clave de cifrado que solo posee el dispositivo) para mostrar una notificación.
  • Decida en función de los datos locales (como la configuración del usuario o las geofences) si desea mostrar una notificación visible.

En estos casos, la notificación push no debe alertar inmediatamente al usuario; solo debería activar la aplicación para hacer algún procesamiento. No podrías usar ninguno para ellos.

Editar : eché un vistazo a la definición UIUserNotificationType y ahora puedo responder directamente a su pregunta:

UIUserNotificationType es un conjunto de opciones , lo que significa que puede tener cero, una o muchas opciones. La constante none simplemente le proporciona un UIUserNotificationType con ninguna de las opciones activadas. Es equivalente a escribir [] en el mismo lugar.

UIUserNotificationType se usa a veces para decirle a la aplicación qué configuraciones están habilitadas, por ejemplo. UIApplication.sharedApplication.currentUserNotificationSettings().

Una de las opciones que necesita para poder comunicarse es que la configuración actual del usuario es “sin notificaciones”.