Envío notificaciones automáticas a mi aplicación de iPhone, y me gustaría tener un conjunto diferente de instrucciones para ejecutar dependiendo de si la aplicación ya está iniciada o no. Soy nuevo en el desarrollo de iPhone, y aunque sospecho que UIApplication o la clase AppDelegate de mi proyecto tiene la solución, no he encontrado una buena respuesta. ¿Hay alguna manera fácil de verificar esto?¿Cómo puedo saber si mi aplicación para iPhone se está ejecutando cuando se recibe una notificación push?
Respuesta
El UIApplication delegado tiene el método
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
el que es necesario implementar. Esto recibe la notificación cuando la aplicación se está ejecutando.
Si su aplicación no se está ejecutando actualmente y una notificación es recibida a continuación, su aplicación puede ser lanzado con
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
con los detalles de la notificación realizada en el diccionario launchOptions. si el diccionario es nulo, el usuario toca el ícono de la aplicación como siempre.
La documentación de Apple para las notificaciones push explica esto:
Sin embargo, hay dos situaciones en las que applicationDidFinishLaunching: no es un sitio de aplicación adecuado:
- La aplicación se ejecuta cuando llega la notificación.
- La carga de notificación contiene datos personalizados que la aplicación puede usar.
En el primer caso, en que la aplicación se ejecuta cuando el iPhone OS recibe una notificación remota, se debe implementar la aplicación: didReceiveRemoteNotification: Forma de UIApplicationDelegate si desea descargar los datos inmediatamente. Después de la descarga, asegúrese de quitar la insignia del icono de la aplicación. (Si su aplicación comprueba con frecuencia con su proveedor para obtener nuevos datos, la aplicación de este método podría no ser necesario.)
Esto significa que si su aplicación: didReceiveRemoteNotification: método delegado se llama, su aplicación se está ejecutando.
Esta es la forma más adecuada de manejar el estado activo/inactivo de la aplicación.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// check for the app state
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
//the app is in the foreground, so here you do your stuff since the OS does not do it for you
//navigate the "aps" dictionary looking for "loc-args" and "loc-key", for example, or your personal payload)
}
application.applicationIconBadgeNumber = 0;
}
didReceiveRemoteNotification:
se llama cuando la aplicación se está ejecutando, sí, pero cuando se suspende, el iOS
se encarga de la colocación de la tarjeta de identificación, etc. Si la aplicación está en primer plano, el sistema operativo no hace nada y solo llama al didReceiveRemoteNotification:
.
Si va a comprobar applicationState en IOS menos de 4, tendrá que comprobar que applicationState es compatible:
if ([application respondsToSelector:@selector(applicationState)]){
// Safe to check applicationState
UIApplicationState state = [application applicationState];
}
Dependiendo de qué quiere decir con "marcha", que están ya sea buscando :
- respuesta de Kevin anterior (diferencia entre puso en marcha o no lanzado)
- o esto (diferencia entre suspendido o activa, pero ya en marcha):
Utilice un indicador que se establece como verdadero cuando la aplicación se activa y falso cuando la aplicación no está activa.
bandera (en el archivo de cabecera [.h]):
BOOL applicationIsActive;
de código (en el archivo de implementación [.m]):
- (void)applicationDidBecomeActive:(UIApplication *)application {
applicationIsActive = YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
applicationIsActive = NO;
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if (applicationIsActive) {
// Handle notification in app active state here
}
else {
// Handle notification in app suspended state here
}
Esto funciona porque cuando se suspende la aplicación, la El SO llama a "applicationDidReceiveRemoteNotification" antes de llamar a "applicationDidBecomeActive" durante el proceso de "activación".
La respuesta "completa" es en realidad la respuesta de Kevin más esta respuesta.
Espero que esto ayude.
- 1. Determinar si una aplicación se está ejecutando en primer plano cuando se recibe una notificación en iOS
- 2. ¿Cómo puedo saber si mi aplicación se está ejecutando en una sesión de RDP
- 3. ¿Cómo puede saber mi programa si Delphi se está ejecutando?
- 4. ¿Cómo puedo saber si un proceso se está ejecutando?
- 5. Notificación en Phonegap mientras la aplicación no se está ejecutando
- 6. Cómo detectar si el iphone está sincronizado cuando la aplicación no se está ejecutando
- 7. ¿Cómo puedo saber si mi kernel OpenCL se está ejecutando en una GPU?
- 8. ¿Cómo manejar las notificaciones push si la aplicación ya se está ejecutando?
- 9. ¿Cómo puedo saber si mi aplicación se está ejecutando como una aplicación de 32 bits o de 64 bits?
- 10. Comprobando si mi aplicación de Windows se está ejecutando
- 11. aplicación iPhone de fondo para actualizar la pantalla cuando se recibe una llamada telefónica
- 12. ¿Cómo puedo saber si mi proceso se está ejecutando como administrador?
- 13. ¿Cómo se puede saber si el iPhone se bloquea?
- 14. ¿Cómo puedo saber en qué dispositivos/versiones de sistema operativo se está ejecutando mi aplicación iOS?
- 15. Cómo saber si el servidor de emacs se está ejecutando
- 16. ¿Cómo comprobar si una aplicación WPF ya se está ejecutando?
- 17. ¿Cómo puedo saber si mi script de Perl se está ejecutando en Windows?
- 18. ¿Cómo saber si se está ejecutando un temporizador?
- 19. ¿Cómo puedo saber en qué directorio se está ejecutando mi aplicación de consola con C#?
- 20. ¿Cómo puedo saber bajo qué versión de IIS se está ejecutando mi aplicación Asp.Net?
- 21. ¿Cómo saber si la actualización MATERIALIZED VIEW se está ejecutando?
- 22. Cómo determinar si una aplicación web se está ejecutando actualmente
- 23. Notificación de inserción mientras la aplicación no se está ejecutando - launchOptions dictionary está vacío
- 24. Cómo responder a la notificación de inserción ver si la aplicación ya se está ejecutando en segundo plano
- 25. La mejor manera de verificar si una aplicación de iPhone se está ejecutando por primera vez
- 26. Registrarse para notificación push
- 27. ¿Cómo sabe WhatsApp si el usuario recibe la notificación automática incluso si la aplicación se ejecuta en segundo plano y no está abierta?
- 28. ¿Cómo saber si se está ejecutando una aplicación de pantalla completa?
- 29. ¿Cómo puedo saber si Autovacuum se está ejecutando en Windows Server 2003 para mi base de datos PGSQL?
- 30. BroadcastReceiver cuando la aplicación no se está ejecutando
Esta es una gd. Gracias –