PHP IOS推送通知(权限被拒绝)

时间:2012-04-04 15:57:47

标签: php ios apple-push-notifications

我自昨晚以来一直在寻找答案,但似乎找不到任何有同样问题的人。相似但不是。我正在尝试通过stream_socket_client连接到Apples APNS。我在LAMP环境中工作,并打开端口2195。我的errorString说(权限被拒绝)。我的麻烦在于找到那些已经发布了很多关于这个错误的人。我从错误报告中得到的警告是警告:stream_socket_client():无法连接到ssl://gateway.sandbox.push.apple.com:2195(权限被拒绝)

至于好东西。我写了一个类来处理这个推送通知。这是设置连接的未解决方法。

 public function setConnection() {

        $apnsHost = 'gateway.sandbox.push.apple.com';
        $apnsPort = 2195;
        $apnsCert = '../model/apns-dev.pem';

        $streamContext = stream_context_create();
        stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
        stream_context_set_option($streamContext, 'ssl', 'passphrase', "********");
        stream_context_set_option($streamContext, 'ssl', 'verify_peer', true);

        $apns = stream_socket_client('ssl://'.$apnsHost.':'. $apnsPort, $error, $errorString, 20, STREAM_CLIENT_CONNECT , $streamContext);

    }

对我来说,这看起来很正确,但显然,这是不对的。

2 个答案:

答案 0 :(得分:3)

它是SELinux Conf

问题原来是Fedora 12默认启用的@Path("/test") public class Test { private static ArrayList<LatLong> latLongList = new ArrayList<>(); @POST @Consumes(MediaType.APPLICATION_JSON) public Response storeData(Data data) { String macD = data.getMac(); int routeD = data.getRoute(); float latD = data.getLatitude(); float longD = data.getLongitude(); // Add the lat and Long to the ArrayList. latLongList.add(new LatLong(latD, longD)); int size = latLongList.size(); if (size > 1) { for (int i = 0; i < latLongList.size(); i++) { double distance = haversineDistance(latLongList.get(i), latLongList.get(latLongList.size() - 1)); if (distance > 4) { processData(macD, routeD, latD, longD); } else { return null; } } } else { processData(macD, routeD, latD, longD); } return Response.status(201).build(); } private void processData(String macD, int routeD, float latD, float longD) { Database db = new Database(); db.insertData(macD, routeD, latD, longD); } private double haversineDistance(ArrayList<LatLong> x, ArrayList<LatLong> y) { return 0; } } SELinux设置。

在shell控制台中,以root身份运行:

httpd_can_network_connect

参考:http://www.rkrishardy.com/2009/12/permission-denied-13-when-opening-socket-in-php-apache/

答案 1 :(得分:0)

以下教程中的simplepush.php代码对我来说效果很好。 http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);