无法使用PHP从iOS推送通知中收到反馈

时间:2014-08-02 20:40:42

标签: php ios push-notification

我在自己的服务器上设置了一个php文件并用它来发送推送通知。我已经用两个设备试了一下,效果很好。问题在于反馈方法没有返回任何内容。我已经尝试过一切并禁用防火墙等等。请注意,我测试了这样的反馈:我在两台设备上运行应用程序。他们都收到通知。然后我删除其中一个应用程序,然后再试一次。这是我使用的PHP代码:

<?php

$deviceToken1 = '.....';
$deviceToken2 = '.....';

$tokenArr = array($deviceToken1,$deviceToken2);

$passphrase = '.....';

$message = $_POST['message'];
$newsID = $_POST['newsID'];

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

for($i = 0; $i < count($tokenArr); $i++) 
{ 
    $body['aps'] = array(
        'alert' => $message,
        'badge' => 1,
        'sound' => 'sound.aiff',
        'newsID' => $newsID);

    // Encode the payload as JSON
    $payload = json_encode($body);

        // Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $tokenArr[$i]) . pack('n', strlen($payload)) . $payload;

        // Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));

        if (!$result) {
              echo '<br/>'.date("Y-m-d H:i:s").' Message not delivered' . PHP_EOL;  
        } 
        else {
              echo '<br/>'.date("Y-m-d H:i:s").' Message successfully delivered' . PHP_EOL;
        }
}

stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
$apns = stream_socket_client('ssl://feedback.sandbox.push.apple.com:2196', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
echo $apns;
if(!$apns) 
{
        echo '<br/>';
        echo "Error $errcode : $errstr\n";
        return;
}
else {

    echo "APNS feedback results\n";
    while ($devcon = fread($fp, 38))
        {
        $arr = unpack("H*", $devcon); 
        $rawhex = trim(implode("", $arr));
        $feedbackTime = hexdec(substr($rawhex, 0, 8)); 
        $feedbackDate = date('Y-m-d H:i', $feedbackTime); 
        $feedbackLen = hexdec(substr($rawhex, 8, 4)); 
        $feedbackDeviceToken = substr($rawhex, 12, 64);
        echo "TIMESTAMP:" . $feedbackDate . "\n";
        echo "DEVICE ID:" . $feedbackDeviceToken. "\n\n";
        }
}

?>

0 个答案:

没有答案