【问题标题】:How get feedback from APNs when sending push notification发送推送通知时如何从 APN 获取反馈
【发布时间】:2013-04-03 08:18:50
【问题描述】:

现在我可以从已经安装通行证的设备发送推送令牌,但我不知道此时反馈是如何工作的。从苹果文档中,苹果推送通知服务 (APNs) 向服务器提供反馈,以判断 pushToken 是否有效。如何获得此反馈?我尝试了这段代码,但有很多错误。这是代码:

<?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);
?>

【问题讨论】:

    标签: ios6 push-notification push feedback passbook


    【解决方案1】:

    这应该可行。您不需要对每个推送请求都运行它。根据您更新的频率和设备数量,您可以设置每日或每周的 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中删除...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2016-09-21
    • 2014-04-23
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多