Неправильный токен для push-уведомления Iphone - PullRequest
1 голос
/ 07 февраля 2012

Наконец, я обнаружил токены песочницы, которые были смешаны с рабочими токенами, и я обновляю код, получаю ответ об ошибке от apple, когда при отправке токена песочницы на apple все следующие токены не работают.... Хотя push-сообщение было "$ payload ['aps'] = array ('content-available' => 1);", Apple будет выдавать сообщение, но устройство не будет показывать это сообщение, когда я найдуНеправильно, я удаляю его и повторно тестирую.

Существует забавная проблема службы уведомлений Apple Push: когда я генерирую почтовое уведомление для своего устройства и отправляю на сервер Apple, на некоторое время, мойустройство получит уведомление.Но если я сначала опубликую уведомление по неправильному токену устройства, а затем опубликую правильное уведомление на моем устройстве, мое устройство будет без ответа, точно так же, как push-уведомление было съедено яблоком?

Что не так с этим?

Я использую php-код для push-службы, вот самая важная часть:

$payload['aps'] = array('content-available' => 1);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        foreach ($line as $deviceToken) {
            break;
        }

        print_r($deviceToken);
        $apnsMessage = chr(1) . $time . $time . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
        $ret = fwrite($apns, $apnsMessage);
        if ($ret !== strlen($apnsMessage)) {
            echo "push error";
        }

        ob_flush();
        flush();

        $read = array($apns);
        $null = null;
        $changedStreams = stream_select($read, $null, $null, 0, 100000);//wait for 0.1s

        if ($changedStreams === false) {    
            echo "Error: Unabled to wait for a stream availability";
        } elseif ($changedStreams > 0) {
            print "can't receive any notification behind this token";

            $responseBinary = fread($apns, 6);
            if ($responseBinary !== false || strlen($responseBinary) == 6) {

                $response = unpack('Ccommand/Cstatus_code/Nidentifier', $responseBinary);
                print_r($response);
            }
        } else {
            //update the success push status in database
        }

        print "<br>";
    }

Я не знаю, что с этим не так, и я также добавил службу обратной связи в другой php, иЯ не могу получить неправильный токен от Apple, потому что у меня в базе данных много токенов устройств, я не могу найти, какой из них неправильный.

Кто-нибудь, помогите мне, простите мой плохой английский

1 Ответ

0 голосов
/ 09 февраля 2012

Предполагая, что ваш $apns реализован таким образом

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

, вы должны проверить $ errorString, чтобы выяснить ошибку.

или попытаться закрыть сокет для каждого сообщения ипосмотрите, есть ли разница

fwrite($apns, $apnsMessage);
socket_close($apns);
fclose($apns);
...