2016-11-21 152 views
0

Hello Guys, 這是我的Apns.php文件。在apns.php中獲取失敗的設備令牌

 <?php 
     //error_reporting(E_ALL); 
     # -*- coding: utf-8 -*- 
     ## 
     ##  Copyright (c) 2010 Benjamin Ortuzar Seconde <[email protected]> 
     ## 
     ##  This file is part of APNS. 
     ## 
     ##  APNS is free software: you can redistribute it and/or modify 
     ##  it under the terms of the GNU Lesser General Public License as 
     ##  published by the Free Software Foundation, either version 3 of 
     ##  the License, or (at your option) any later version. 
     ## 
     ##  APNS is distributed in the hope that it will be useful, 
     ##  but WITHOUT ANY WARRANTY; without even the implied warranty of 
     ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     ##  GNU General Public License for more details. 
     ## 
     ##  You should have received a copy of the GNU General Public License 
     ##  along with APNS. If not, see <http://www.gnu.org/licenses/>. 
     ## 
     ## 
     ## $Id: Apns.php 168 2010-08-28 01:24:04Z Benjamin Ortuzar Seconde $ 
     ## 

     /** 
     * Apple Push Notification Server 
     */ 
     class Apns 
     { 
      protected $server; 
      protected $keyCertFilePath; 
      protected $passphrase; 
      protected $stream; 


       /** 
       * Connects to the APNS server with a certificate and a passphrase 
       * 
       * @param <string> $server 
       * @param <string> $keyCertFilePath 
       * @param <string> $passphrase 
       */ 
      function __construct($server, $keyCertFilePath ,$passphrase){ 

       $this->server = $server; 
       $this->keyCertFilePath = $keyCertFilePath; 
       $this->passphrase = $passphrase; 
       $this->connect(); 
      } 


      /** 
       * Connects to the server with the certificate and passphrase 
       * 
       * @return <void> 
       */ 
      private function connect(){ 

       $ctx = stream_context_create(); 
       stream_context_set_option($ctx, 'ssl', 'local_cert', $this->keyCertFilePath); 
       // assume the private key passphase was removed. 
       stream_context_set_option($ctx, 'ssl', 'passphrase', $this->passphrase); 
       $this->stream = stream_socket_client($this->server, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 
       if (!$this->stream) { 
        throw new Exception("<br/>Failed to connect $err $errstr"); 
       } 
       else { 
        //print "<br/>Opening connection to: {$this->server}"; 
       } 
      } 
       /** 
       * Sends a message to device 
       * 
       * @param <string> $deviceToken 
       * @param <string> $message 
       * @param <int> $badge 
       * @param <string> $sound 
       */ 
       public function sendMessage($deviceToken, $message, $badge = NULL, $sound = NULL,$uid=NULL,$type=NULL,$sid=NULL,$io=NULL){ 

        //generate the payload 
        $payload = $this->generatePayload($message, $badge, $sound,$uid,$type,$sid,$io); 
        //send payload to the device. 
        $this->sendPayload($deviceToken, $payload); 
       } 
       /* 
       * 
       * Generates the payload 
       * 
       * @param <string> $message 
       * @param <int> $badge 
       * @param <string> $sound 
       * @return <string> 
       */ 
       protected function generatePayload($message, $badge = NULL, $sound = NULL,$uid=NULL,$type=NULL,$sid=NULL,$io=NULL) { 
        $body = array(); 
        //message 
        $body['aps'] = array('alert' => $message); 
        //badge 
        if ($badge) { 
         $body['aps']['badge'] = $badge; 
        } 
        //sound 
        if ($sound) { 
         $body['aps']['sound']=$sound; 
        } 
        if ($uid) { 
         $body['aps']['uid'] = $uid; 
        } 
        if ($type) { 
         $body['aps']['type'] = $type; 
        } 
        if ($sid!=NULL) { 
         $body['aps']['sid'] = $sid; 
        } 
        if ($io!=NULL) { 
         $body['aps']['io'] = $io; 
        } 
        $payload = json_encode($body); 

        echo "<pre>"; print_r($payload);die; 

        return $payload; 
       } 
       /** 
       * Writes the contents of payload to the file stream 
       * 
       * @param <string> $deviceToken 
       * @param <string> $payload 
       */ 
      protected function sendPayload($deviceToken, $payload){ 
       $msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload; 
       //$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ','', $deviceToken)) . pack("n",strlen($payload)) . $payload; 
       fwrite($this->stream, $msg); 
      } 
      /** 
       * Gets an array of feedback tokens 
       * 
       * @return <array> 
       */ 
      public function getFeedbackTokens() { 
       $feedback_tokens = array(); 
       //and read the data on the connection: 
       while(!feof($this->stream)) { 
        $data = fread($this->stream, 38); 
        if(strlen($data)) {  
         $feedback_tokens[] = unpack("N1timestamp/n1length/H*devtoken", $data); 
        } 
       } 
       return $feedback_tokens; 
      } 
      /** 
       * Closes the stream 
       */ 
      function __destruct(){ 
       // print "<br/>Clossing connection to: {$this->server}"; 
        fclose($this->stream); 
      } 
     }//end of class 
     ?> 
  • 我想找到哪個設備未能獲得IOS通知。
  • 某些設備收到通知,有些設備無法獲取。
  • 我想獲取沒有得到通知的失敗設備令牌。
  • 並且失敗的設備令牌被插入到我的數據庫中。我怎麼能夠 ?
  • 你能幫我,給出適當的解決方案來獲取失敗的設備令牌。 ?

  • 在此先感謝!

回答

0

蘋果不會告訴你以下幾點:

  1. 不會告訴該消息是否被成功發送 2.Will沒有告訴用戶是否選擇了推送通知
+0

它可能使用'getFeedbackTokens()'這些函數從Apns.php。但我不知道如何使用上述功能。 –