Heim >php教程 >php手册 >IOS php 服务器 客户端 准备工作

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

WBOY
WBOYOriginal
2016-06-13 10:19:121020Durchsuche

今天终于完完全全的搞明白了,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 服务器交互这块,到这里就结束了


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn