详解IOS开发中生成推送的pem文件
详解IOS开发中生成推送的pem文件
具体步骤如下:
首先,需要一个pem的证书,该证书需要与开发时签名用的一致。具体生成pem证书方法如下:
1.登录到iPhoneDeveloperConnectionPortal(http://developer.apple.com/iphone/manage/overview/index.action)并点击AppIDs
2.创建一个不使用通配符的AppID。通配符ID不能用于推送通知服务。例如, com.itotem.iphone
3.点击AppID旁的“Configure”,然后按下按钮生产推送通知许可证。根据“向导”的步骤生成一个签名并上传,最后下载生成的许可证。
4.通过双击.cer文件将你的aps_developer_identity.cer引入Keychain中。
5.在Mac上启动Keychain助手,然后在loginkeychain中选择Certificates分类。你将看到一个可扩展选项“AppleDevelopmentPushServices”
6.扩展此选项然后右击“AppleDevelopmentPushServices”>Export“AppleDevelopmentPushServicesID123”。保存为apns-dev-cert.p12文件。
7.扩展“AppleDevelopmentPushServices”对“PrivateKey”做同样操作,保存为apns-dev-key.p12文件。
8.需要通过终端命令将这些文件转换为PEM格式:
opensslpkcs12-clcerts-nokeys-outapns-dev-cert.pem-inapns-dev-cert.p12 opensslpkcs12-nocerts-outapns-dev-key.pem-inapns-dev-key.p12
9.如果你想要移除密码,要么在导出/转换时不要设定或者执行:
opensslrsa-inapns-dev-key.pem-outapns-dev-key-noenc.pem
10.最后,你需要将键和许可文件合成为apns-dev.pem文件,此文件在连接到APNS时需要使用:
catapns-dev-cert.pemapns-dev-key-noenc.pem>apns-dev.pem
实现代码:
array("alert"=>"message123gggg32323333","badge"=>1,"sound"=>'default'));//推送方式,包括了提示内容,提示方式和提示声音。 $ctx=stream_context_create(); //如果在Windows的服务器上,寻找pem路径会有问题,路径修改成这样的方法: $pem=!empty($this->cfg['isga'])&&$this->cfg['isga']==2?'apns-dev.pem':'apns-dev.pem';//临时全部为开发状态 stream_context_set_option($ctx,'ssl','local_cert',"/data/web/cert/".$pem); //linux的服务器直接写pem的路径即可 stream_context_set_option($ctx,'ssl','local_cert',"/data/web/cert/".$pem); //如果你的pem存有密码,需要加一个密码登陆语句 stream_context_set_option($ctx,'ssl','passphrase',''); //如果你的pem存有密码,需要加一个密码登陆语句 //$pass=”123123“; //stream_context_set_option($ctx,‘ssl',‘passphrase',$pass); //此处有两个服务器需要选择,如果是开发测试用,选择第二名sandbox的服务器并使用Dev的pem证书,如果是正是发布,使用Product的pem并选用正式的服务器 $fp=stream_socket_client("ssl://gateway.push.apple.com:2195",$err,$errstr,60,STREAM_CLIENT_CONNECT,$ctx); $fp=stream_socket_client("ssl://gateway.sandbox.push.apple.com:2195",$err,$errstr,60,STREAM_CLIENT_CONNECT,$ctx); if(!$fp){ print_r("Failedtoconnect$err$errstrn"); return; } print_r("ConnectionOK\n"); $payload=json_encode($body); $msg=chr(0).pack("n",32).pack('H*',str_replace('','',$deviceToken)).pack("n",strlen($payload)).$payload; print_r("sendingmessage:".$payload."\n"); fwrite($fp,$msg); fclose($fp);
以上就是IOS开发中生成推送的pem文件的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!