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; } }
/** * 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); }