2012-10-24 85 views
0

到目前爲止,我已經爲IOS做了一個apple-mdm-ota-server。這些器件可提供以下我的東西到服務器(在plist中/ XML的形式):如何用普通的php發送蘋果mdm推送通知?

-push魔令牌 -Device令牌(在B64格式OO) -PN-主題(com.apple.mgmt.xxx ) -udid(以十六進制編碼) -UnlockToken(很長的B64編碼的東西)

我需要將以下內容推送通知的事情,從蘋果派:

{ 「MDM」: 「pushMagic」 }

Pushmagic =推魔標記

我該如何編寫需要寫入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); 

[...] 

$誤差爲0。 $ wellwrittentoken =設備令牌以十六進制代碼 $ apns_xx - 在SSL的事情似乎工作,因爲它給了錯誤消息它沒有 $ mdminitialpush - 我的消息,我想送

回答

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); 
+0

這解決了這個問題。謝謝! :) – Franky

+0

如果確實如此,您應該將答案標記爲已接受! –

+0

謝謝,我也能夠修改此代碼,以便在嘗試一些僅適用於iOS應用通知的解決方案後正確發送MDM通知。 – bobcat

0

使用this libray

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