Как отправить Apple MDM Push-уведомление с простым PHP?

Я сделал Apple-MDM-OTA-сервер для IOS до сих пор. Устройства доставляют на сервер следующие вещи (в виде plist / xml):

-Push Magic Token -Device Token (в формате b64 oO) -PN-Topic (com.apple.mgmt.xxx) -UDID (в hex-коде) -UnlockToken (очень длинная вещь, закодированная в b64)

Мне нужно отправить следующий контент на push-уведомления от Apple:

{ "MDM": "pushMagic"}

Pushmagic = Жетон Волшебства Пуша

Как мне нужно собрать данные, которые мне нужно записать в сокет apns? Я попробовал тот, который работает для других push-уведомлений, но для этого это не так. Там просто ничего не происходит:-(.

$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 is 0. $wellwrittentoken = the device-token in hex-code $apns_xx - The ssl thing seems to work, because it gave error message as it didn't $mdminitialpush - my message I want to send

3 ответа

Я не видел, чтобы вы включили свой ключ 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);

Использовать этот библиотека

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();
}
Другие вопросы по тегам