php简单实现iospush的消息推送的方法,这个方法是之前跟ios团队在调ios的消息推送时候简单写的一个方法,不过现在好像苹果有推出一个php版的消息推送类,大家可以去下载来试一试。
<?php /** * 关于ios 的push的文档,包括ios的正式版,测试版的push * @param $file_pem 表示的是证书的路径 * @param $deviceToken 表示的是IOS devictoken * @param $param 表示的是参数格式,表示里面包括: alert 表示push的内容,badge,sound,type,ct 组成的数组 * @param $bool 表示的是应用是正式版还是测试版,当为true时时正式版,false 表示是测试版 */ function push_ios_test($file_pem,$deviceToken,$param,$bool=true) { if($bool){ $url="ssl://gateway.push.apple.com:2195"; }else{ $url="ssl://gateway.sandbox.push.apple.com:2195"; } $file_name=$file_pem; if(!file_exists($file_name)){ echo " 的应用证书不存在!"; exit();} if(empty($devictoken)){ echo "devictoken 为空!"; exit();} if(empty( $param['alert'])){echo "push的内容为空!"; exit();} $devictoken=trim($devictoken); $badge=empty($param['badge'])? 1 : $param['badge']; $sound=empty($param['sound'])? 1 : $param['sound']; $type=empty($param['type'])? 4 : $param['type']; $ct=empty($param['ct'])? 1 : $param['ct']; $ctx = stream_context_create(); stream_context_set_option($ctx, "ssl", "local_cert",$file_name ); $fp = stream_socket_client($url, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); if (!$fp) { echo "Failed to connect $err A $errstrn"; } $deviceToken=trim($value); $payload = '{"aps":{"alert":"'. $param['alert'].'","badge":'.$badge.',"sound":"'.$sound.'"},"type":'.$type.',"ct":"'.$ct.'"}'; $msg = chr(0) . pack("n",32) . pack("H*", $deviceToken) . pack("n",strlen($payload)) . $payload; $a = fwrite($fp, $msg); if(!$a){ echo "Send Push Fail!"; }else{ echo "Send Push Success!"; } fclose($fp); } ?>
这个是简单的实现了ios 的消息推送,这个需要devicetoken,应用的证书,相对应的各项参数才能发的出去,不过到现在也没明白,有时候群发ios的消息推送的时候,会有些设备接收不到,有些就可以接收得到,没接收到可能是应用被卸载了,或者是网络延迟的作用,如果大家有更好的想法欢迎讨论讨论。