2016-11-21 7 views
0

Здравствуйте, ребята, Это мой файл 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

Apple, не скажу вам следующее:

  1. не Скажете ли отправлено сообщение успешно или нет 2.Will не сказать, если пользователь выбрал из Push Notifications
+0

возможно использование 'getFeedbackTokens()' этих функций из Apns.php. но я понятия не имею, как использовать вышеуказанную функцию. –