2011-09-04 121 views
38

我们希望能够将简单的文本消息推送给我们所有的iphone用户。为此,我们显然需要创建一个存储设备令牌的服务器端代码,并在必要时推送消息。这样做有没有好的例子? (谈到服务器代码)为iOS(服务器端)实施推送通知

感谢,如果你想自己托管它,或者访问Urban Airship如果你确定了托管服务(他们有一个广泛的一套文档)

回答

13
// Push Notification code for IPHONE in PHP 
    $deviceToken = $users_rows['gcm_regid']; 
    $passphrase = 'pass1234'; 
    $ctx = stream_context_create(); 
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'DrinksterDevelopment.pem'); 
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

    $fp = stream_socket_client(
     'ssl://gateway.sandbox.push.apple.com:2195', $err, 
     $errstr, 120, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

    if (!$fp) 
     exit("Failed to connect: $err $errstr" . PHP_EOL); 

    echo 'Connected to APNS' . PHP_EOL; 

    $body['aps'] = array(
     // 'alert' => $_GET["message"].'#'.$_GET["type"].'#'.$_GET["deal_id"], 
     'alert' => $_GET["message"], 
     'sound' => 'default' 
     ); 
    $body['other'] = $_GET["type"].'#'.$_GET["deal_id"]; 

    $payload = json_encode($body); 
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 
    $result_iphone = fwrite($fp, $msg, strlen($msg)); 

    if (!$result_iphone) 
     $msg_iphone = 'Message not delivered' . PHP_EOL; 

    else 
     $msg_iphone = 'Message successfully delivered' . PHP_EOL; 

    mail('[email protected]', 'IOSPushMsgStatus', $msg_iphone); 
    fclose($fp); 
    } //if($users_rows['Platform'] == 'Web' OR $users_rows['Platform'] == 'Android') 
+0

如果我使用共享托管服务器,是否可以将证书上传到它并使用此PHP代码?我尝试过,但找不到方法 - 我使用iPage。 –

+0

请注意Apple将APN连接的重复打开和关闭视为拒绝服务连接。如果您每天发送一次推送通知,则根据Apple开放/关闭连接是正常的。 – gnasher729

0

我还建议使用外部服务对于诸如城市或飞艇PushApps。 我更熟悉最后一个,我可以告诉你,除了“常规”推送通知消息之外,您还可以通过分段,位置或调度通知来获取消息。起初,它似乎不是一个重要的功能,但随着用户群的增长,您会看到这些功能的重要性。

+4

问题是关于代码没有付费的服务 – Alex