【问题标题】:Where should I put .pem files in codeigniter to send Apple push notifications?我应该在哪里将 .pem 文件放在 codeigniter 中以发送 Apple 推送通知?
【发布时间】:2013-10-24 17:24:42
【问题描述】:

我正在使用 REST_controller 库在 CodeIgniter 中开发 Web 服务。它只是一个管理请求的控制器,我对我使用的每种方法都有一个请求。其中一种方法是我试图用它来发送苹果通知,所以我需要使用 ck.pem 文件(它是一个证书)。我知道问题是我没有 .pem 文件的好路径。

这是我正在使用的代码。我在控制器文件夹中有 ck.pem 文件,但它不起作用。

function pushtest_get(){
        $data = array();
    // Put your device token here (without spaces):
        $deviceToken = 'be67171fb22f3ea8fa68c13a9f2ba7229caf3a487aa656b20f769fa2b1fa5b7a';
     // Put your private key's passphrase here:
        $passphrase = 'miguel';
        $message = 'Notification de prueba desde servicio web rest';
    ////////////////////////////////////////////////////////////////////////////////
        $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);

        if (!$fp)
            exit("Failed to connect: $err $errstr" . PHP_EOL);

        $data['response'] = 'Connected to APNS' . PHP_EOL;

    // Create the payload body
        $body['aps'] = array(
            'alert' => $message,
            'sound' => 'default'
            );

    // Encode the payload as JSON
        $payload = json_encode($body);

    // Build the binary notification
        $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

    // Send it to the server
        $result = fwrite($fp, $msg, strlen($msg));

        if (!$result)
           $data['response'] = 'Message not delivered' . PHP_EOL;
        else
            $data['response'] = 'Message successfully delivered' . PHP_EOL;

    // Close the connection to the server
        fclose($fp);
        $response->skills = $data;
        $this->response($response, 200);
    } 

【问题讨论】:

    标签: php ios codeigniter path apple-push-notifications


    【解决方案1】:

    您的问题可能已经解决了一个多星期了,但是我想分享一下,因为我今天遇到了同样的问题。

    对于 CodeIgniter 项目,您可以保持 ck.pem 文件与 application/ 目录并行,然后下面的代码将按原样运行。

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

    【讨论】:

      【解决方案2】:

      您可能应该在项目根目录中的文件夹中说:certs

      /certs/ck.pem
      

      然后:

      stream_context_set_option($ctx, 'ssl', 'local_cert', './certs/ck.pem');
      

      【讨论】:

        【解决方案3】:

        你可以把它放在你想要的任何地方(只要网络服务器具有读取权限),只需使用文件的完整路径:

        stream_context_set_option($ctx, 'ssl', 'local_cert', '/var/certs/ck.pem');
        

        stream_context_set_option($ctx, 'ssl', 'local_cert', '/var/www/codeigniter/application/controllers/ck.pem');
        

        不过,我不会将它保存在控制器文件夹中。对于可能从事该项目的其他人来说,这会让人感到困惑,并且可能会让您将来很难找到。

        我会在某处创建一个证书目录并将其存储在那里。

        【讨论】:

          【解决方案4】:

          pem 文件在哪里并不重要。但好的做法是将它放在根目录中。

          检查沙盒环境是否正确,例如开发端口是 2195,生产端口是 2196。

          还要检查您为开发和生产生成的正确 pem 文件,并确保您传递了正确的密码短语值。

          希望对你有帮助:)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-29
            • 1970-01-01
            • 2014-02-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多