使用计划任务的 PHP 服务器脚本的 Ios 推送通知

Posted

技术标签:

【中文标题】使用计划任务的 PHP 服务器脚本的 Ios 推送通知【英文标题】:Ios push notification with PHP server Script using schedule task 【发布时间】:2012-12-15 07:32:29 【问题描述】:

我正在为苹果设备实现推送通知服务。使用 php 脚本,只有当 php 脚本从浏览器命中时,它才会推送通知。当我通过浏览器点击服务器 php 脚本时,它会将通知推送到 Apple 设备。我的 php 脚本是...

//在苹果设备中发送通知的方法结束

function sendNotificationToAppleDevice($token,$message)
    
    /////////////////////////////////////////////For apple divice////////////////////////////////

$passphrase='1234';
// Create a stream to the server
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', 'sample.pem');
stream_context_set_option($streamContext, 'ssl', 'passphrase', $passphrase);

$apns = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $error,$errorString,60,STREAM_CLIENT_CONNECT, $streamContext);

// You can access the errors using the variables $error and $errorString


// Now we need to create JSON which can be sent to APNS
        $inc=0;                  
$load = array(
'aps' => array(
'alert' => $message,
'badge' =>$inc,
)
);
$inc++;
$payload = json_encode($load);
// The payload needs to be packed before it can be sent
$apnsMessage = chr(0) . chr(0) . chr(32);
$apnsMessage .= pack('H*', str_replace(' ', '', $token));
$apnsMessage .= chr(0) . chr(strlen($payload)) . $payload;

// Write the payload to the APNS

fwrite($apns, $apnsMessage);

echo "just wrote " . $payload;

// Close the connection

fclose($apns);
    

当该脚本被浏览器点击时,该脚本运行良好并成功发送通知。

现在,当我从计划任务的 cron 作业运行此脚本时,它不会向设备发送任何通知。它导致......

警告:stream_socket_client():SSL 操作失败,代码为 1。 OpenSSL 错误消息:错误:14094410:SSL 例程:SSL3_READ_BYTES:sslv3 警告 sample.php 中的握手失败

警告:stream_socket_client():无法启用加密 sample.php上线

警告:stream_socket_client():无法连接到 ssl://gateway.sandbox.push .apple.com:2195(未知错误)在 sample.php上线

警告:fwrite() 期望参数 1 是资源,布尔值在 sample.php上线

警告:fclose() 期望参数 1 是资源,布尔值在 sample.php上线

这个功能和错误有什么问题..请任何人帮助我...

提前致谢。

【问题讨论】:

你确定你提供了正确的参数来运行吗?也许您还应该检查您的 sample.php 的权限 【参考方案1】:

经过大量研究,我终于找到了漏洞在哪里..

您只需更改一行即可将此方法与 cron 作业一起使用..:-)

改变这一行

stream_context_set_option($streamContext, 'ssl', 'local_cert', 'sample.pem');

stream_context_set_option($streamContext, 'ssl', 'local_cert', 'your FULL path of pem file');

对于我使用的情况

stream_context_set_option($streamContext, 'ssl', 'local_cert', 'C:\Websites\games\project_name\sample.pem');

仅此而已...希望您的问题现在可以解决..

【讨论】:

太棒了!非常感谢!

以上是关于使用计划任务的 PHP 服务器脚本的 Ios 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Windows 计划任务运行 PHP 脚本?

windows 建立任务执行计划 自动执行脚本

苹果iOS推送通知的PHP脚本错误

Windows 任务计划程序执行PHP脚本

Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行

使用 PHP 和 Windows 任务计划程序在退出时重试(1)