[英]Iphone Push Notification Wrong Device Token
最后,我找出了與生產令牌混合的沙箱令牌,並更新了代碼,從蘋果那里收到了錯誤響應,當將沙箱令牌發布到蘋果時,下一個令牌都失敗了。味精是“ $ payload ['aps'] = array('content-available'=> 1);”,蘋果會推送味精,但是當我發現錯誤的消息時,設備將不會顯示該味精,將其刪除,然后重新測試。
蘋果推送通知服務存在一個有趣的問題:當我為設備生成發布通知並發送到蘋果服務器時,我的設備會在一段時間內收到該通知。 但是,如果我先通過錯誤的設備令牌發布通知,然后將正確的通知發布到我的設備,我的設備將無響應,就像推送通知被蘋果吃掉了一樣嗎?
這怎么了
我使用php代碼進行推送服務,這是最重要的部分:
$payload['aps'] = array('content-available' => 1);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
foreach ($line as $deviceToken) {
break;
}
print_r($deviceToken);
$apnsMessage = chr(1) . $time . $time . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
$ret = fwrite($apns, $apnsMessage);
if ($ret !== strlen($apnsMessage)) {
echo "push error";
}
ob_flush();
flush();
$read = array($apns);
$null = null;
$changedStreams = stream_select($read, $null, $null, 0, 100000);//wait for 0.1s
if ($changedStreams === false) {
echo "Error: Unabled to wait for a stream availability";
} elseif ($changedStreams > 0) {
print "can't receive any notification behind this token";
$responseBinary = fread($apns, 6);
if ($responseBinary !== false || strlen($responseBinary) == 6) {
$response = unpack('Ccommand/Cstatus_code/Nidentifier', $responseBinary);
print_r($response);
}
} else {
//update the success push status in database
}
print "<br>";
}
我不知道這是怎么回事,並且我還在另一個PHP中添加了反饋服務,並且沒有從Apple獲得任何錯誤的令牌,因為我的數據庫中有許多devicetoken,所以我找不到其中哪一個是錯誤的。
有人幫助我,請原諒我可憐的英語
假設您的$apns
是通過這種方式實現的
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2,STREAM_CLIENT_CONNECT, $streamContext);
您應該檢查$ errorString以找出錯誤。
或嘗試關閉每個消息的套接字,看看是否有任何區別
fwrite($apns, $apnsMessage);
socket_close($apns);
fclose($apns);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.