IOS推送之PHP代码

转载请标明出处

欢迎交流

[email protected]

我是一个单线程妞~


在写推送的时候,PHP老是有问题,网上的代码几乎都是给一台设备推送,我推送多台的时候有的设备接收不到,后来琢磨了一周,总算有点结果。

因为每次请教大牛的时候,很多大牛都会说,我只负责IOS客户端,不会PHP。汗死。


PHP代码,里面查询数据库中device token要换成你们自己的相关代码。

[php]  view plain copy
  1.  <?php  
  2. // 发布地址:gateway.push.apple.com:2195  
  3.   
  4.  // 测试通过  
  5. require_once "/home/bae/app/include/db.php";  
  6.    
  7. $db_obj = new DB();  
  8. $sql = "select appleID from appleDevice ";  
  9. $result = $db_obj->db_array($sql);  
  10.    
  11. $countArray = count($result);   
  12.    
  13. $passphrase = 'zhaojian';  
  14. $message = '开发-推送-测试!';   
  15. $ctx = stream_context_create();  
  16. stream_context_set_option($ctx'ssl''local_cert''ck.pem');  
  17. stream_context_set_option($ctx'ssl''passphrase'$passphrase);  
  18. $fp = stream_socket_client(  
  19.     'ssl://gateway.sandbox.push.apple.com:2195'$err,  
  20.     $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);  
  21.   
  22. if (!$fp)  
  23.     exit("Failed to connect: $err $errstr" . PHP_EOL);  
  24.    
  25. echo 'Connected to APNS' . PHP_EOL;  
  26.    
  27. $body['aps'] = array(  
  28.     'alert' => $message,  
  29.     'sound' => 'default'  
  30.     );  
  31.    
  32. $payload = json_encode($body);  
  33.   
  34.  for($i = 0; $i < $countArray$i++)  
  35. {  
  36.     $deviceToken = $result[$i]['appleID'];  
  37.      
  38.     $msg = chr(0) . pack('n', 32) . pack('H*'$deviceToken) . pack('n'strlen($payload)) . $payload;  
  39.    
  40.     $result1 = fwrite($fp$msgstrlen($msg));  
  41.        
  42.     if (!$result1)  
  43.         echo 'Message not delivered' . PHP_EOL;  
  44.     else  
  45.         echo 'Message successfully delivered' . PHP_EOL;  
  46.   }  
  47.     fclose($fp);     
  48.   
  49. ?>  

网上的代码最后fwrite的返回值都付给了device token数组,所以第一次循环的时候,数组就被改变了,所以不会推送成功(只推送数组第一个设备)。所以只要把返回值付给另一个变量即可。

你可能感兴趣的:(IOS推送之PHP代码)