2010-11-19 3 views
0

Je travaille sur un projet en PHP qui nécessite de pousser une notification d'alerte sur le serveur APNS. J'ai utilisé le format de notification push amélioré. mais je ne reçois pas de réponse comme spécifié par les docs APNS. Je reçois une réponse en trois chiffres généralement 133, 132, 154, 138, etc. Ce que j'ai conclu pour être des signes de statut, par exemple. 133 est 1, 3, 3. mais maintenant j'ai aussi reçu 139. donc je doute que mon interprétation de la réponse soit fausse. Mais je ne comprends pas où c'est mal. Et ce qui est important, c'est que je reçois ces réponses Alert est poussé et je reçois des notifications sur mon iPhone ainsi que sur iPad.Notification Push Apple améliorée: Erreur de réponse au niveau du serveur du fournisseur

Mon code est le suivant:

$payload['aps'] = array('alert' => $message, 'badge' => 1, 'sound' => 'default'); 

$apnsHost = 'gateway.sandbox.push.apple.com'; 

$apnsPort = 2195; // default port 

$apnsCert = 'apns-dev.pem'; // APNS crtificate. 

$passPhrase = ''; 

$streamContext = stream_context_create(); 

stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 

stream_context_set_option($streamContext, 'ssl', 'passphrase', $passPhrase); 

try{ 

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext); 

if (!$apns) { 
    print "Failed to connect {$error} {$errorString}\n"; 
} 
else { 
    // Sending the payload 

    $apnsMessage = chr(0) . pack('n', 1) . pack('n', $nid) . pack('n', time() + 604800) . pack('n', 32) . pack('H*', str_replace(' ', '', $alert_device_token)) . pack('n', strlen($payload)) . $payload; 

    echo 'APNS Message: ' . $apnsMessage; 

    $fwrite = fwrite($apns, $apnsMessage); 

    echo 'APNS response: ' . $fwrite; 

Et quand cela s'exécuté je suis la réponse suivante du navigateur imprimé:

APNS Message: = yâ-U OC6: {"aps": {"alert": "Votre prix d'alerte EUR \/USD SELL a été atteint!", "badge": 1, "sound": "default"}} APNS réponse: 139

Peut Quelqu'un s'il vous plaît dites-moi ce que 139 signifie ici. Je fais quelque chose de mal ici.

+0

puis-je demander si vous le fixe. Je reçois quelque chose comme ça. – user633268

+0

Salut, Oui je suis sorti de cette situation. Vous devez utiliser une charge utile améliorée au lieu de celle-ci, c'est-à-dire la charge normale – srahul07

+0

dubbelugh ci-dessous est correcte: le nombre que vous recevez est les octets écrits par fwrite. Mais vous pouvez l'utiliser pour la vérification des erreurs, car si vous recevez une réponse 0, cela signifie que fwrite n'a rien pu écrire, probablement parce qu'Apple a fermé la connexion au serveur. Donc, ce n'est pas le fwrite avec la réponse 0 qui est le problème, c'est un fwrite précédent qui a été envoyé avec succès, mais il y avait quelque chose à ce sujet que Apple n'a pas aimé, donc ils ont fermé la connexion au serveur. Si vous utilisez "ORDER BY id" avec l'instruction SELECT, vous pouvez déterminer approximativement où le problème est survenu et continuer avec PUSH à partir de là. – jsherk

Répondre

1

L'écho "139" est la valeur de retour de fwrite(). Il est le nombre d'octets écrits par fwrite()

Voir: PHP: fwrite

Questions connexes