2012-02-07 82 views
1

最後,我發現了沙箱標記,它與生產標記混合在一起,我更新代碼,接收來自蘋果的錯誤響應,將沙箱標記發佈到蘋果時,下一個令牌都失敗了......雖然推消息是「$ payload ['aps'] = array('content-available'=> 1);」,蘋果會推送消息,但設備不會顯示此消息,當我找到錯誤的,我刪除它,並重新測試。Iphone推送通知錯誤的設備令牌

有蘋果推送通知服務的一個有趣的問題: 當我爲我的設備後通知發送到蘋果的服務器,有一陣子,我的設備將收到通知。 但是,如果我第一次發佈錯誤devicetoken的通知,然後將正確的通知發佈到我的設備,我的設備將無響應,就像推送通知被蘋果吃掉一樣?

這有什麼問題?

我使用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添加反饋服務,並獲得無錯令牌來自蘋果,因爲我的數據庫中有很多devicetoken,所以我找不到哪一個是錯誤的。

有人幫助我,原諒我的英語不好

+0

是「錯誤deviceToken」有一個正確的格式?蘋果如何「長期」「禁止」你? (幾個通知或1分鐘?) – 2012-02-07 03:29:06

+0

錯誤devicetoken是我測試應用程序時的沙箱令牌,當我向沙箱發送沙箱令牌時,下一個令牌全部失敗。 – carl 2012-02-07 09:11:38

+0

如果以下所有令牌都失敗了,那麼如何獲得「unbanned」?以便您可以再次向Apple發送令牌(錯誤或正確)? – 2012-02-08 04:55:29

回答

0

假設你$apns以這種方式

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2,STREAM_CLIENT_CONNECT, $streamContext); 

你應該檢查$ Errorstring,則找出錯誤來實現。

或試圖關閉套接字每封郵件,看看是否有任何區別

fwrite($apns, $apnsMessage); 
socket_close($apns); 
fclose($apns); 
+0

我也有這些,我只是發佈我的代碼部分。連接和其他都可以 – carl 2012-02-09 09:58:53