estoy trabajando en push notifications app pero badge count no es a aumentar cuando la notificación viene.
he visto muchos ejemplos en stack overflow pero nadie es útil.

¿Alguien puede sugerirme cómo resolver este problema… gracias de antemano!

Mi Lado del Servidor PHP Código:

<?php

//Put your device token here (without spaces):
$deviceToken = 'c0d35d5f5ab179f0a93cb7c6b89b96b305ad3517b24e454abd4517e2323f4a7a';

//Put your private key's passphrase here:
$passphrase = '12345push';

//Put your alert message here:
$message = 'My First push notification!';
//$badge = 3;
////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

//Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

//Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default',
    'badge'=>($badge != (null) ? $badge + 1 : 1)
);

//Encode the payload as JSON
$payload = json_encode($body);

//Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

//Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;

//Close the connection to the server
  fclose($fp);

en el appdelegate.m

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{
 NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"badge"];
 NSLog(@"my message-- %@",alertValue);
 int  badgeValue= [alertValue intValue];
 [UIApplication sharedApplication].applicationIconBadgeNumber += badgeValue;
 }
uso valor entero en lugar de una cadena en la insignia de la clave

OriginalEl autor guptha | 2013-12-04

3 Comentarios

  1. 6

    Por lo general en todas las aplicaciones, los no leídos de notificación de la cuenta se mantiene en el servidor. Cuando el servidor envía una notificación de inserción a un determinado dispositivo token servidor envía el recuento junto con la carga.

    Su lógica de servidor necesita realizar un seguimiento de la correcta recuento y enviar de forma adecuada.

    {
        "aps" :  
        {
            "alert" : "Your notification message",
            "badge" : badgecount ,
            "sound" : "bingbong.aiff"
        }
    }

    EDITAR

    Ha establecido recuento en didReceiveRemoteNotification método. antes de que este método se llama appbadgese establece a partir de pushnotification, por lo que desde el servidor tiene que establecer la correcta insignia..

    Solución:

    para crear algunos webservice enviar deviceToken y currentBadge en que webservice para almacenar en el servidor, y cuando la próxima vez que usted envíe empuje compruebe la última insignia del valor de la señal y enviarla.

    Gracias por la respuesta! he probado el mismo código, pero no su trabajo.
    agregar registro de su userInfo.
    puedes comprobar por favor editado mi pregunta…
    comprobar respuesta Actualizada.

    OriginalEl autor Toseef Khilji

  2. 1

    Usted tiene que manejar su servidor de lado cuando se envía una notificación a otro usuario, a continuación, a partir de php al lado de ellos establecer un contador para incrementar la insignia & envío de la notificación a otro usuario después de que al abrir la aplicación de la insignia se establece a null como este :

    - (void) applicationWillResignActive:(UIApplication *) application
    {
        application.applicationIconBadgeNumber = 0;
    }

    & a recibir la notificación que establece este código :

    - (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {    
        NSLog(@"userInfo %@",userInfo);
    
        for (id key in userInfo)
        {
            NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
        }
    
        [application setApplicationIconBadgeNumber:[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]];
    
        NSLog(@"Badge %d",[[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] intValue]);
    
        NSString *message = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    
        [alert show];
    }
    En mi aplicación al mismo problema se está produciendo , la notificación recibida, pero el número de placa es no actualizar la aplicación en segundo plano.

    OriginalEl autor Gurpreet

  3. 1

    Tienes que hacerlo desde el lado del servidor. En mi caso lo he hecho a través de php y mysql. Aquí está mi base de datos
    Actualización Recuento De las Notificaciones Push en ios7

    He añadido un campo badgecount y puedo aumentar el recuento, cada vez que me envía el comando al dispositivo con este código

        $query = "SELECT badgecount FROM pushnotifications WHERE device_token = '{$device_token}'";
        $query = $this->db->query($query);
        $row = $query->row_array();
        $updatequery = "update pushnotifications set badgecount=badgecount+1 WHERE device_token ='{$device_token}'";
        $updatequery = $this->db->query($updatequery);
        $device = $device_token;
        $payload['aps'] = array('alert' => $pushmessage, 'badge' =>$row["badgecount"]+1, 'sound' => 'default');
        $payload = json_encode($payload); 

    Y yo también se hacer otra api para hacer el badgcount 0 que se llama en el

    - (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

    Así que cuando la notificación se ve de nuevo es cero en el servidor.

    ¿Qué pasa si las notificaciones se ven cuando el iPhone está fuera de línea? ¿Cómo usted va sobre él? usted no puede borrar la cuenta en el servidor…

    OriginalEl autor souvickcse

Dejar respuesta

Please enter your comment!
Please enter your name here