Сервис Apple Production Push не работает!

Пожалуйста помогите! Я изо всех сил пытался найти ответ на свою проблему, но все время безуспешно.

Я успешно реализовал push-уведомление о разработке для своего приложения, но когда отправил приложение и обновил код в рабочей службе, я не могу отправить push-уведомление. Ошибок при отправке у меня нет вообще, но пуш-уведомления не приходят на зарегистрированные устройства.

PHP-код для моего сервера выглядит примерно так:

$streamContext = stream_context_create();

stream_context_set_option($streamContext, 'ssl', 'local_cert', 'apns-dev.pem');

$apns = stream_socket_client('ssl://gateway.push.apple.com:2195', $error, $errorString, 15, STREAM_CLIENT_CONNECT, $streamContext);

if (!$apns)
{
echo "ERROR";
} else 
{
    if ($error)
    {
        echo "ERROR: " . $error . ": " . $errorString;
    } 
    else
    {
        echo "<p> Processing....</p><br />";
        $inputMessage = utf8_encode($_POST['text']);
        echo "<p>MESSAGE: $inputMessage</p>";
        $payload['aps'] = array('alert' => $inputMessage, 'sound' => 'default');

        $payload = json_encode($payload);

        $apnsMessagePart1 = chr(0) . chr(0) . chr(32);
        $apnsMessagePart3 = chr(0) . chr(strlen($payload)) . $payload;

        $xml = simplexml_load_file("tokens.xml");   

        if ($xml != NULL) {
            $devicesCount = 0;
            foreach($xml->children() as $deviceToken)
            {
                echo "<p>processando aparelho com o token: $deviceToken</p>";
                $apnsMessagePart2 = pack('H*', str_replace(' ', '', $deviceToken));
                $apnsMessage = $apnsMessagePart1 . $apnsMessagePart2 . $apnsMessagePart3;
                $success = fwrite($apns, $apnsMessage);
                if (!$success)
                    echo "Error sending message to $deviceToken";
                else
                    $devicesCount++;
            }
            socket_close($apns);
            fclose($apns);
            echo "<h2>... done!</h2>";
        }
        else
        {
            echo "<h4>error: no xml file found!</h4>";
        }
    }
}


person user624477    schedule 19.02.2011    source источник
comment
Вы уверены, что не используете один и тот же токен устройства для разработки и производства? Токены для двух сервисов являются отдельными и не взаимозаменяемыми.   -  person Robin    schedule 21.02.2011


Ответы (1)


Вы можете проверить две вещи

  • Вы используете производственный сертификат, а не сертификат разработки
  • В списке токенов устройств нет идентификаторов устройств, созданных сборкой для разработки. Если вы попытаетесь отправить уведомление на токен устройства разработки с производственным сертификатом, Apple просто отключит соединение, и ни один из токенов после этого не получит уведомления.
person guru    schedule 04.03.2011
comment
Спасибо за ваше второе примечание. Я не заметил этого нигде в документации. Я рассылал уведомления всем токенам. В базе данных было всего несколько токенов разработки, но я решил, что они будут проигнорированы. Нет фола, верно? НЕПРАВИЛЬНО. Еще раз спасибо. - person conceptDawg; 11.10.2011
comment
Только что тоже наткнулся на это. Противный. Было бы лучше, если бы они просто сообщали о недействительных токенах, используя службу обратной связи, чтобы впоследствии можно было провести очистку. Также APNS не разорвал соединение. Об ошибках не сообщается. - person BastiBen; 19.03.2012
comment
+1 за ваше второе очко. Я не понимал, что среда разработки имеет другой идентификатор устройства, чем производственная среда. - person capikaw; 31.03.2012
comment
Если вы попытаетесь отправить уведомление на токен устройства разработки с производственным сертификатом, Apple просто отключит соединение, и ни один из токенов после этого не получит уведомления. - Это важная информация, которая решила мою проблему. Спасибо! - person carbocation; 26.08.2014