无法使用php向ios发送推送通知

时间:2015-11-23 09:40:28

标签: php ios yii push-notification apple-push-notifications

我正在尝试使用php和Yii框架向IOS发送推送通知。我创建了一个如下函数来获取数据并发送通知。 $ data是一个数组,其中包含一条消息和一个数组,用于保存注册ID(设备令牌)。我在我的localhost上运行它,但通知没有发送到我的设备。顺便说一句,我的函数的输出是一个整数值,我无法识别消息是否已发送或是什么!?

我的代码有什么问题吗?

private function _pushIOS($data)
{
    // Create a connection
    $apnsHost = $this->_notificationUrl;
    $apnsPort = 2195;
    $apnsCert = Yii::app()->controller->createUrl('/').'/my_certificate_dev.pem';

    $streamContext = stream_context_create();
    stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
    $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);


    if (!$apns)
        exit("Failed to connect: $error $errorString" . PHP_EOL);


    foreach($data['registration_ids'] as $deviceToken) {
        $body = array();
        $body['aps'] = array(
            'alert' => $data['data']['message'],
            'badge' => 1,
            'sound' => 'default'
        );

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

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

        // Send it to the server
        $result = fwrite($apns, $apnsMessage, strlen($apnsMessage));
    }

    // Close the socket and connection to the server
    @socket_close($apns);
    fclose($apns);
    return json_decode($result);
}

1 个答案:

答案 0 :(得分:0)

最后,我得到了答案。问题出在pem文件路径上。绝对路径必须传递给函数才能工作。应替换以下行:

if(!isset($_SESSION['cart']))
    $_SESSION['cart'] = array();//Declaration of the cart
$_SESSION['cart'][] = $result;//To add the result in cart

正确路径:

$apnsCert = Yii::app()->controller->createUrl('/').'/my_certificate_dev.pem';