Ios6 发送推送通知时如何从APN获取反馈
现在我可以从已经安装了pass的设备发送推送令牌,但我不知道在这一点上反馈是如何工作的。apple推送通知服务(APNs)从apple文档中向服务器提供反馈,告知pushToken是否有效。如何获得这种反馈?我尝试了这段代码,但是有很多错误。这是代码:Ios6 发送推送通知时如何从APN获取反馈,ios6,push-notification,push,feedback,passbook,Ios6,Push Notification,Push,Feedback,Passbook,现在我可以从已经安装了pass的设备发送推送令牌,但我不知道在这一点上反馈是如何工作的。apple推送通知服务(APNs)从apple文档中向服务器提供反馈,告知pushToken是否有效。如何获得这种反馈?我尝试了这段代码,但是有很多错误。这是代码: <?php $cert = '/Applications/MAMP/htdocs/passesWebserver/certificates.pem'; $ctx = stream_context_create(); stream_conte
<?php
$cert = '/Applications/MAMP/htdocs/passesWebserver/certificates.pem';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $cert);
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
$fp = stream_socket_client('ssl://feedback.sandbox.push.apple.com:2196', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $ctx);
// production server is ssl://feedback.push.apple.com:2196
if (!$fp) {
error_log("Failed to connect feedback server: $err $errstr",0);
return;
}
else {
error_log("Connection to feedback server OK",0);
}
error_log("APNS feedback results",0);
while ($devcon = fread($fp, 38))
{
$arr = unpack("H*", $devcon);
$rawhex = trim(implode("", $arr));
$feedbackTime = hexdec(substr($rawhex, 0, 8));
$feedbackDate = date('Y-m-d H:i', $feedbackTime);
$feedbackLen = hexdec(substr($rawhex, 8, 4));
$feedbackDeviceToken = substr($rawhex, 12, 64);
error_log ("TIMESTAMP:" . $feedbackDate, 0);
error_log ( "DEVICE ID:" . $feedbackDeviceToken,0);
}
fclose($fp);
?>
这应该行得通。您不需要在每次推送请求时都运行此功能。根据更新频率和设备数量,可以设置每日或每周的cron作业
$cert_file = '/path/to/combined/cert.pem';
$cert_pw = 'top secret';
$stream_context = stream_context_create();
stream_context_set_option($stream_context, 'ssl', 'local_cert', $cert_file);
if (strlen($cert_pw))
stream_context_set_option($stream_context, 'ssl', 'passphrase', $cert_pw);
$apns_connection = stream_socket_client('feedback.push.apple.com:2196', $error_code, $error_message, 60, STREAM_CLIENT_CONNECT, $stream_context);
if($apns_connection === false) {
apns_close_connection($apns_connection);
error_log ("APNS Feedback Request Error: $error_code - $error_message", 0);
}
$feedback_tokens = array();
while(!feof($apns_connection)) {
$data = fread($apns_connection, 38);
if(strlen($data)) {
$feedback_tokens[] = unpack("N1timestamp/n1length/H*devtoken", $data);
}
}
fclose($apns_connection);
if (count($feedback_tokens))
foreach ($feedback_tokens as $k => $token) {
// code to delete record from database
}
如果我已经很好地理解了,请确保您编写的代码返回一个不再有效的令牌数组,对吗?然后我的工作就是从mysql中删除。。。