用php做ios http2推送服务遇到的坑

关键词:

苹果推送刚刚升级不久, 我在网上查到的所有资料, 都是老版本的, 支持Json Web Token, p8文件的没找到

我使用的是https://github.com/ZhukV/AppleApnPush这个库,很好用,可以直接支持

只要确认php curl支持http2就可以直接使用这个库了, 否则会遇到各种莫名其妙的错误


我遇到的坑主要是php环境方面的, , 以Cent OS为例


确认php直接运行

php --ri curl

如果看到

HTTP2 => Yes

恭喜.

如果没有找到HTTP2,或者是NO,那么都是不支持http2的,那么接下来就只有重新安装php,或者是curl这个扩展了


确认你系统的curl是否支持http2的发送请求,因为php要用到,我用的Cent OS 6的系统默认curl是不支持发送http2请求的

运行curl --version查看

如果看到了有类似这样的nghttp2/1.24.0,应该就是支持http2了


也可以

curl -I https://nghttp2.org , 注意是参数是大写的i

看看是否支持http2


如果不支持http2,请升级curl后重新安装php


如果系统的curl支持http2, 而php不支持,那就是看你的系统中是否安装了多个curl,而php安装curl指定的路径是不支持的那一个



if (!defined('CURL_HTTP_VERSION_2_0')) {
    define('CURL_HTTP_VERSION_2_0', 3);//好像php 7.0.7才定义了这个
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);

代码中加入以上, 这样就可以发送http2的请求了


最后的大坑

如果所有配置都正确,curl -I https://nghttp2.org时也是显示的http2的请求,但是curl -I https://api.development.push.apple.com还是显示为http 1.x请求时,请升级你的openssl, 我升级成libressl最版本之后就正常了,最后再重新安装你的php环境.安装时最好指定你的curl和openssl的安装路径



作者:紫霞狼

原文地址: http://seme.me/article/19

版权归属: 紫霞狼   转载时请以链接形式注明出处