0

到目前为止,我已经为 IOS 完成了一个 apple-mdm-ota-server。这些设备将以下内容交付给服务器(以 plist/xml 的形式):

-Push Magic Token -Device Token (b64 format oO) -PN-Topic (com.apple.mgmt.xxx) -UDID (in hexcode) -UnlockToken (很长的 b64 编码的东西)

我需要将以下内容发送到来自苹果的推送通知事物:

{"mdm":"pushMagic"}

Pushmagic = Push Magic 令牌

我需要如何编写需要写入 apns 套接字的数据?我尝试了适用于其他推送通知的那个,但它没有。什么都没有发生:-(。

$apns_url = 'gateway.push.apple.com';  

[...]

$apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port,
$error, $error_string, 2, STREAM_CLIENT_CONNECT, $stream_context);

fwrite($apns, chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ',
'', $wellWrittenToken)) . chr(0) . chr(strlen($mdmInitialPush)) .
$mdmInitialPush);

[...]

$error 为 0。 $wellwrittentoken = 十六进制代码中的设备令牌 $apns_xx - ssl 的东西似乎有效,因为它给出了错误消息,因为它没有 $mdminitialpush - 我要发送的消息

4

2 回答 2

4

我没有看到您在设置流时包含您的 APNS 密钥。这是(大致)我们所做的:

$apns_certkey_path = '/path/to/cert/and/key/file' ;
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apns_certkey_path);

$apns = stream_socket_client(
  'ssl://' . $apns_url . ':' . $apns_port,
  $error,
  $errorString,
  2, // timeout
  STREAM_CLIENT_CONNECT,
  $streamContext
);

$payload = json_encode(array('mdm' => $PushMagic));
$apnsMessage = chr(0)  . chr(0)
             . chr(32) . base64_decode($ApnsTokenB64)
             . chr(0)  . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);
于 2012-10-24T13:11:21.533 回答
0

使用这个

function push_device($data) {
    $push = new ApnsPHP_Push(
        ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION,
        '../MyPushCert.pem'
    );
    $push->connect();
    $message = new ApnsPHP_Message_Custom($data["Token"]);
    $message->setCustomProperty('mdm', $data["PushMagic"]);
    $push->add($message);
    $push->send();
    $push->disconnect();
}
于 2017-03-08T16:09:08.837 回答