Pushmeldingen verzenden naar veel apparaattokens

ik heb dit PHP-script:

$q = mysql_query("SELECT `token` FROM `tokens`");

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns.pem');
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);


while($token = mysql_fetch_array($q))
{
    $deviceToken = $token[0];
    echo $deviceToken.": ";
    $payload['aps'] = array('alert' => $message, 'sound' => 'Completed.wav');
    $payload = json_encode($payload);

    if (!$fp)
    {
        echo "Failed to connect {$err} {$errstrn}
"; } else { echo "Connection OK
"; } $msg = chr(0) . pack("n", 32) . pack('H*', $deviceToken) . pack("n", strlen($payload)) . $payload; if (fwrite($fp, $msg, strlen($msg)) === FALSE) { echo "can't write to socket!
"; } } fclose($fp);

resultaat voor alle token - Verbinding OK! Maar de Push-melding wordt door slechts één apparaat ontvangen! Ik heb geprobeerd verschillende berichten te verzenden, maar het resultaat veranderde niet :(

7
Gewoon een (mogelijk dom) idee - ondersteunt de APN-gateway meerdere PN's in een enkele verbinding? Misschien moet je proberen de open/close van stream in de loop te verplaatsen.
toegevoegd de auteur mkilmanas, de bron
In mijn geval werkte het openen en sluiten van de verbinding in de lus.
toegevoegd de auteur Sergio Morstabilini, de bron
Werkt ook voor mij om stream_socket_client en fclose in de lus op te nemen
toegevoegd de auteur garanda, de bron
Heeft iemand dit opgelost? help me alsjeblieft dat ik hetzelfde probleem heb als ik slechts één apparaat in db heb kan ik een melding verzenden, maar wanneer er meer dan één is die ik niet kan verzenden
toegevoegd de auteur Ravi, de bron
Wauw!!! ideeën! ??
toegevoegd de auteur Alexander Zakatnov, de bron
nee, het werkt niet. maar ik vond les in Google code, in deze klasse implementeer methode deze unieke id voor berichten, maar over unieke id's in apple documentatie niets over deze id ...
toegevoegd de auteur Alexander Zakatnov, de bron

1 antwoord

probeer mijn code. Ik test het met 4 apparaten.

Sorry voor de opmerkingen die in het Spaans zijn.

    <?php
include("../conectar.php");

if (isset($_GET['msj']) and isset($_GET['cupon']) and $_GET['msj'] != '' and $_GET['cupon'] != '') {

    $msj = $_GET['msj'];
    $cupon = $_GET['cupon'];

    echo '

';
}else{
    echo 'error #2';
}
?>

In mijn active_users DB heb ik alle tokens. Ik hoop dat het helpt

3
toegevoegd
Deze code verschilt niet van die in de vraag (met betrekking tot de verbinding en fesis)
toegevoegd de auteur jptsetung, de bron
een beetje laat ... maar dit werkt voor mij
toegevoegd de auteur spankmaster79, de bron