iOS推送通知iPhone和iPad

时间:2014-08-07 15:57:11

标签: php ios ipad push-notification

我制作了一款具有推送通知功能的通用应用。我相信你读这篇文章也会感到惊讶。

在生产版本(App store build)中,我在iPad上收到Push消息,而我的iPhone上没有收到此类通知。

应用程序是为通用构建的,所以当然代码相同,Appdelegate对iPad和iPhone都是一样的。

自从过去4年以来我一直在制作iOS从未遇到过这样的问题。

有一件事是肯定我的推送通知实施是正确的,否则我永远不会在我的iPad上收到推送消息。

任何帮助????

谢谢, PARTH

修订:

请检查下面的PHP代码,相同的代码(复制/过去)为我的另一个应用程序工作,为此它不会。 再次如果我发送推送单个设备我收到所有,但如果我尝试通过使用循环发送到所有设备我刚刚收到一个设备。 (可能是第一排表格)

$payload = json_encode($body);
for($i = 0; $i<count($deviceTokens); $i++) {
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '',$deviceTokens[$i])) . pack("n",strlen($payload)) . $payload;
fwrite($fp, $msg);
}
fclose($fp);

这里我将echo置于for循环中,我得到了所有寄存器设备。

1 个答案:

答案 0 :(得分:0)

for($i = 0; $i<count($deviceTokens); $i++) {

pushnotification_ios($deviceTokens, "Your Message");
}

循环调用此函数..

function pushnotification_ios($device_token, $message){

        $passphrase = "Your_PEM_File_Password_Here";

        $ctx = stream_context_create();
        stream_context_set_option($ctx, 'ssl', 'local_cert', YOUR_PEM_FILE_PATH_HERE);
        stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    // use this when you in sandbox mode..
        $fp = stream_socket_client(
            'ssl://gateway.sandbox.push.apple.com:2195', $err,
        $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
    // use this when you in development mode..
    //  $fp = stream_socket_client(
    //  'ssl://gateway.push.apple.com:2195', $err,
    //$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

        $body['aps'] = array(
            'badge' => $badge,
            'alert' => $message,
            'sound' => 'default',
            'content-available' => '1'
        );
    //echo "<pre>"; print_r($body);
        $payload = json_encode($body);

        $msg = chr(0) . pack('n', 32) . pack('H*', $device_token) . pack('n', strlen($payload)) . $payload;

        $result = fwrite($fp, $msg, strlen($msg));  //echo "<pre>"; print_R($result);
        /*
        if (!$result){
            $data = array(
                'Message' => 'Message not delivered' . PHP_EOL
                );
            }  else {
        $data = array(
                'Message' => 'Message successfully delivered' . PHP_EOL
                );
        } //echo "<pre>"; print_R($result); */

        fclose($fp);
    return $result;
    }