【问题标题】:How to send an apple mdm push notification with plain php?如何使用普通 php 发送苹果 mdm 推送通知?
【发布时间】:2012-10-24 10:05:46
【问题描述】:

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

-推送魔法令牌 -设备令牌(b64 格式 oO) -PN-主题(com.apple.mgmt.xxx) -UDID(十六进制) -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 - 我要发送的消息

【问题讨论】:

    标签: apple-push-notifications mdm


    【解决方案1】:

    我没有看到您在设置流时包含您的 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);
    

    【讨论】:

    • 谢谢,在尝试了几个仅适用于 iOS 应用通知的解决方案后,我还能够修改此代码以正确发送 MDM 通知。
    • @bobcat 嗨,bobcat。您对代码进行了哪些修改以正确获取 MDM 通知。
    • 我的设备令牌没有任何编码是 "\xEA\u0013\xD0sa\xEFt\r\xB4\\iP\x939\xC9\xC6V\xA9\xA4*\xF3\x9By\tq\xC9c \x8C\xEB \u0017i" ,我需要先解码然后触发通知吗?
    • 我尝试进行编码/解码并转换为 bin2hex() ,但没有任何效果:(
    • 你能检查一下吗,stackoverflow.com/q/44886700/3145189
    【解决方案2】:

    使用this

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2011-09-19
      • 2011-05-19
      相关资源
      最近更新 更多