【问题标题】:PHP Apple iOS Push Notifications: Command2 : Binary Interface and Notification FormatPHP Apple iOS 推送通知:Command2:二进制接口和通知格式
【发布时间】:2014-02-01 06:18:56
【问题描述】:

如今,使用 Command 2 的 PHP 和 Apple/iOS 推送通知已经变得流行起来。但是不确定,如何准备相同的格式,根据Apple guideline here,如何实现以下数据包格式:

也想知道,如何接收Format of error-response packet,如下所述:

目前,我使用的是以下简单格式:

$msg = 
// new: Command "1"
chr(1)
// new: Identifier "1111"
. chr(1) . chr(1) . chr(1) . chr(1)
// new: Expiry "tomorrow"
. pack('N', time() + 86400)
// old 
. chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;

fwrite($fp, $msg, strlen($msg));

【问题讨论】:

标签: php ios binary format apple-push-notifications


【解决方案1】:
//command 2
$msgInner =
  chr(1)
. pack('n', 32)
. pack('H*', $deviceToken)

. chr(2)
. pack('n', strlen($payload))
. $payload

. chr(3)
. pack('n', 4)
. chr(1).chr(1).chr(1).chr(1)

. chr(4)
. pack('n', 4)
. pack('N', time() + 86400)

. chr(5)
. pack('n', 1)
. chr(10);

$msg=
chr(2)
. pack('N', strlen($msgInner))
. $msgInner;

对于命令 8,请使用此功能:(由 Yudmt)About the apple Enhanced notification format

function error_response($fp)
{
    $read = array($fp);
    $null = null;
    $changedStreams = stream_select($read, $null, $null, 0, 1000000);

    if ($changedStreams === false)
    {
        echo ("Error: Unabled to wait for a stream availability");
    }
    elseif ($changedStreams > 0)
    {
        $responseBinary = fread($fp, 6);
        if ($responseBinary !== false || strlen($responseBinary) == 6)
        {
            $response = unpack('Ccommand/Cstatus_code/Nidentifier', $responseBinary);
            var_dump($response);
        }
    }
}

【讨论】:

  • 我不得不更改 $msg= chr(2) 。包('n',strlen($msgInner))。 $msg内;到 $msg= chr(2) 。包('N',strlen($msgInner))。 $msgInner;
【解决方案2】:

我相信在构建 $msg 时你需要

. pack('N', strlen($msgInner))

因为 Apple 的文档说帧长度应该是 4 个字节

“帧长——4字节——帧数据的大小”

对于pack(),'n' 生成 16 位,而 'N' 生成 32 位

n - unsigned short(始终为 16 位,大端字节序)

N - 无符号长(总是 32 位,大端字节序)

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2014-05-08
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多