public function updatepositionAction()
 {
     if ($params = $this->getRequest()->getPost()) {
         if (empty($params['latitude']) or empty($params['longitude']) or empty($params['device_uid'])) {
             return;
         }
         $device = new Push_Model_Iphone_Device();
         $device->find($params['device_uid'], 'device_uid');
         if (!$device->getId()) {
             $device->setDeviceUid($params['device_uid']);
         }
         $device->setLastKnownLatitude($params['latitude'])->setLastKnownLongitude($params['longitude'])->save();
         $messages = $device->findNotReceivedMessages();
         if ($messages->count() > 0) {
             foreach ($messages as $message) {
                 $instance = $message->getInstance('iphone');
                 $instance->setMessage($message);
                 if ($instance->isInsideRadius($device->getLastKnownLatitude(), $device->getLastKnownLongitude())) {
                     $instance->isDev($isDev)->sendMessage($device);
                 }
             }
         }
         die('done');
     }
 }
 protected function _getDeviceUid()
 {
     $id = null;
     if ($device_uid = $this->getRequest()->getParam('device_uid')) {
         if (!empty($device_uid)) {
             if (strlen($device_uid) == 36) {
                 $device = new Push_Model_Iphone_Device();
                 $device->find($device_uid, 'device_uid');
                 $id = $device->getDeviceUid();
             } else {
                 $device = new Push_Model_Android_Device();
                 $device->find($device_uid, 'registration_id');
                 $id = $device->getRegistrationId();
             }
         }
     }
     return $id;
 }
 public function updatepositionAction()
 {
     if ($params = $this->getRequest()->getPost()) {
         if (empty($params['device_uid'])) {
             return;
         }
         $device = new Push_Model_Iphone_Device();
         $device->find($params['device_uid'], 'device_uid');
         if (!$device->getId()) {
             $device->setDeviceUid($params['device_uid'])->setAppId($params['app_id']);
         }
         $messages = $device->findNotReceivedMessages(true);
         if ($messages->count() > 0) {
             foreach ($messages as $message) {
                 $instance = $message->getInstance('iphone');
                 $instance->setMessage($message);
                 $instance->createConnection();
                 $instance->sendMessage($device);
             }
         }
         die;
     }
 }
Example #4
0
 /**
  * Fetch APNS Messages
  *
  * This gets called automatically by _pushMessage.  This will check with APNS for any invalid tokens and disable them from receiving further notifications.
  *
  * @param sting $development Which SSL to connect to, Sandbox or Production
  * @access private
  */
 private function _checkFeedback()
 {
     $ctx = stream_context_create();
     stream_context_set_option($ctx, 'ssl', 'local_cert', $this->__certificate);
     stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
     $feedback_url = $this->isProduction() ? $this->__feedback_url : $this->__feedback_development_url;
     $fp = stream_socket_client($feedback_url, $error, $errorString, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
     if (!$fp) {
         throw new Exception('Unable to connect to get feedback from Apple');
     }
     while ($devcon = fread($fp, 38)) {
         $arr = unpack("H*", $devcon);
         $rawhex = trim(implode("", $arr));
         $token = substr($rawhex, 12, 64);
         if (!empty($token)) {
             $device = new Push_Model_Iphone_Device();
             $device->findByToken($token);
             if ($device->getId()) {
                 $device->unregister();
             }
         }
     }
     fclose($fp);
 }