Symfony2和APNS iOS

时间:2013-10-02 18:57:34

标签: ios symfony apple-push-notifications

嗨朋友开发者,

我在Symfony2中开发了一个Web应用程序,它包含一个API,用于与iOS上的某个移动应用程序进行交互。为简单起见,我的Web应用程序通过移动应用程序上的APNS服务Apple发送每日推送通知。 为此,我使用以下函数:

<?php 

function sendNotification($message, $numBadge, $deviceTokenList)
{
    $body = array();
        $body['aps'] = array();
        $body['aps']['alert'] = $message;
        $body['aps']['badge'] = $numBadge;
        $body['aps']['sound'] = "default";
        $payload = json_encode($body);

        // Device token
        $deviceToken = "";

        // Create SSL context
        $ctx = stream_context_create();

        // Opening PEM file
        $pathCk = $this->kernel->locateResource('@MyBundle/Notifications/ck.pem');
        stream_context_set_option($ctx, 'ssl', 'local_cert', $pathCk);

        // Opening connection with apple servers
        $fp = stream_socket_client('ssl://gateway.push.apple.com:2195',
        $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

        if(!$fp) {
            print "Connection error: $err $errstr\n";
        }
        else {
            print "Connection OK\n";
        }

        // For each device registered
        foreach($deviceTokenList as $deviceToken)
        {
            // Construction des données à envoyer
            $msg = chr(0) . pack('n', 32)
            . pack('H*', str_replace(' ', '', $deviceToken))
            . pack('n', strlen($payload)) . $payload;

            print "Message: " . $payload . "\n";

            // Sending data
            $result = fwrite($fp, $msg, strlen($msg));

            if (!$result){
            echo '<p>The message has not been sent '. PHP_EOL;

            }
            else{
            echo '<p>The message has been sent ' . PHP_EOL;

            }
        }

        // Close connection
        fclose($fp);
}

?>

此功能在没有Symfony2的情况下工作,因为在此框架下迁移之前,通知系统已集成到另一个Web应用程序中。 为了使它在Symfony2中工作,我添加了一行:

<?php
        $pathCk = $this->kernel->locateResource('@MonBundle/Notifications/ck.pem');
?>

并替换此行:

<?php
    stream_context_set_option($ctx, 'ssl', 'local_cert', './ck.pem');
?>

通过以下内容:

<?php
    stream_context_set_option($ctx, 'ssl', 'local_cert', $pathCk);
?>

所以,问题在于打开并将证书ck.pem传输到Apple Service:要么是错误打开还是不打开。

我希望你明白,你可以帮助我。 非常感谢。

0 个答案:

没有答案