php从苹果apns的feedback服务器获取推送失败的token
注意事项: 1.建议和feedback服务器建立长连接,连接过于频繁有可能被当做攻击(简简单单的做一些测试时没有关系的); 2.获取的token是在上次你给你的应用发推送失败时加feedback服务的,里面会返回失败的具体时间 3.返回的数据由三部分组成,请看下面的图 结
注意事项:
1.建议和feedback服务器建立长连接,连接过于频繁有可能被当做攻击(简简单单的做一些测试时没有关系的);
2.获取的token是在上次你给你的应用发推送失败时加feedback服务的,里面会返回失败的具体时间
3.返回的数据由三部分组成,请看下面的图
结构中包含三个部分,第一部分是一个上次发推送失败的时间戳,第二个部分是device_token的长度,第三部分就是失效的device_token
下面是我的代码:
<?php /** * @desc 连接苹果的推送服务器 * @return bool|resource */ function connect_feedback(){ $passphrase = 'cheshi123'; $cert_file = 'cheshi_productionck.pem';//推送的证书地址,环境不要错了 $feedback_server = 'ssl://feedback.push.apple.com:2196';//feedback服务器地址 //沙盒环境地址是 ssl://feedback.sandbox.push.apple.com:2196 $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $cert_file); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client($feedback_server, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $ctx); if(!$fp){ print "Failed to connect feedback server: $error $errorString\n"; return false; }else{ print "Connection to feedback server OK\n"; } return $fp; } /** * @desc 连接本地的redis,用来存储获取到的token,也可以用其他方式存储 * @param $redis_server * * @return bool|Redis */ function connect_redis($redis_server){ $param = parse_url($redis_server); $redis = new Redis(); if($redis->connect($param['host'],$param['port'])){ print "connect redis OK"; }else{ print "failed to connect redis server"; return false; } return $redis; } /** * @desc 执行推送操作的主要代码 */ function feedback(){ $count1 = 0; $run_times = 0; $redis_server = "tcp://localhost:6379"; $iostokenremoved= 'iostokenremoved'; $iostokenremoved_num = 'iostokenremoved_num'; $fp = connect_feedback(); $redis = connect_redis($redis_server); //苹果建议provider和feedback服务维持一个长连接,如果频繁的建立连接可能会被当做攻击处理 $devcon =''; while($run_timesping()==='+PONG'){ print date('Ymd His').'|redis server disconnected'; @$redis->close(); unset($redis); $redis = connect_redis($redis_server); } //每次读取38个字段,这是保存的一个完整token 信息的长度 while ($devcon = fread($fp, 38)){ $count1 ++ ; $arr = unpack("H*", $devcon);//解包传过来的二进制数据 $rawhex = trim(implode("", $arr)); $feedbackTime = hexdec(substr($rawhex, 0, 8)); $feedbackDate = date('Y-m-d H:i:s', $feedbackTime); $feedbackDeviceToken = substr($rawhex, 12, 64); //记录被删除的token $redis->hSet($iostokenremoved,$feedbackDeviceToken,$feedbackDate); //记录每天的卸载数量 $redis->hIncrBy($iostokenremoved_num,date('Y-m-d',$feedbackTime),1); } echo 'FeedBack:'. $count1 . PHP_EOL; usleep(10000000);//sleep 10秒 } $redis->close(); fclose($fp); } //可以通过命令行来执行这个脚本 php -f feedback.php feedback if(isset($argc[1]) && function_exists($argv[1])){ $argv[1](); }else{ die('invalid input'); }
原文地址:php从苹果apns的feedback服务器获取推送失败的token, 感谢原作者分享。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

Gate.io官方APP可以通過以下方式下載:1. 訪問官方網站gate.io下載;2. 在App Store或Google Play搜索"Gate.io"下載。務必通過官方渠道下載以確保安全。
