代码之家  ›  专栏  ›  技术社区  ›  David Beck

iPhone推送通知(PHP)未发送

  •  0
  • David Beck  · 技术社区  · 15 年前

    我设置了一个PHP脚本来使用 this tutorial

    2 回复  |  直到 15 年前
        1
  •  7
  •   vishal soni    9 年前

    如果您使用的是开发人员pem文件,则必须使用“网关.sandbox.push.苹果网:2195“如果使用分发程序panm文件,则必须使用”网关.push.apple.通讯:2195"

    public function pushtoios($devicetoken, $message, $params = array()) {
        $passphrase = 'apple';
        $ctx = stream_context_create();
    /*Development pam file*/
        //stream_context_set_option($ctx, 'ssl', 'local_cert',  your path.'apns-dev.pem');
    /*Distributer pam file*/
        stream_context_set_option($ctx, 'ssl', 'local_cert', your path.'apns-distr.pem');
        stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    
    /*For Development pam file*/
        //$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
    
    /*For Distributer pam file*/
        $fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
        if (!$fp)
            exit("Failed to connect amarnew: $err $errstr" . PHP_EOL);
    
        $body['aps'] = array(
            'alert' => $message,
            'sound' => 'default'
        );
        $body['type'] = $params['type'];
        $body['params'] = $params;
        $payload = json_encode($body);
        $msg = chr(0) . pack('n', 32) . pack('H*', $devicetoken) . pack('n', strlen($payload)) . $payload;
    
        $result = fwrite($fp, $msg, strlen($msg));
        if (!$result) {
            return false;
        } else {
            return true;
        }
        fclose($fp);
    }
    
        2
  •  0
  •   Khomsan    14 年前

    我也有同样的问题,但现在通过编辑我忽略的这一行来解决。。。

    $output = json_encode($payload);

    $payload = json_encode($payload);

    我还为本地证书添加了ssl密码,因为我的pem文件有密码。

    下面是最后的代码,工作。。。请用您自己的信息替换您的_token_hex_字符串和您的密钥片语。

    $device = 'your_token_hex_string';
    $payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');
    $payload = json_encode($payload);
    
    $options = array('ssl' => array(
      'local_cert' => 'apns_dev.pem',
      'passphrase' => 'your_passphrase'
    ));
    
    $streamContext = stream_context_create();
    stream_context_set_option($streamContext, $options);
    $apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
    
    $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload;
    fwrite($apns, $apnsMessage);
    fclose($apns);