发送APNS命令= 2

时间:2014-01-13 12:10:08

标签: php apple-push-notifications

向APNS发送2级通知时遇到问题。 v1发送正常,但我想转到v2。以下是我实现两个版本的两种方法。我将这些与其余代码分开,以便在两者之间轻松改变。 v1工作,而v2不工作..

static function createNotificationV1($token, $payload, $id, $expireTime)
{
    $msg = pack('C', 1); // v1
    $msg .= pack('N', $id); // id
    $msg .= pack('N', $expireTime);
    $msg .= pack('n', 32) . pack('H*', $token);
    $msg .= pack('n', strlen($payload)) . $payload;

    return $msg;
}

static function createNotificationV2($token, $payload, $id, $expireTime)
{
    $tokenItem = pack('C', 1) . pack('n', 32) . pack('H*', $token);
    $payloadItem = pack('C', 2) . pack('n', strlen($payload)) . $payload;
    $idItem = pack('C', 3) . pack('n', 4) . pack('N', $id);
    $expireItem = pack('C', 4) . pack('n', 4) . pack('N', $expireTime);
    $priorityItem = pack('C', 5) . pack('n', 1) . pack('C', 10);

    $frame = $tokenItem . $payloadItem . $idItem . $expireItem . $priorityItem;

    $msg = pack('C', 2); // v2
    $msg .= pack('n', strlen($frame));
    $msg .= $frame;

    return $msg;
}

任何提示都将不胜感激。

2 个答案:

答案 0 :(得分:3)

此代码效果很好:

$pn = pack('CnH*', 1, 32, $token)
    . pack('CnA*', 2, strlen($payload), $payload)
    . pack('CnA*', 3, 4, $id)
    . pack('CnN',  4, 4, $expireTime)
    . pack('CnC',  5, 1, 10);

$msg = pack('CN', 2, strlen($pn)) . $pn;

因为您使用的是pack('n', strlen($frame))而不是pack('N',

答案 1 :(得分:2)

$pn = pack('CnH*', 1, 32, $sDeviceToken)
  . pack('CnA*', 2, strlen($sPayload), $sPayload)
  . pack('CnN', 3, 4, $nMessageID)
  . pack('CnN', 4, 4, $nExpire > 0 ? time() + $nExpire : 0)
  . pack('CnC', 5, 1, $priority);

$sRet = pack('CN', self::COMMAND_PUSH, strlen($pn)) . $pn;

行$ id有一个错误而不是CnA *,它需要CnN