Apple Production Push Service无效!

use*_*477 2 php ssl apple-push-notifications

请帮我!我已经非常努力地找到问题的答案,但我一直都没有成功.

我已经为我的应用程序成功实现了开发推送通知,但是当提交应用程序并将代码更新到生产服务时,我无法发送推送通知.我在发送时没有任何错误,但注册设备没有收到推送通知.

在我的服务器中的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>";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

gur*_*uru 15

你可以检查两件事

  • 您使用的是生产证书而非开发证书
  • 设备令牌列表没有任何由开发构建生成的设备ID.如果您尝试向具有生产证书的开发设备令牌发送通知,那么Apple将以静默方式删除该连接,之后没有任何令牌将收到通知.

  • 为你的第二点+1.我没有意识到开发环境的设备ID与生产环境不同. (3认同)
  • 谢谢你在那里的第二个音符.我没有注意到文档中的任何地方.我一直在向所有令牌发送通知.数据库中只有几个开发令牌,但我认为它们会被忽略.没有犯规,对吧?错误.再次,谢谢. (2认同)