2012-06-22 14 views
38

¿Es posible incrementar el valor de la insignia al recibir la notificación? O ¿Debería enviar el conteo como carga útil?Incrementar la insignia de notificación de inserción iPhone

Si estoy enviando el valor de la insignia como "1" cada vez, ¿cómo podría aumentar el valor de la insignia en el icono de la aplicación si la aplicación no está abierta?

He usado este código pero no funciona.

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber + 1; 
} 
+1

puede simplemente enviar la nueva cuenta como carga útil, para asegurarse de que se muestre la cuenta correcta cuando la aplicación esté en segundo plano y en primer plano – janusbalatbat

Respuesta

50

lo general, en todas las aplicaciones de los recuentos de notificación no leídos se mantienen en el servidor. Cuando el servidor envía una notificación de inserción a un token de dispositivo en particular, envía el recuento de la insignia junto con la carga útil. Una vez que se le notifica al dispositivo y su aplicación está en segundo plano (o muerta), el sistema operativo actualiza automáticamente el recuento de distintivos al icono de su aplicación. En caso si usted tiene su aplicación en ejecución, recibirá una notificación en el delegado

application:didReceiveRemoteNotification: 

y por lo tanto usted es capaz de recibir el recuento de la placa (NSDictionary *) userInfo. Y así usted puede actualizar el conteo de la insignia del icono de la aplicación usando la función

[UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue]; 

Creo que esto debería ayudarlo.

+6

No debería la clave para obtener el ¿el recuento de la insignia del aps dict be @ "badge"? Ver: http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html # // apple_ref/doc/uid/TP40006786-CH3-SW16 – qix

+0

aplicación: didReceiveRemoteNotification: ¿se llamará este método incluso si se mata la aplicación? – jailani

+1

@Mathew Varghese, cada usuario tendrá diferentes notificaciones no leídas, ¿cómo el recuento de distintivos será preciso al contar en el lado del servidor? – Subha

12

Si la aplicación no está abierta, no podrá aumentar la insignia, excepto desde la carga útil.

+6

@Geek no se llamará a su código ... Porque su aplicación no se está ejecutando – Antzi

5

Cuando aparece una notificación de inserción mientras su aplicación está en modo de fondo & desea incrementar el número de placa, debe enviar un badgeCount al servidor, para que el servidor conozca el conteo actual.

Si administra la cuenta placa del lado del servidor, este código es suficiente: -

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    NSLog(@"remote notification: %@",[userInfo description]); 

    if (userInfo) { 
     NSLog(@"%@",userInfo); 

     if ([userInfo objectForKey:@"aps"]) { 
      if([[userInfo objectForKey:@"aps"] objectForKey:@"badgecount"]) { 
       [UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue]; 
      } 
     } 
    } 
} 
+0

BUt ¿cómo puedo enviar la cuenta de la insignia al servidor? @ elppa –

+0

@ moosa, el servidor envía notificaciones push en su dispositivo cuando el servidor de kbown el token de su dispositivo y el servidor administran su cuenta de insignia a través de su ID de token de dispositivo, creo que no es necesario enviar el recuento de credenciales al servidor – Deepesh

+0

Por lo tanto, en la carga si el valor de la insignia se envía como 1 siempre, aumentará en el aplicación si no se abre? –

3

Urban Airship es compatible con this usando su función de "autobadge".

+1

Según el enlace, 'autobadge es una función de dirigible urbano para rastrear los números de placa en nuestros servidores', por lo que la carga útil debe incluir un número de placa que sea uno mayor que el anterior. –

+1

No. Lea el enlace: puede enviar "+1" y Urban Airship lo incrementará por usted. –

+1

... Urban Airship mantiene el recuento para usted en * sus servidores *, establecen el número de placa en la carga útil para usted ... no es solo "+1" en la carga útil (es el número que debe establecerse), presione las notificaciones no tienen ninguna noción de número de distintivo "+1", AFAIK. –

0

Después de recibir la notificación remota al abrir la aplicación,

obtener el número de la insignia actual en el Método "didBecomeActive" de su archivo AppDelegate mediante el siguiente código:

int badgeCount = [UIApplication sharedApplication].applicationIconBadgeNumber; 
    badgeCount = badgeCount + 1; 
Cuestiones relacionadas