ios - todas - ver notificaciones antiguas en iphone
¿Cuál es la diferencia entre notificación remota y notificación silenciosa en iOS? (3)
La notificación push le permitirá al usuario saber que recibe una notificación (por ejemplo, mostrando la ventana emergente de notificación). La notificación silenciosa se actualizará, pero el usuario no será notificado al respecto. En cualquier caso, puede realizar acciones cuando se notifica con silencio, como si se tratara de una notificación push. La única diferencia es que el usuario no recibirá notificaciones con la notificación emergente.
La diferencia está en la carga útil:
Notificación de inserción:
aps {
content-available: 1
alert: {...}
}
Notificación silenciosa:
aps {
content-available: 0
alert: {...}
}
Y debe establecer en Capabilities el modo de fondo que elija.
Cuando leo Apple Docs , mencionan 3 tipos de notificación: local, remota y silenciosa.
La notificación local se puede inferir de su nombre, que la aplicación envía localmente.
Sin embargo, ¿cuál es la diferencia de los otros dos tipos?
La notificación push silenciosa llega al dispositivo, el usuario no sabe nada acerca de la notificación, pero su aplicación recibe la notificación y la aplicación tendrá tiempo para descargar contenido nuevo y presentarlo al usuario, independientemente del estado de la aplicación (es decir, en ejecución o no corriendo)
El método de notificación remota se llama solo cuando su aplicación se está ejecutando. Si la aplicación está suspendida o no se está ejecutando, el sistema se activa o inicia su aplicación y la pone en el estado de ejecución en segundo plano antes de llamar al método. Este método está destinado a mostrar el contenido actualizado al usuario. Cuando se llama a este método, su aplicación tiene hasta 30 segundos de tiempo de reloj de pared para realizar la operación de descarga y llamar al bloque de controlador de finalización especificado. Si no se llama al controlador a tiempo, se suspenderá su aplicación.
Para obtener más detalles técnicos, puede ir a través de estos enlaces:
EDITAR: Si bien esta respuesta es totalmente aplicable, hay algunas adiciones (no cambios) a las notificaciones en iOS 12. Recomiendo ver WWDC 2018: Novedades de las notificaciones de usuarios y ver here .
Los principales cambios son:
- notificaciones grupales
- notificaciones provisionales
- notificaciones críticas
- capacidad de interactuar con las notificaciones en las extensiones
Hay demasiadas configuraciones que deben establecerse correctamente para que funcione. Trataré de diseccionarlos y facilitar su comprensión.
En general, varias cosas son importantes.
- La diferencia general entre una notificación silenciosa y de usuario
- diferentes tipos de notificaciones de usuario
- cómo se configura una notificación remota, es decir, la carga útil , desde su servidor
- Cómo habilitar notificaciones push y notificaciones remotas desde modos de fondo en su proyecto
- Cómo registrar su token para notificaciones remotas y silenciosas
- cómo solicitar permiso para notificaciones de usuario
- habilitación de ''actualización de aplicaciones en segundo plano'' y ''notificaciones'' desde el dispositivo
-
¿Qué es el
content-available
- entendiendo que el iOS está corriente arriba de su aplicación cuando se trata de recibir una notificación remota
- qué sucede cuando el sistema operativo recibe notificaciones cuando la aplicación ha sido finalizada por el usuario
- Una nota sobre confiabilidad y arquitectura APNs
Recomiendo a todos que vean los primeros 7 minutos de: WWDC 2015: Novedades de las notificaciones . A partir de ahí, el presentador menciona que hay 2 tipos principales de notificaciones:
Notificaciones silenciosas
Suceden en segundo plano, por lo tanto, nunca se ve ninguna alerta / insignia / sonido. Las cosas se descargan sin que tú lo sepas.
error de iOS 11
Mira here Las versiones iniciales de iOS 11 tenían errores para las notificaciones silenciosas. Asegúrese de tener la última versión para sus pruebas, de lo contrario, puede que no funcione
Notificaciones de usuario
Como su nombre lo dice, tiene algo que ver con el usuario . Es decir, el usuario verá una alerta / insignia o escuchará un sonido. Tiene 2 tipos.
Notificaciones locales
Una notificación local se puede activar de 3 maneras diferentes:
-
UNLocationNotificationTrigger
: ves una alerta cuando estás cerca de una tienda Walmart. -
UNTimeIntervalNotificationTrigger
: por ejemplo, verá una alerta cada 10 minutos. -
UNCalendarNotificationTrigger
como el 1 de diciembre 1:00 PM 2017.
Notificaciones remotas
Son similares a las notificaciones locales, pero se activan desde el servidor, por ejemplo, un mensaje de WhatsApp que tiene un campo De (mamá) y un campo de cuerpo (¡Te amo!).
Algunas notas al azar:
Para recibir una notificación silenciosa o remota, debe registrarse para un token utilizando:
application.registerForRemoteNotifications()
👆 Registrarse NO requiere permiso del usuario. Esto hace que las notificaciones silenciosas se vuelvan perfectas. Vea este momento del video WWDC
Las notificaciones silenciosas están habilitadas por defecto . El usuario no necesita aprobar su - no le da permiso a su aplicación para usarlos, y puede comenzar a usarlos sin pedirle permiso al usuario.
Para poder mostrar insignias / alertas / sonidos, debe solicitar permiso al usuario:
UNUserNotificationCenter.current().requestAuthorization([.alert, .badge, .sound]) { (granted, error) in
guard error == nil else {
//Display Error.. Handle Error.. etc..
return
}
if granted {
//Do stuff here..
//Register for RemoteNotifications. Your Remote Notifications can display alerts now :)
application.registerForRemoteNotifications()
}
else {
//Handle user denying permissions..
}
}
Pregunta: ¿Necesito solicitar acceso una vez para notificaciones locales y una vez para notificaciones remotas?
No. Simplemente escriba el fragmento de arriba y solicitará acceso tanto para remoto como local.
Ahora pasemos a la parte difícil: D
¿Necesito habilitar algo para recibir notificaciones silenciosas?
- Debe habilitar las notificaciones push desde sus capacidades de Xcode:
Si no habilita esto, su aplicación no recibirá un token. Y sin un token, el servidor no te reconoce.
- Para poder descargar cosas del fondo , debe habilitar: notificaciones remotas desde los modos de fondo.
Para habilitar backgroundModes , puede hacerlo utilizando sus capacidades plist o Xcode .
La razón por la que puede hacerlo de cualquier manera es porque: plist está más cerca de su código y es la forma anterior, tal vez esté allí para soporte heredado. Las capacidades de Xcode son la forma más nueva y fácil.
plist:
El elemento 0 es solo un
índice
, no es la clave de un diccionario (algo que normalmente se ve en plist), el UIBackgroundModes es una
array
de cadenas.
Las cadenas solo deben provenir de un
valor aceptado
de la
matriz UIBackgroundModes
.
Capacidades de Xcode:
Verifique la
Remote Notification
en
Xcode en los modos de fondo de la
siguiente manera:
Si no haces nada de lo anterior, desactiva las notificaciones con:
matará notificaciones remotas y locales
Sin embargo , si habilita la actualización de la aplicación en segundo plano desde las capacidades plist o Xcode, incluso con las notificaciones desactivadas para la aplicación, ¡aún recibirá notificaciones silenciosas!
Si el usuario desea deshabilitar las notificaciones silenciosas, tendría que deshabilitar ambas notificaciones y deshabilitar la actualización de la aplicación en segundo plano para su aplicación / en todo el sistema. Para deshabilitar la actualización de la aplicación en segundo plano en su sistema, debe hacer esto:
¿Por qué digo todo esto?
Para explicarle que la
configuración
de las notificaciones silenciosas y push son diferentes para el usuario y las restricciones para enviarlas son diferentes.
Para más información, vea
este momento
del video WWDC
.
Ver
aquí en su lugar
(el enlace anterior estaba muerto):
Las notificaciones silenciosas están habilitadas por defecto.
El usuario no necesita aprobar su no da permiso a su aplicación para usarlos, y puede comenzar a usarlos sin pedirle permiso al usuario.
Pero las notificaciones silenciosas son el mecanismo detrás de la actualización de la aplicación en segundo plano.
En cualquier momento, sabe que el usuario puede acceder a la configuración y deshabilitarla.
Por lo tanto, no puede depender de que siempre estén disponibles.
No sabe si el usuario los apaga y ya no recibe una notificación.
Esto también significa que las notificaciones silenciosas se entregan con el mejor esfuerzo.
Eso significa que cuando la notificación llegue al dispositivo del usuario, el sistema tomará algunas decisiones.
Utilizará diferentes señales del dispositivo y del comportamiento del usuario, como la energía o la hora del día para decidir cuándo es un buen momento para entregar la notificación y ejecutar su aplicación.
Puede intentar ahorrar batería o puede tratar de igualar el comportamiento del usuario y hacer que el contenido esté disponible cuando es más probable que el usuario lo use.
Ver también here .
AVISO: incluso si deshabilita la actualización de fondo de la aplicación y deshabilita las notificaciones de permiso , aún puede recibir notificaciones silenciosas si su aplicación está en ANTERIOR. Si su aplicación está en segundo plano, no se entregarán.
¿Necesito habilitar algo para recibir notificaciones remotas?
Solo necesita habilitar las notificaciones push desde sus capacidades de Xcode:
Si no habilita esto, su aplicación no recibirá un token. Y sin un token, el servidor no te reconoce.
Curioso ... ¿Puedes decirme cómo debería ser mi carga útil?
Le recomiendo que vea la documentation Apple § . Está muy claro
Gracias, pero ¿puedes decirme las partes importantes?
uhhmm ... OK, pero para que sepas esto es del enlace que acabo de decir:
Para las notificaciones silenciosas hay dos criterios:
-
El diccionario
aps
la carga útil debe incluir la clave decontent-available
con un valor de1
. -
El
diccionario
aps
la carga útil no debe contener las teclas dealert
,sound
obadge
.
Una carga útil de muestra se vería así:
{
"aps" : {
"content-available" : 1
},
"acme1" : "bar",
"acme2" : 42
}
acme1, acme2 o solo algunos datos personalizados!
Pero para la clave
aps
, DEBE seguir la estructura de Apple, de lo contrario no se asignará correctamente y no podrá leer los datos correctamente.
Para notificaciones remotas :
Necesita una clave de
alert
dentro de sus
aps
.
Como ejemplo:
{
"aps" : {
"alert" : "You got your emails.",
"badge" : 9,
"sound" : "bingbong.aiff"
},
"acme1" : "bar",
"acme2" : 42
}
También hay una tercera opción que analizaré más adelante en la respuesta.
En cuanto a cuáles son las
aps
fijas y
alert
claves de diccionario de
alert
, consulte estos
documentos de Apple
.
Ok lo tengo.
¿Qué es el
content-available
?
Muy simple. ¡Es solo una bandera que le dice a su aplicación que necesita despertarse y descargar algo porque tengo contenido disponible para descargar! Para más información, vea este momento exacto .
De forma predeterminada, el indicador de
content-available
no está incluido, es decir, de forma predeterminada, las notificaciones que envíe
no
activarán la
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
o hará algo en su aplicación.
Solo mostraría la notificación.
Si desea activar la aplicación (para hacer algo en segundo plano), debe incluir
content-available
y configurarlo en
1
.
§: Si está usando Firebase , su estructura de carga útil y las claves pueden ser ligeramente diferentes. Por ejemplo, la clave de
content-available
se reemplaza porcontent_available
. Para obtener más información, consulte la documentación de Firebase y también here .
Sé que me dijiste que solo puedo descargar algo en mi aplicación cuando estoy usando notificaciones silenciosas, pero ¿hay alguna manera de que también pueda activar mi aplicación en segundo plano Y descargar algo para notificaciones remotas?
Sí, pero de manera similar a la notificación silenciosa, también debe establecer el indicador de
content-available
en 1, por lo que debería despertarse y descargar algo.
De lo contrario, solo aparecería y alertaría / insignia / sonido pero no descargaría nada.
NOTAS IMPORTANTES:
-
Si su aplicación solo tiene notificaciones silenciosas, simplemente habilite las "notificaciones push" + "notificaciones remotas" desde las capacidades y configure el
content-available
en1
para cada carga útil. -
Si su aplicación solo tiene notificaciones remotas, simplemente habilite las "notificaciones push" desde las capacidades.
No hay nada que hacer por el
content-available
. -
Sin embargo, si desea que sus notificaciones muestren una alerta / insignia / sonido y también descarguen algo en segundo plano, debe tener habilitadas las "notificaciones remotas" y las "notificaciones push" + establecer el
content-available
en1
.
(TERCERA OPCIÓN)
{
"aps" : {
"content-available" : 1
"alert" : "You got your emails.",
"badge" : 9,
"sound" : "bingbong.aiff"
},
"acme1" : "bar",
"acme2" : 42
}
Este momento del video de WWDC menciona el 👆
Estoy confundido acerca de las notificaciones remotas. Pensé que cada vez que recibía una notificación, mi aplicación se activaba en segundo plano y descargaba algo. ¿Puedes explicar?
Por ejemplo, en este momento:
-
Su iPhone acaba de recibir una notificación remota con un cuerpo de "sin remitente". Para recibir esto, WhatsApp no tiene que estar ejecutándose en segundo plano, es decir, no necesita "Notificaciones remotas" habilitadas desde BackgroundModes. Todavía recibiría la notificación incluso si su aplicación se cerró forzosamente o se suspendió porque el proceso es administrado por el sistema operativo, no por la aplicación WhatsApp . Sin embargo, si desea poder descargar el mensaje real o su imagen / video a WhatsApp (de modo que una vez que su usuario abra WhatsApp, el video estará allí esperando al usuario), entonces necesita que su aplicación se active. . Para hacerlo, necesita
content-available : 1
e implementar laapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:)
. -
Del mismo modo, si deshabilita los datos móviles para una aplicación, aún recibirá sus notificaciones. Sin embargo, al tocar esa notificación, el usuario no podrá realizar ninguna solicitud de red para esa aplicación. Solo podrían abrir la aplicación.
-
O como en otro escenario similar, si el servidor / punto de acceso al que está conectado tiene acceso restringido para, por ejemplo, WhatsApp, aún le permitiría recibir las notificaciones de APN. Sin embargo, al tocar esa notificación, el usuario no podrá realizar ninguna solicitud de red para esa aplicación. Solo podrían abrir la aplicación.
PRECAUCIÓN:
si el usuario forzó el cierre de la aplicación, si bien recibe la notificación por los motivos mencionados anteriormente, no puede hacer nada para que la aplicación salga automáticamente de su estado final (incluso si tenía
content-available
en
1
).
Ninguno de sus métodos de delegado se vería afectado.
El
usuario
debe abrir la aplicación y solo entonces se alcanzarán sus métodos de delegado.
Una nota sobre la fiabilidad y la arquitectura APN: aunque las notificaciones se utilizan mucho para entregar el contenido real a la aplicación, de alguna manera NO están diseñadas para entregar contenido a la aplicación. Por el contrario, están diseñados para notificar al usuario que "oye que ha llegado algo nuevo (un mensaje de 2b o una imagen pequeña de 50kb, o una imagen de 10mb o un video de 2 gb). Abre la aplicación si quieres. Por cierto, aquí hay un pequeña parte del mensaje (el mensaje en sí mismo si cabe, el título de la imagen o una miniatura que se muestra en la notificación, un título del video o una miniatura que se muestra en el video ". Para obtener más información, vea iOS APNS" mejor- esfuerzo " . Para repetirme, nunca descargue el archivo adjunto de 40 MB enviado en el correo electrónico. Simplemente se le notificará de su existencia. Envíe lo suficiente (una vista en miniatura del archivo adjunto) para que el usuario esté informado de las novedades y pueda decida si necesitan o no abrir la aplicación para obtener más. Cuando era nuevo en iOS, pensé que realmente enviaba la imagen / video a través de la notificación push. ¡No lo hace!