傻瓜的 APNS 反馈和 PHP
Posted
技术标签:
【中文标题】傻瓜的 APNS 反馈和 PHP【英文标题】:APNS Feedback and PHP for a dummie 【发布时间】:2014-01-17 10:41:04 【问题描述】:我的上一个应用程序获得了很多用户(> 200 000),我已经设置了自己的推送解决方案。
尽管如此,当我想同时推送所有用户时,我遇到了新问题。
打开 ssl 连接后,我使用所有令牌创建一个循环,并使用令牌是否有效(isDigit 和长度 > 64)但我理解的是,其中一个令牌对于我的 apns .pem apns 不再有效将停止循环。我知道我需要调用反馈服务来获取我的无效令牌,但我首先推送我的用户,apns 将停止我的循环,我无法获得任何反馈服务!
我设置了一个简单的 php 脚本来获取反馈:
<?php
$stream_context = stream_context_create();
stream_context_set_option($stream_context, 'ssl', 'local_cert', 'myApns.pem');
$apns = stream_socket_client('ssl://feedback.push.apple.com:2196',
$errcode, $errstr, 60, STREAM_CLIENT_CONNECT, $stream_context);
if(!$apns)
echo "ERROR $errcode: $errstr\n";
return;
$feedback_tokens = array();
//and read the data on the connection:
while(!feof($apns))
$data = fread($apns, 38);
if(strlen($data))
$feedback_tokens[] = unpack("N1timestamp/n1length/H*devtoken", $data);
fclose($apns);
print_r($feedback_tokens);
echo("done");
?>
但它总是给我打印一个空数组 (Array())。 php中是否有任何解决方案,所以我将我的令牌发送到验证令牌是否有效的apns?
【问题讨论】:
您是在 AdHoc 模式还是开发者模式下尝试这个? Check this,它说它只适用于 AdHoc/Live 模式 我处于生产模式,谢谢。 【参考方案1】:在循环调用之前限制空值。
试试这些代码
$passphrase = PASSWORD;
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'MyApns.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);
$body['aps'] = array('alert' => $msg,'sound' => 'default');
$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;
//echo 'Message not delivered' . PHP_EOL;
else
return true;
//echo 'Message successfully delivered' . PHP_EOL;
fclose($fp);
【讨论】:
谢谢你,但它没有给我反馈,你的代码简单地推送一个用户,即使它无效(用户删除应用程序),apns 也会写入令牌,但如果一个无效它不会处理下一个令牌。但非常感谢。以上是关于傻瓜的 APNS 反馈和 PHP的主要内容,如果未能解决你的问题,请参考以下文章