Services_Apns
[ class tree: Services_Apns ] [ index: Services_Apns ] [ all elements ]

Source for file Message.php

Documentation is available at Message.php

  1. <?php
  2.  
  3. /**
  4.  * Simple alert message implementation for
  5.  * Apple Push Notification Service (APNS) gateway
  6.  *
  7.  * This file contains simple alert message implementation
  8.  * that can be sent to Apple Push Notifications Service (APNS).
  9.  *
  10.  * PHP version 5
  11.  *
  12.  * LICENSE:
  13.  *
  14.  * Copyright (c) 2013, Yahav Gindi Bar; Pear Technology Investments, Ltd.
  15.  * All rights reserved.
  16.  *
  17.  * Redistribution and use in source and binary forms, with or without
  18.  * modification, are permitted provided that the following conditions
  19.  * are met:
  20.  *
  21.  *  * Redistributions of source code must retain the above copyright
  22.  *    notice, this list of conditions and the following disclaimer.
  23.  *  * Redistributions in binary form must reproduce the above copyright
  24.  *    notice, this list of conditions and the following disclaimer in
  25.  *    the documentation and/or other materials provided with the distribution.
  26.  *  * Neither the name of the PHP_LexerGenerator nor the names of its
  27.  *    contributors may be used to endorse or promote products derived
  28.  *    from this software without specific prior written permission.
  29.  *
  30.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  31.  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  32.  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  33.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  34.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  35.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  36.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  37.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  38.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  39.  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  40.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  41.  *
  42.  * @category  Services
  43.  * @package   Services_Apns
  44.  * @author    Yahav Gindi Bar <g.b.yahav@gmail.com>
  45.  * @copyright 2013 Yahav Gindi Bar
  46.  * @license   http://www.opensource.org/licenses/bsd-license.php The BSD License
  47.  * @version   SVN: $Id:$
  48.  * @link      https://github.com/YahavGB/Services_APNS
  49.  */
  50.  
  51.  
  52. /// {{{ Load Services_Apns_Alert
  53.  
  54. /**
  55.  * Load the alert entity
  56.  */
  57. require_once 'Services/Apns/Alert.php';
  58.  
  59. /// }}}
  60.  
  61. /**
  62.  * Alert message entity that can be used to query Apple Push Notifications Service.
  63.  *
  64.  * @category  Services
  65.  * @package   Services_Apns
  66.  * @author    Yahav Gindi Bar <g.b.yahav@gmail.com>
  67.  * @copyright 2013 Yahav Gindi Bar
  68.  * @license   http://www.opensource.org/licenses/bsd-license.php The BSD License
  69.  * @version   Release: 0.1.0
  70.  * @link      https://github.com/YahavGB/Services_APNS
  71.  */
  72. {
  73.     /// {{{ Properties
  74.     
  75.     /**
  76.     * The alert body
  77.     * @var string|Services_Apns_Alert|null
  78.     */
  79.     protected $body = null;
  80.     
  81.     /**
  82.     * The device token
  83.     * @var string|null
  84.     */
  85.     protected $deviceToken = null;
  86.     
  87.     /**
  88.     * The message expiration date
  89.     * @var int 
  90.     */
  91.     protected $expirationDate = null;
  92.     
  93.     /**
  94.     * The badge to assign to the app
  95.     * @var string|null
  96.     */
  97.     protected $badge = null;
  98.     
  99.     /**
  100.     * An array contains custom arguments to add to the message
  101.     * @var array 
  102.     */
  103.     protected $customArgs = array();
  104.     
  105.     /**
  106.     * A sound file to fire when the alert received
  107.     * @var string|null
  108.     */
  109.     protected $soundFile = null;
  110.     
  111.     /// }}}
  112.     
  113.     /// {{{ Getters & Setters
  114.  
  115.     /**
  116.     * Set the device token you wish to query
  117.     * (the token received from the APNS registeration method in iOS SDK)
  118.     *
  119.     * @param string|null$value The value to assign
  120.     *
  121.     * @return Services_Apns_Alert 
  122.     */
  123.     public function setDeviceToken($value)
  124.     {
  125.         if (!is_null($value&& !is_string($value)) {
  126.             throw new Services_Apns_Exception(
  127.                 'The value must be null or a string type.'
  128.             );
  129.         }
  130.         $this->deviceToken = $value;
  131.         return $this;
  132.     }
  133.     
  134.     /**
  135.     * Gets the device token
  136.     * 
  137.     * @return string|null
  138.     */
  139.     public function getDeviceToken()
  140.     {
  141.         return $this->deviceToken;
  142.     }
  143.     
  144.     /**
  145.     * Set the alert body
  146.     * 
  147.     * @param string|Services_Apns_Alert|null$value The value to assign
  148.     * 
  149.     * @return Services_Apns_Alert 
  150.     */
  151.     public function setBody($value)
  152.     {
  153.         if ($value instanceof Services_Apns_Alert{
  154.             $this->body = $value;
  155.             return $this;
  156.         }
  157.         
  158.         if (!is_null($value&& !is_scalar($value)) {
  159.             throw new Services_Apns_Exception(
  160.                 'The value must be null or a scalar type.'
  161.             );
  162.         }
  163.         $this->body = $value;
  164.         return $this;
  165.     }
  166.     
  167.     /**
  168.     * Gets the alert body
  169.     * 
  170.     * @return string|null
  171.     */
  172.     public function getBody()
  173.     {
  174.         return $this->body;
  175.     }
  176.         
  177.     /**
  178.     * Set the message expiration date
  179.     * 
  180.     * @param int|null$value The value to assign
  181.     * 
  182.     * @return Services_Apns_Alert 
  183.     */
  184.     public function setExpirationDate($value)
  185.     {
  186.         if (!is_null($value&& !is_int($value)) {
  187.             throw new Services_Apns_Exception(
  188.                 'The value must be null or a int type.'
  189.             );
  190.         }
  191.         $this->expirationDate = intval($value);
  192.         return $this;
  193.     }
  194.     
  195.     /**
  196.     * Gets the launch image
  197.     * 
  198.     * @return int|null
  199.     */
  200.     public function getExpirationDate()
  201.     {
  202.         return $this->expirationDate;
  203.     }
  204.     
  205.  
  206.     /**
  207.     * Set the badge that'll be assigned to the app
  208.     * 
  209.     * @param string|null$value The value to assign
  210.     * 
  211.     * @return Services_Apns_Alert 
  212.     */
  213.     public function setBadge($value)
  214.     {
  215.         if (!is_null($value&& !is_string($value)) {
  216.             throw new Services_Apns_Exception(
  217.                 'The value must be null or a string type.'
  218.             );
  219.         }
  220.         $this->badge = $value;
  221.         return $this;
  222.     }
  223.     
  224.     /**
  225.     * Gets the badge
  226.     * 
  227.     * @return string|null
  228.     */
  229.     public function getBadge()
  230.     {
  231.         return $this->badge;
  232.     }
  233.  
  234.     /**
  235.     * Set custom arguments to be forwarded to your app
  236.     * 
  237.     * @param array|null$args The value to assign
  238.     * 
  239.     * @return Services_Apns_Alert 
  240.     */
  241.     public function setCustomArgs(array $args)
  242.     {
  243.         if (!is_null($args&& !is_array($args)) {
  244.             throw new Services_Apns_Exception(
  245.                 'The given args value must be an array or a null value.'
  246.             );
  247.         }
  248.         
  249.         $this->customArgs = $args;
  250.         return $this;
  251.     }
  252.     
  253.     /**
  254.     * Gets the message custom args
  255.     * 
  256.     * @return array 
  257.     */
  258.     public function getCustomArgs()
  259.     {
  260.         return $this->customArgs;
  261.     }
  262.  
  263.  
  264.     /**
  265.     * Set the sound file (in your app folder) that will
  266.     * be fired when the message received.
  267.     * 
  268.     * @param string|null$value The value to assign
  269.     * 
  270.     * @return Services_Apns_Alert 
  271.     */
  272.     public function setSoundFile($value)
  273.     {
  274.         if (!is_null($value&& !is_string($value)) {
  275.             throw new Services_Apns_Exception(
  276.                 'The value must be null or a string type.'
  277.             );
  278.         }
  279.         $this->soundFile = $value;
  280.         return $this;
  281.     }
  282.     
  283.     /**
  284.     * Gets the sound file
  285.     * 
  286.     * @return string|null
  287.     */
  288.     public function getSoundFile()
  289.     {
  290.         return $this->soundFile;
  291.     }
  292.     
  293.     /// }}}
  294.     
  295.     /// {{{ getPayload()
  296.     
  297.     /**
  298.     * Gets the payload as array
  299.     * 
  300.     * @return array 
  301.     */
  302.     public function getPayload()
  303.     {
  304.         if (is_null($this->deviceToken)) {
  305.             throw new Services_Apns_Exception(
  306.                 'You must set the device token before '
  307.                 . 'getting the payload and querying APNS.'
  308.             );
  309.         }
  310.         
  311.         if (is_null($this->expirationDate)) {
  312.             throw new Services_Apns_Exception(
  313.                 'You must set the expiration date '
  314.                 . 'before getting the payload and querying APNS.'
  315.             );
  316.         }
  317.         
  318.         if (is_null($this->body)) {
  319.             throw new Services_Apns_Exception(
  320.                 'You must set the message body.'
  321.             );
  322.         }
  323.         
  324.         $payload = array(
  325.             'aps' => array()        
  326.         );
  327.         
  328.         if ($this->body instanceof Services_Apns_Alert{
  329.             $payload['aps']['alert'$this->body->getPayload();
  330.         else {
  331.             if (empty($this->body)) {
  332.                 throw new Services_Apns_Exception(
  333.                     'The body value can not be empty.'
  334.                 );
  335.             }
  336.             
  337.             $payload['aps']['alert'$this->body;
  338.         }
  339.         
  340.         // Set badge
  341.         if (!is_null($this->badge)) {
  342.             $payload['aps']['badge'$this->badge;
  343.         }
  344.         
  345.         // Set sound file
  346.         if (!is_null($this->sound)) {
  347.             $payload['aps']['sound'$this->soundFile;
  348.         }
  349.         
  350.         // Add custom arguments, in case we have
  351.         if (!is_null($this->customArgs&& count($this->customArgs> 0{
  352.             $payload array_merge($this->customArgs$payload);
  353.         }
  354.         
  355.         return $payload;
  356.     }
  357.     
  358.     /// }}}
  359.     
  360.     /// {{{ getPayloadAsJson()
  361.     
  362.     /**
  363.     * Get the payload array as a compressed json string
  364.     * 
  365.     * @return string 
  366.     */
  367.     public function getPayloadAsJson()
  368.     {
  369.         $payload $this->getPayload();
  370.         
  371.         // Use mb_strlen for multi-byte characters in case it's available
  372.         if (defined('JSON_UNESCAPED_UNICODE'&& extension_loaded('mbstring')) {
  373.             $payload json_encode($payloadJSON_UNESCAPED_UNICODE);
  374.             $length mb_strlen($length'UTF-8');
  375.         else {
  376.             $payload json_encode($payload);
  377.             $length strlen($payload);
  378.         }
  379.         
  380.         return chr(0chr(0chr(32)
  381.         . pack('H*'str_replace(' '''$this->deviceToken)) chr(0)
  382.         . chr($length$payload;
  383.     }
  384.     
  385.     /// }}}
  386. }
  387.  
  388. /*
  389.  * Local variables:
  390.  * tab-width: 4
  391.  * c-basic-offset: 4
  392.  * c-hanging-comment-ender-p: nil
  393.  * End:
  394. */

Documentation generated on Tue, 19 Feb 2013 14:30:03 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.