Cuando la aplicación de mensajes iOS oficial de Apple está abierta y en primer plano, los mensajes nuevos de otros contactos activan un banner de alerta de notificación original de iOS. Vea la imagen a continuación.
¿Es esto posible en aplicaciones de terceros en la App Store? Notificaciones locales y / o push para su aplicación mientras su aplicación está abierta y en primer plano ?
Al probar mi aplicación , se reciben notificaciones pero no se muestra la interfaz de usuario de alerta de iOS .
Pero este comportamiento se ve en la aplicación de mensajes oficial de Apple:
La Guía de programación de notificaciones locales y remotas dice:
Cuando el sistema operativo entrega una notificación local o una notificación remota y la aplicación de destino no se está ejecutando en primer plano , puede presentar la notificación al usuario a través de un alerta , un número de placa de icono o un sonido.
Si la aplicación se está ejecutando en primer plano cuando se envía la notificación, el delegado de la aplicación recibe una notificación local o remota.
Entonces, sí, podemos recibir los datos de notificación mientras estamos en primer plano. Pero no veo forma de presentar la interfaz de usuario de alerta de notificación nativa de iOS .
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// I know we still receive the notification `userInfo` payload in the foreground.
// This question is about displaying the stock iOS notification alert UI.
// Yes, one *could* use a 3rd party toast alert framework.
[self use3rdPartyToastAlertFrameworkFromGithub]
}
¿Entonces Messages usa una API privada para mostrar la alerta mientras está en primer plano?
A los efectos de esta pregunta, por favor, no sugieren ninguna tercera parte "tostadas" alertas emergentes en GitHub o etc. Sólo me interesa si esto se puede hacer usando el archivo, iOS nativa local o de notificación Push alertas de interfaz de usuario , mientras que su la aplicación está abierta y en primer plano .
UNUserNotificationCenter.current().delegate = self
el métodoapplication(_:willFinishLaunchingWithOptions:)
oapplication(_:didFinishLaunchingWithOptions:)
Para mostrar un mensaje de banner mientras la aplicación está en primer plano, use el siguiente método.
iOS 10+, Swift 3+ :
fuente
AppDelegate
. Tiene que ponerse para cualquier objeto que se ajusteUNUserNotificationCenterDelegate
. Dicho esto, la mayoría de los desarrolladores seAppDelegate
ajustan aUNUserNotificationCenterDelegate
. @YoavR.EDITAR:
¡Las alertas en primer plano ahora son posibles en iOS 10! Por favor mira esta respuesta .
Para iOS 9 y versiones anteriores:
No parece posible mostrar la alerta de notificación de iOS estándar cuando su aplicación está abierta y en primer plano. Messages.app debe utilizar una API privada.
Se seguirán llamando a los
UIApplicationDelegate
métodos , lo que permitirá que su aplicación responda a la notificación local o remota:Sin embargo, la interfaz de usuario de banner de alerta de notificación de iOS nativa de stock no se mostrará como en la aplicación Messages.app de Apple, que debe estar usando una API privada.
Lo mejor que puede hacer es lanzar su propio banner de alerta o utilizar un marco existente:
He abierto un radar para este comportamiento aquí:
rdar://22313177
fuente
toastAlertFromGithub
si está sugiriendo el uso de esta biblioteca de terceros!Para mostrar notificaciones mientras la aplicación está abierta, debemos manejarla manualmente. Entonces, lo que estoy haciendo a continuación es manejar la notificación una vez recibida.
Agregue todo a continuación en AppDelegate.m
Avísame si esta es una buena solución. Me funcionó bien, pero no estoy seguro de si es la forma correcta.
fuente
Aquí está el código para recibir notificaciones push cuando la aplicación está en primer plano o en etapa abierta, iOS 10 y Swift 2.3
Si necesita acceder a la información de usuario del código de uso de notificación:
notification.request.content.userInfo
El método
userNotificationCenter(_:willPresent:withCompletionHandler:)
solo se llama si agrega a la carga útil el atributocontent-available:1
. La carga útil final debería ser algo como:fuente
userNotificationCenter(_:willPresent:withCompletionHandler:)
se llamará cuando su aplicación se esté ejecutando en primer plano. Por lo tanto, NO importa con " contenido disponible ", que está relacionado con " búsqueda en segundo plano ".Puedo mostrar notificaciones automáticas cuando la aplicación está activa para iOS 10.
La notificación push del servidor debe ser silenciosa .
Cuando recibe una notificación remota del servidor, envía una notificación local y establece el valor de keyPath: shouldAlwaysAlertWhileAppIsForeground = True
fuente
content.setValue("YES", forKeyPath: "shouldAlwaysAlertWhileAppIsForeground")
, ¿ verdad ? (con "Sí" y no es cierto)Puede manejar la notificación usted mismo y mostrar una alerta personalizada. Aplicaciones como Viber, Whatsapp y BisPhone utilizan este enfoque.
Un ejemplo de alerta personalizada de terceros es CRToast .
Intente programar una notificación local mientras su aplicación está en primer plano, y verá que no se muestra ninguna alerta de stock de iOS:
fuente
Versión Swift 3
Esto muestra una alerta cuando la aplicación está en primer plano.
Aplicación de ApplicationDelegate de
UNUserNotificationCenterDelegate
fuente
Para mostrar una notificación local, esta es la mejor opción. necesita menos código para escribir "BRYXBanner" https://cocoapods.org/pods/BRYXBanner
fuente
BRYXBanner
no parece marco para utilizar el de la bandera de aviso IOS.Si su objetivo de implementación> = iOS10, use UNUserNotification como se muestra a continuación-
fuente