>백엔드 개발 >PHP 튜토리얼 >IOS php 服务器 客户端 准备工作_PHP教程

IOS php 服务器 客户端 准备工作_PHP教程

WBOY
WBOY원래의
2016-07-13 17:18:391068검색

今天终于完完全全的搞明白了,APNs 推送前,客户端的准备工作需要那一些。如果有错误的地方,欢迎大神指出来。

准备工作:

原文地址:点击打开链接http://blog.csdn.net/tuxiangqi/article/details/17245553

1.到开发者中心,创建app Id,选择push notification 功能(game center 和另外一个是必选的)。

\


2.创建certificates

注意:内部开发,只能是用Develpment,producation是测试完了,准备发布到appstore的时候再弄的。

其中按照Develop 流程的介绍,会创建一个CSR文件(production版本也可以公用这个CSR文件),通过 钥匙串(通用菜单里的某个应用)创建,详情见官方喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Q2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdC5jZXJ0U2lnbmluZ1JlcXVlc3SjrNXiuPbKx9fu1tXJ+rL6s/a1xM7EvP48YnI+CjwvcD4KPHA+My60tL2oY2VydCDOxLz+oaO4+b7dtdq2/rK9o6y74bXDtb3Su7j2Y2VydM7EvP6jrGNlcnTOxLz+t9YgZGV2us1wcm+w5rG+oaPXotLiztLDx9PDZGV2suLK1KOscHJvyse3orK8PC9wPgo8cD40LrW8yOtjZXJ0IM7EvP7I6yDUv7PXtK48L3A+CjxwPjxpbWcgc3JjPQ=="http://www.Bkjia.com/uploadfile/Collfiles/20131211/2013121109360487.jpg" alt="\">

5.制作 SSL和 私钥 的 PEM格式文件(php服务端需要)

a。分别制作SSL(cert文件)和 key(私钥)的p12格式文件,通过导出获得。(注意命名)

\

b.通过终端shell 输入命令,得到SSL 和 key 的 2个PEM 格式的文件,并且将它们合二为一

\


命令参数如下:


原文地址:点击打开链接http://blog.csdn.net/tuxiangqi/article/details/17245553

cd 存放文件夹的路径

openssl pkcs12 -clcerts -nokeys -out 输出文件名.pem -in 原文件的名字例如SSL(Cert文件).p12 (将SSLcert文件从p12变为pem)

openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12 (将key.p12 文件变为 pem,这里会提示一定要设置 私钥的解压密码,至少4位,你输入即可)

openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem (这个命令是将私钥刚才设置的 至少4位密码 去除,如果你想保留也可以,但是需要和php服务端的同事说明下)

cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem (这个命令是将 SSL 和私钥 编译为一个文件pem 命名可以自己改)

下面是从网上找到的其他资源,关于php服务器的设置


<?php          
$_POST['token'] = "fe28006a9d57b0727514cf42e9549446f0d4fc509cdexxxxxxxxxx";
	    $deviceToken = $_POST['token']; //取得设备的Token,获取方法便见下文	   
	    $body = array("aps" => 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', <pre name="code" class="html">"/data/web/cert/".$pem);
<pre name="code" class="html"><pre name="code" class="html">	    //如果你的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("Failed to connect $err $errstrn");        
            return;        
        }        
        print_r("Connection OK\n");        
        $payload = json_encode($body);        
        $msg = chr(0).pack("n", 32).pack('H*', str_replace(' ', '', $deviceToken)).pack("n",strlen($payload)).$payload;               
        print_r("sending message :".$payload."\n");        
        fwrite($fp, $msg);        
        fclose($fp);

?>

差不多这里弄好了,你就可以 按照其他 的服务器 教程去弄了。。。网上很多。

当然,你的

关于 和php 服务器交互这块,到这里就结束了


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/621632.htmlTechArticle今天终于完完全全的搞明白了,APNs 推送前,客户端的准备工作需要那一些。如果有错误的地方,欢迎大神指出来。 准备工作: 原文地址:...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.