簡體   English   中英

Iphone推送通知設備令牌錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM