Exemple #1
3
function send_push($device)
{
    $deviceToken = unpack('H*', base64_decode($device["deviceToken"]));
    $deviceToken = $deviceToken[1];
    date_default_timezone_set('Europe/London');
    $push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, '/home/jimbob/final_aps_prod.pem');
    $push->setProviderCertificatePassphrase('FunCrate321');
    $push->connect();
    $message = new ApnsPHP_Message($deviceToken);
    // Set a custom property
    $message->setCustomProperty('mdm', $device['pushMagic']);
    // Set the expiry value to 30 seconds
    $message->setExpiry(30);
    $push->add($message);
    var_dump($message->getPayload());
    // Send all messages in the message queue
    $push->send();
    // Disconnect from the Apple Push Notification Service
    $push->disconnect();
    // Examine the error message container
    $aErrorQueue = $push->getErrors();
    if (!empty($aErrorQueue)) {
        var_dump($aErrorQueue);
    }
}
Exemple #2
1
 function send_message($key, $text, $badge = 0)
 {
     $socket = new ApnsPHP_Push($this->environment, $this->certificate_path);
     $socket->setRootCertificationAuthority($this->root_certificate_path);
     $socket->connect();
     $message = new ApnsPHP_Message($key);
     $message->setCustomIdentifier('notification');
     $message->setBadge($badge);
     $message->setText($text);
     $message->setSound();
     $message->setExpiry(30);
     $socket->add($message);
     try {
         $socket->send();
         $socket->disconnect();
     } catch (Exception $e) {
         return false;
     }
     $errors = $socket->getErrors();
     if (!empty($errors)) {
         return false;
     }
     return true;
 }
 /**
  * Send the given notification with Apple Push Notification Service Server.
  *
  * @param Notification $notification the notification to send
  * @return boolean true on success, false if there was an error.
  */
 public function send($notification)
 {
     $config = Config::getInstance();
     $appRoot = $config->getString('appRootDir');
     // Instanciate a new ApnsPHP_Push object, with the provider certificate
     $push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, $appRoot . $config->getString('monitoring/notification/push/providerCertificateDir'));
     // Set custom logger
     $push->setLogger(new ApnsPHP_Log_Fruition());
     // Set the Provider Certificate passphrase
     $push->setProviderCertificatePassphrase($config->getString('monitoring/notification/push/passphrase'));
     // Set the Root Certificate Autority to verify the Apple remote peer
     $push->setRootCertificationAuthority($appRoot . $config->getString('monitoring/notification/push/rootCertificateAuthorityDir'));
     // Get recipient list. If no registration id (user did not connect to the
     // mobile app, we stop the process
     $stringRecipients = $notification->getRecipient();
     if (empty($stringRecipients)) {
         Logger::info("No registration id was found. The notification is not sent.");
         return false;
     }
     // Connect to the Apple Push Notification Service
     $push->connect();
     // Create a message for each device
     $message = new ApnsPHP_Message();
     $message->setText($notification->getContent());
     $message->setSound();
     $message->setExpiry(30);
     // 60 seconds
     $recipientList = explode(",", $notification->getRecipient());
     foreach ($recipientList as $registrationId) {
         $message->addRecipient($registrationId);
     }
     // Add the message to the message queue
     $push->add($message);
     // Send all messages in the message queue
     $push->send();
     // Disconnect from the Apple Push Notification Service
     $push->disconnect();
     // Examine the error message container.
     $aErrorQueue = $push->getErrors();
     if (!empty($aErrorQueue)) {
         foreach ($aErrorQueue as $error) {
             foreach ($error['ERRORS'] as $err) {
                 //For statusCode = 8, which is Invalid Token, we delete the token.
                 if ($err['statusCode'] == self::INVALID_TOKEN) {
                     if ($this->handlerErrorCallBack) {
                         $token = $error['MESSAGE']->getRecipient();
                         call_user_func($this->handlerErrorCallBack, $token);
                     }
                 }
                 Logger::error("Sending push notification failed. Error code: " . $err['statusCode'] . ". Message: " . $err['statusMessage']);
             }
         }
         return false;
     }
     //If success
     Logger::info("Notification sent with device token " . $notification->getRecipient());
     return true;
 }
Exemple #4
0
 /**
  * Adds a device to the system, after sending a test notification to it
  * @param {array} $device
  * @param {string} $device.userId
  * @param {string} $device.deviceId
  * @param {string} [$device.formFactor]
  * @param {string} [$device.platform]
  * @param {string} [$device.version]
  * @param {string} [$device.sessionId]
  * @param {boolean} [$device.sandbox]
  * @param {string} [$device.passphrase]
  * @param {boolean} [$skipNotification=false] if true, skips sending notification
  * @return {Users_Device}
  */
 static function add($device, $skipNotification = false)
 {
     Q_Valid::requireFields(array('userId', 'deviceId'), $device, true);
     $userId = $device['userId'];
     $deviceId = $device['deviceId'];
     if (!$skipNotification) {
         $app = Q::app();
         $sandbox = Q::ifset($device, 'sandbox', null);
         if (!isset($sandbox)) {
             $sandbox = Q_Config::get($app, "cordova", "ios", "sandbox", false);
         }
         $env = $sandbox ? ApnsPHP_Abstract::ENVIRONMENT_SANDBOX : ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION;
         $s = $sandbox ? 'sandbox' : 'production';
         $cert = APP_LOCAL_DIR . DS . 'Users' . DS . 'certs' . DS . $app . DS . $s . DS . 'bundle.pem';
         $authority = USERS_PLUGIN_FILES_DIR . DS . 'Users' . DS . 'certs' . DS . 'EntrustRootCA.pem';
         $logger = new Users_ApnsPHP_Logger();
         $push = new ApnsPHP_Push($env, $cert);
         $push->setLogger($logger);
         $push->setRootCertificationAuthority($authority);
         if (isset($device['passphrase'])) {
             $push->setProviderCertificatePassphrase($device['passphrase']);
         }
         $push->connect();
         $message = new ApnsPHP_Message($deviceId);
         $message->setCustomIdentifier('Users_Device-adding');
         $message->setBadge(0);
         $message->setText(Q_Config::get($app, "cordova", "ios", "device", "text", "Notifications have been enabled"));
         $message->setCustomProperty('userId', $userId);
         $message->setExpiry(5);
         $push->add($message);
         $push->send();
         $push->disconnect();
         $errors = $push->getErrors();
         if (!empty($errors)) {
             $result = reset($errors);
             throw new Users_Exception_DeviceNotification($result['ERRORS'][0]);
         }
     }
     $sessionId = Q_Session::id();
     $user = Users::loggedInUser();
     $info = array_merge(Q_Request::userAgentInfo(), array('sessionId' => $sessionId, 'userId' => $user ? $user->id : null, 'deviceId' => null));
     $device2 = Q::take($device, $info);
     $d = new Users_Device($device2);
     $d->save(true);
     if ($sessionId) {
         $s = new Users_Session();
         $s->id = $sessionId;
         if (!$s->retrieve()) {
             $s->deviceId = $deviceId;
         }
     }
     $_SESSION['Users']['deviceId'] = $deviceId;
     $device2['Q/method'] = 'Users/device';
     Q_Utils::sendToNode($device2);
     return $d;
 }
Exemple #5
0
 public static function pushIos($environment, $certFile, $devices, $message, $extra = array())
 {
     $extra = (object) $extra;
     $environment = $environment == self::ENVIRONMENT_PROD ? \ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION : \ApnsPHP_Abstract::ENVIRONMENT_SANDBOX;
     $push = new \ApnsPHP_Push($environment, $certFile);
     $push->setLogger(new VoidLogger());
     $push->setRootCertificationAuthority(dirname(__FILE__) . '/../../data/entrust_root_certification_authority.pem');
     $push->connect();
     $result = array();
     foreach ($devices as $device) {
         try {
             $m = new \ApnsPHP_Message($device);
             $m->setText($message);
             if (isset($extra->badge)) {
                 $m->setBadge($extra->badge);
             }
             if (isset($extra->sound)) {
                 $m->setSound($extra->sound);
             }
             $push->add($m);
         } catch (\Exception $e) {
             self::logError("iOS", $device, $e->getMessage(), $certFile, $environment == \ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION);
             $result[$device] = false;
         }
     }
     $push->send();
     $push->disconnect();
     $errors = $push->getErrors();
     if (!empty($errors)) {
         foreach ($errors as $error) {
             $m = $error["MESSAGE"];
             foreach ($m->getRecipients() as $device) {
                 self::logError("iOS", $device, $error["ERRORS"][0]["statusMessage"], $certFile, $environment == \ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION);
                 $result[$device] = false;
             }
         }
     }
     foreach ($devices as $device) {
         if (!isset($result[$device])) {
             $result[$device] = true;
         }
     }
     return $result;
 }
 /**
  * 送信処理
  */
 public function push($tokens, $text, $pem, $options = array())
 {
     // pemファイルの有無
     if (!file_exists(ROOT . DS . APP_DIR . DS . $this->app_cert_path . $pem)) {
         $this->log(__LINE__ . '::' . __METHOD__ . '::' . ' non pem file. => ' . $pem, LOG_ERR);
         return false;
     }
     $push = new ApnsPHP_Push($this->env, ROOT . DS . APP_DIR . DS . $this->app_cert_path . $pem);
     $push->setRootCertificationAuthority(ROOT . DS . APP_DIR . DS . $this->entrust_cert_path);
     $push->connect();
     // 失敗したトークンの一時保存用
     $invalid_tokens = array();
     try {
         foreach ((array) $tokens as $key => $token) {
             try {
                 $message = new ApnsPHP_Message($token['Device']['token']);
                 $message->setText($text);
                 $message->setSound();
                 $message->setCustomIdentifier(isset($options['identifier']) ? $options['identifier'] : $this->identifier);
                 $message->setExpiry(isset($options['identifier']) ? $options['expiry'] : $this->expiry);
                 $push->add($message);
                 $this->log(__LINE__ . '::' . __METHOD__ . '::' . ' Send Token [' . $token['Device']['token'] . ']', LOG_DEBUG);
             } catch (Exception $e) {
                 $this->log(__LINE__ . '::' . __METHOD__ . '::' . ' iOS Notification Error [' . $token['Device']['token'] . ']', LOG_ERR);
                 array_push($invalid_tokens, $token['Device']['token']);
             }
             $push->send();
         }
     } catch (Exception $e) {
         $this->log(__LINE__ . '::' . __METHOD__ . '::' . ' iOS Notification Error: ' . $e->getMessage(), LOG_ERR);
         array_push($invalid_tokens, $token['Device']['token']);
     }
     // 送信失敗していたら対象のトークンを一旦保持
     $aErrorQueue = $push->getErrors();
     $push->disconnect();
     if (!empty($aErrorQueue)) {
         foreach ($aErrorQueue as $info) {
             if (isset($info['ERRORS'])) {
                 foreach ($info['ERRORS'] as $error) {
                     if (isset($error['statusMessage']) && $error['statusMessage'] == 'Invalid token') {
                         $this->log(__LINE__ . '::' . __METHOD__ . '::' . $error['statusMessage'] . ' [' . $token['Device']['token'] . ']', LOG_ERR);
                         array_push($invalid_tokens, $token['Device']['token']);
                     }
                 }
             }
         }
     }
     // 失敗したトークンへは配信しないようにフラグを変更
     if (!empty($invalid_tokens)) {
         $this->allow_disible($invalid_tokens);
     }
     if (empty($aErrorQueue)) {
         return true;
     } else {
         $this->log(__LINE__ . '::' . __METHOD__ . '::' . ' iOS Notification Error: ' . $aErrorQueue, LOG_ERR);
         return false;
     }
 }
 /**
  * @param $message
  * @param $recipients
  * @return bool|int   if TRUE - all messages are sent, otherwise number of not delivered messages
  */
 public function push($text, $recipients, array $extra = null, $badge = 0)
 {
     $this->openStream();
     if (is_bool($recipients) || is_array($recipients) && count($recipients) == 0) {
         $this->logger->error('Recipient is not a string, integer or array. Or empty array. Message will not be delivered', [$this->loggerContext]);
         return false;
     }
     if (!is_array($recipients)) {
         $recipients = [$recipients];
     }
     foreach ($recipients as $recipient) {
         $deviceToken = $recipient->getDeviceToken();
         $message = new ApnsMessage($deviceToken);
         $message->setText($text);
         //            $message->setCustomIdentifier(sprintf("Message-Badge-%03d", $i));
         $message->setBadge($badge);
         $message->setSound();
         if (is_array($extra) && count($extra) > 0) {
             foreach ($extra as $key => $value) {
                 $message->setCustomProperty($key, $value);
             }
         }
         $this->eventDispatcher->dispatch(PushMessageEvents::AFTER_CREATED, new PushMessageEvent($message, $deviceToken));
         $this->service->add($message);
     }
     $this->service->send();
     $this->closeStream();
     $aErrorQueue = $this->service->getErrors();
     if (!empty($aErrorQueue)) {
         $this->logger->error(var_export($aErrorQueue, true));
         foreach ($aErrorQueue as $errorQuery) {
             foreach ($errorQuery['ERRORS'] as $error) {
                 if ($error['statusCode'] == 8) {
                     // token not found
                     $invalidDeviceToken = $errorQuery['MESSAGE']->getRecipient();
                     $this->deviceService->remove($invalidDeviceToken);
                     $this->logger->info('Removing invalid token #' . $invalidDeviceToken);
                 }
             }
         }
         return count($aErrorQueue);
     }
     return true;
 }
Exemple #8
0
 private static function sendToIOS($token, $message)
 {
     /*$push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, 'com.appkode.yol');*/
     $push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, ROOT . '/app/config/apns-dev.pem');
     $disabledLogger = new DisabledLogger();
     $push->setProviderCertificatePassphrase('test123');
     $push->setLogger($disabledLogger);
     //        $push->setRootCertificationAuthority(ROOT . '/app/config/apns-dev.pem');
     $push->connect();
     $apnsMessage = new ApnsPHP_Message();
     $apnsMessage->setText($message);
     $apnsMessage->addRecipient($token);
     $push->add($apnsMessage);
     $push->send();
     $push->disconnect();
     $error = $push->getErrors();
     if (is_array($error) && count($error) > 0) {
         self::log('iOS error: ' . "\n" . json_encode($error));
     } else {
         self::log('Push is sent');
     }
 }
 function sendNotificationByApns($deviceToken, $msg, $type, $userId)
 {
     $push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, 'certificate/aps_dist_certi.pem');
     $push->setRootCertificationAuthority('certificate/aps_dist_certi.pem');
     $push->connect();
     $message = new ApnsPHP_Message($deviceToken);
     //        $message = new ApnsPHP_Message("407fa2549e4cb290c4f13059340a36e69679d9e1ba34b40751663819d98281ab");
     $message->setCustomProperty('type', $type);
     $message->setCustomProperty('userId', $userId);
     //        $message->setCustomProperty('channelName',$channelName);
     $message->setText($msg);
     $message->setBadge(1);
     $message->setSound();
     $push->add($message);
     $res = $push->send();
     $push->disconnect();
     //        return true;
     //            echo "sese";
     //            exit;
 }
Exemple #10
0
<?php

// PUSH sender via CLI
if (PHP_SAPI != 'cli') {
    die('this script must be run in cli mode');
}
require_once 'init.php';
require_once 'classes/ApnsPHP/Autoload.php';
// Instanciate a new ApnsPHP_Push object
$push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, 'push_certs/sandbox.pem');
$logger = new ApnsPHP_Log_Null();
$push->setLogger($logger);
// Set the Provider Certificate passphrase
// $push->setProviderCertificatePassphrase('test');
// Set the Root Certificate Autority to verify the Apple remote peer
//$push->setRootCertificationAuthority('push_certs/entrust_root_sandbox.cer');
// Connect to the Apple Push Notification Service
$push->connect();
$notification_type = $argv[5];
$devices = $API->DB->query_return("SELECT push.*, accounts.push_notifications FROM push LEFT JOIN accounts ON push.account_id=accounts.id WHERE udid IN(" . implode(',', array_map(array($API->DB, 'sqlesc'), explode(',', $argv[6]))) . ")");
foreach ($devices as $d) {
    $push_notificaions = explode(',', $d['push_notifications']);
    if ($push_notificaions[0] != 'none' || !$push_notificaions[0] || in_array($notification_type, $push_notificaions)) {
        // Instantiate a new Message with a single recipient
        $message = new ApnsPHP_Message($d['token']);
        // Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
        // over a ApnsPHP_Message object retrieved with the getErrors() message.
        $message->setCustomIdentifier(uniqid());
        // Set badge icon to "3"
        $newbadge = $d['badge'] + 1;
        $badges[$newbadge][] = $d['udid'];
Exemple #11
0
 /**
  * @inheritdoc
  */
 public function sendPush()
 {
     $failedMessages = [];
     if (!isset($this->registrationTokens) || !count($this->registrationTokens)) {
         $failedMessages = $this->registrationTokens;
         return $this->returnResult($failedMessages, $this->registrationTokens);
     }
     // Instanciate a new ApnsPHP_Push object
     $push = new \ApnsPHP_Push($this->parameters['environment'], $this->certificate);
     // Set the Root Certificate Autority to verify the Apple remote peer
     $push->setRootCertificationAuthority($this->parameters['ca_cert']);
     $push->setLogger($this->logger);
     // Connect to the Apple Push Notification Service
     $push->connect();
     foreach ($this->registrationTokens as $index => $token) {
         try {
             $message = new \ApnsPHP_Message($token);
         } catch (\Exception $e) {
             $this->logger->log("ERROR: Device token " . $token . " has problem : " . $e->getMessage());
             $failedMessages[] = $token;
             continue;
         }
         $badge = $this->badges[$index];
         $category = $this->pushData->getApnsCategory();
         $expiry = $this->pushData->getApnsExpiry();
         $text = $this->pushData->getApnsText();
         $sound = $this->pushData->getApnsSound();
         $customProperties = $this->pushData->getApnsCustomProperties();
         $contentAvailable = $this->pushData->getContentAvailable();
         if (!$this->pushData->isSilent()) {
             // DEFAULT PUSH
             if (isset($badge)) {
                 $message->setBadge($badge);
             }
             if (isset($category)) {
                 $message->setCategory($category);
             }
             if (isset($expiry)) {
                 $message->setExpiry($expiry);
             }
             if (isset($text)) {
                 $message->setText($text);
             }
             if (isset($sound)) {
                 $message->setSound($sound);
             } else {
                 $message->setSound();
             }
             if ($contentAvailable) {
                 $message->setContentAvailable(true);
             }
         } else {
             // SILENT PUSH
             $message->setContentAvailable(true);
             // Set push information to custom payload
             if (isset($text)) {
                 $customProperties['alert'] = $text;
             }
             if (isset($category)) {
                 $customProperties['category'] = $category;
             }
         }
         if (isset($customProperties) && is_array($customProperties)) {
             foreach ($customProperties as $name => $value) {
                 $message->setCustomProperty($name, is_scalar($value) ? $value : json_encode($value));
             }
         }
         // Add the message to the message queue
         $push->add($message);
     }
     // Send all messages in the message queue
     try {
         $push->send();
         // Disconnect from the Apple Push Notification Service
         $push->disconnect();
         // Examine the error message container
         $aErrorQueue = $push->getErrors();
         if (!empty($aErrorQueue)) {
             foreach ($aErrorQueue as $error) {
                 // On récupère la liste des token qui ont généré une erreur
                 $var = $error['MESSAGE'];
                 $failedMessages = array_merge($failedMessages, $var->getRecipients());
             }
         }
         return $this->returnResult($failedMessages, $this->registrationTokens);
     } catch (\Exception $e) {
         return $this->returnResult($this->registrationTokens, $this->registrationTokens);
     }
 }
Exemple #12
0
     $apn_aid = mysql_result($result4, 0, "aid");
     if ($apn_aid == "com.glimworm.app.push2press") {
         $APNS_PEMFILE = "com.glimworm.app.push2press_aps";
     }
 }
 $PEMFILENAME = sprintf("./pushnotes/%s_%s.pem", $APNS_PEMFILE, $APNS_PEMFILE_TYPE);
 error_log("push-prep - rows result3  row[" . $r . "] apn_aid [ {$apn_aid} ]");
 error_log("push-prep - rows result3  row[" . $r . "] PEMFILENAME [ {$PEMFILENAME} ]");
 if (file_exists($PEMFILENAME) == false) {
     error_log("push-prep - rows result3  row[" . $r . "] PEMFILENAME [ {$PEMFILENAME} ] does not exist!!");
     continue;
 }
 // echo "PEMFILENAME $PEMFILENAME";
 // Instanciate a new ApnsPHP_Push object
 //					$push = new ApnsPHP_Push($APNS_ENVIRONMENT,'./pushnotes/server_cerificates_bundle_sandbox.pem');
 $push = new ApnsPHP_Push($APNS_ENVIRONMENT, $PEMFILENAME);
 // Set the Root Certificate Autority to verify the Apple remote peer
 $push->setRootCertificationAuthority('./pushnotes/entrust_root_certification_authority.pem');
 if ($msgpusht && $msgpusht != "" && $msgpusht != "null") {
     // Connect to the Apple Push Notification Service
     $push->connect();
     // Instantiate a new Message with a single recipient
     $message = new ApnsPHP_Message($msgpusht);
     // Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
     // over a ApnsPHP_Message object retrieved with the getErrors() message.
     $message->setCustomIdentifier("Message-Badge-3");
     // Set badge icon to "3"
     $message->setBadge(1);
     // Set a simple welcome text
     $message->setText($notification);
     //$message->setText("test");
Exemple #13
0
 function ios_push($device_array, $push_title, $message_id)
 {
     // ТаймЗона;
     date_default_timezone_set('Europe/Rome');
     // Подключаем внешнюю библеотеку для работы с Apple свервером;
     require_once $_SERVER['DOCUMENT_ROOT'] . '/systems/api/ApnsPHP/Autoload.php';
     // Создаем объект для сообщения и работы с сервером;
     $push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, $_SERVER['DOCUMENT_ROOT'] . '/systems/api/appDistr.pem');
     // Пароль разработчика;
     $push->setProviderCertificatePassphrase('fdu4v9f123');
     // Соединяемся с Яблочным сервером;
     $push->connect();
     foreach ($device_array as $token_temp) {
         // Преобразуем передаваемый IOS токен в человеческий вид;
         // Убираем <> краям;
         $token_temp = substr($token_temp, 1, -1);
         // Убираем пробелы;
         $token_temp_array = explode(' ', $token_temp);
         $token = '';
         for ($i = 0; $i <= count($token_temp_array); $i++) {
             $token = $token . $token_temp_array[$i];
         }
         // Создаем объект сообщения;
         $message = new ApnsPHP_Message($token);
         // Задаем какой-то неведомый параметр;
         $message->setCustomIdentifier("Message-Badge-1");
         // Тип значка?
         $message->setBadge(1);
         // "Я видел некоторое дерьмо" (с);
         $message->setText($push_title);
         // Звук уведомления?
         $message->setSound();
         // Передаем заголовок и ID сообщения;
         $service_message = explode('=', $push_title);
         if ($service_message[0] == 'service') {
             $message->setCustomProperty('service', $service_message[1]);
         } else {
             $message->setCustomProperty('title', $push_title);
             $message->setCustomProperty('message_id', $message_id);
         }
         // сервисное сообщение про обновление бейджей в меню
         //$message->setCustomProperty('service','refresh_badge');
         // Таймаут? Что блин за таймаут?
         $message->setExpiry(30);
         // Добавляем сообщение в сессию;
         $push->add($message);
     }
     // Отправляем сообщение;
     $push->send();
     // Отключаемся от Яблочного сервера;
     $push->disconnect();
 }
Exemple #14
0
 /**
  * push
  * @param mixed $registrations
  * @param mixed $data
  */
 public function push($registrations, $data)
 {
     $apns_environment = Config::get('push.apns.environment', 'sandbox');
     $apns_certificate_file = Config::get('push.apns.cert.file', false);
     $apns_certificate_pass = Config::get('push.apns.cert.pass', false);
     if (!$apns_certificate_file) {
         throw new \Exception("APNS config error: 'push.apns.cert.file' not set.");
     }
     $total_failure = 0;
     // Instantiate a new ApnsPHP_Push object
     $push = new \ApnsPHP_Push($apns_environment == 'sandbox' ? \ApnsPHP_Abstract::ENVIRONMENT_SANDBOX : \ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, $this->getCertificateFile($apns_certificate_file));
     // set custom logger
     $push->setLogger(new APNSLogger());
     // Set the Provider Certificate passphrase
     if ($apns_certificate_pass) {
         $push->setProviderCertificatePassphrase($apns_certificate_pass);
     }
     // Set the Root Certificate Autority to verify the Apple remote peer
     $push->setRootCertificationAuthority($this->getRootCertificationAuthority());
     // Connect to the Apple Push Notification Service
     $push->connect();
     $message = new \ApnsPHP_Message();
     // Add all registrations as message recipient
     foreach ($registrations as $registration) {
         try {
             $message->addRecipient($registration->device_id);
         } catch (\ApnsPHP_Message_Exception $e) {
             Logger::error($e->getMessage());
             $total_failure += 1;
         }
     }
     Logger::debug("Recipients => " . json_encode($message->getRecipients()));
     // Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
     // over a ApnsPHP_Message object retrieved with the getErrors() message.
     if (isset($data['custom_identifier'])) {
         $message->setCustomIdentifier($data['custom_identifier']);
     }
     // Set badge icon to "3"
     if (isset($data['badge']) && is_int($data['badge'])) {
         $message->setBadge((int) $data['badge']);
     }
     // Set text
     $message->setText($data['message']);
     // Play the default sound
     if (!isset($data['sound']) || empty($data['sound'])) {
         $data['sound'] = 'default';
     }
     $message->setSound($data['sound']);
     // Set the expiry value to 30 seconds
     if (isset($data['expiry']) && $data['expiry'] > 0) {
         $message->setExpiry($data['expiry']);
     }
     // Set custom properties
     $invalid_properties = array('_id', 'app_id', 'created_at', 'updated_at', 'sound', 'text', 'badge', 'expiry', 'custom_identifier');
     $custom_properties = array_diff_key($data, array_flip($invalid_properties));
     foreach ($custom_properties as $property => $value) {
         $message->setCustomProperty($property, $value);
     }
     // Add the message to the message queue
     $push->add($message);
     // Send all messages in the message queue
     $stats = $push->send();
     // Disconnect from the Apple Push Notification Service
     $push->disconnect();
     // Examine the error message container
     $error_list = $push->getErrors();
     // Log delivery status
     $errors = $push->getErrors();
     $total_failure += count($errors);
     if ($total_failure > 0) {
         foreach ($errors as $error) {
             Logger::error($error);
         }
     }
     return array('success' => $registrations->count() - $total_failure, 'failure' => $total_failure);
 }
Exemple #15
0
 * http://code.google.com/p/apns-php/wiki/License
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to aldo.armiento@gmail.com so we can send you a copy immediately.
 *
 * @author (C) 2010 Aldo Armiento (aldo.armiento@gmail.com)
 * @version $Id$
 */
// Adjust to your timezone
date_default_timezone_set('Europe/Rome');
// Report all PHP errors
error_reporting(-1);
// Using Autoload all classes are loaded on-demand
require_once 'ApnsPHP/Autoload.php';
// Instantiate a new ApnsPHP_Push object
$push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, 'Vintelli.pem');
// Set the Provider Certificate passphrase
// $push->setProviderCertificatePassphrase('test');
// Set the Root Certificate Autority to verify the Apple remote peer
$push->setRootCertificationAuthority('Vintelli.pem');
// Connect to the Apple Push Notification Service
$push->connect();
// Instantiate a new Message with a single recipient
$message = new ApnsPHP_Message('e1fc74f98def8ae160e0e1d56d4abb7507a5d2d543962c5f0c0077217eee4ab3');
// Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
// over a ApnsPHP_Message object retrieved with the getErrors() message.
$message->setCustomIdentifier("Message-Badge-3");
// Set badge icon to "3"
$message->setBadge(3);
// Set a simple welcome text
$message->setText('Hello APNs-enabled device!');
Exemple #16
0
 /**
  * The process main loop.
  *
  * During the main loop: the per-process error queue is read and the common error message
  * container is populated; the per-process message queue is spooled (message from
  * this queue is added to ApnsPHP_Push queue and delivered).
  */
 protected function _mainLoop()
 {
     while (true) {
         pcntl_signal_dispatch();
         if (posix_getppid() != $this->_nParentPid) {
             $this->_log("INFO: Parent process {$this->_nParentPid} died unexpectedly, exiting...");
             break;
         }
         sem_acquire($this->_hSem);
         $this->_setQueue(self::SHM_ERROR_MESSAGES_QUEUE_KEY, 0, array_merge($this->_getQueue(self::SHM_ERROR_MESSAGES_QUEUE_KEY), parent::getErrors()));
         $aQueue = $this->_getQueue(self::SHM_MESSAGES_QUEUE_KEY_START, $this->_nCurrentProcess);
         foreach ($aQueue as $message) {
             parent::add($message);
         }
         $this->_setQueue(self::SHM_MESSAGES_QUEUE_KEY_START, $this->_nCurrentProcess);
         sem_release($this->_hSem);
         $nMessages = count($aQueue);
         if ($nMessages > 0) {
             $this->_log('INFO: Process ' . ($this->_nCurrentProcess + 1) . " has {$nMessages} messages, sending...");
             parent::send();
         } else {
             usleep(self::MAIN_LOOP_USLEEP);
         }
     }
 }
Exemple #17
0
function SendIOS($tokens, $text, $config)
{
    # Создаём экземпляр Push. Необходимо указывать параметр ENVIRONMENT_PRODUCTION или
    # ENVIRONMENT_SANDBOX в соответствии с сертификатом.
    $push = new ApnsPHP_Push($config['apn']['production'] ? 0 : 1, $config['apn']['production'] ? $config['apn']['sert_prod'] : $config['apn']['sert']);
    # Указываем пароль сертификата если он имеется
    if ($config['apn']['sertPass'] != '') {
        $push->setProviderCertificatePassphrase($config['apn']['sertPass']);
    }
    # Указываем корневой сертификат
    $push->setRootCertificationAuthority($config['apn']['RootCertificat']);
    # Создаём сообщение
    $message = new ApnsPHP_Message();
    # Перебираем массив токенов и добавляем получателей
    $listTokens = array();
    foreach ($tokens as $token) {
        $message->addRecipient($token);
        $listTokens[] = $token;
    }
    # Соединяемся с сервером
    $push->connect();
    # Устанавливаем параметры отправки сообщения
    $message->setSound();
    //$message->setBadge(0)
    $message->setText($text);
    # Устанавливаем сообщение для отправки
    $push->add($message);
    # Отправляем сообщение
    $push->send();
    # Отключаемся от сервера
    $push->disconnect();
    # Проверяем возникшие ошибки во время отправки
    $aErrorQueue = $push->getErrors();
    # Если имеются ошибки
    if (!empty($aErrorQueue)) {
        echo 'Ошибка отправки ios  -  ' . print_r($aErrorQueue, true);
        if (is_array($aErrorQueue)) {
            foreach ($aErrorQueue as $error) {
                if (isset($error['ERRORS']) && is_array($error['ERRORS'])) {
                    foreach ($error['ERRORS'] as $m) {
                        if (isset($m['statusMessage']) && $m['statusMessage'] == 'Invalid token') {
                            $arrayID = $m['identifier'] - 1;
                            if (isset($listTokens[$arrayID])) {
                                # Если найден недействительный токен, удатяем его из БД
                                //echo 'Удаление ошибочного токена';
                                DeleteToken($listTokens[$arrayID]);
                            }
                        }
                    }
                }
            }
        }
    }
}
Exemple #18
0
 /**
  * Gestiona el envio de las notificaciones con la libreria "ApnsPHP"
  */
 public function send()
 {
     if ($this->getEnvironment() === 1) {
         $push = new \ApnsPHP_Push($this->getEnvironment(), $this->getPemDev());
         $push->setProviderCertificatePassphrase($this->getPassphraseDev());
     } else {
         $push = new \ApnsPHP_Push($this->getEnvironment(), $this->getPem());
         $push->setProviderCertificatePassphrase($this->getPassphrase());
     }
     $push->setWriteInterval($this->getWriteInterval());
     $push->setSendRetryTimes($this->getSendRetryTimes());
     $push->setConnectTimeout($this->getConnectTimeout());
     $push->connect();
     try {
         $message = new \ApnsPHP_Message($this->getDeviceToken());
         $message->setText($this->getMessage());
         $message->setSound();
         if (!empty($this->getExtraData())) {
             foreach ($this->getExtraData() as $key => $value) {
                 $message->setCustomProperty($key, $value);
             }
         }
         $message->setExpiry($this->getExpiry());
         $push->add($message);
         $push->send();
         $push->disconnect();
         $aErrorQueue = $push->getErrors();
     } catch (\Exception $e) {
         $aErrorQueue = array($e->getMessage());
     }
     if (!empty($aErrorQueue)) {
         return $aErrorQueue;
     }
     return true;
 }
<?php

// include auto-loader
require __DIR__ . '/vendor/autoload.php';
// load configuration
require 'config.inc.php';
// create an instance of the pusher
$pusher = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, APS_CERT_PATH);
$pusher->connect();
// set up our database connection
$db = new PDO(DB_DSN, DB_USER, DB_PASSWORD);
// query for the tokens of all test devices
$devicesStmt = $db->query('select token from devices where is_test_device=1');
// loop through them
while ($deviceToken = $devicesStmt->fetchColumn()) {
    // create a new message
    $message = new ApnsPHP_Message($deviceToken);
    $message->setText('Test push notification');
    $message->setSound('silent.m4a');
    $message->setBadge(1);
    $message->setContentAvailable(true);
    // add it to the queue
    $pusher->add($message);
}
// send all the messages
$pusher->send();
// and disconnect
$pusher->disconnect();
// were there any errors?
$errors = $pusher->getErrors();
if (!empty($errors)) {
$user = User::whereIdUsuario($user)->first();
$devices = [];
//token push
if ($user->device == 'android') {
    $gcpm = new GCMPushMessage($apiKey);
    $gcpm->setDevices($devices);
    $response = $gcpm->send($msg, array('title' => $title));
    $response = json_decode($response);
    if ($response->failure) {
        $payload = array('code' => 400, 'message' => $response->results[0]->error);
    } else {
        $payload = array('code' => 200, 'message' => 'Mensaje enviado con exito');
    }
} else {
    // Instanciate a new ApnsPHP_Push object
    $push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, 'cert/ck.pem');
    // $push->setRootCertificationAuthority('cert/entrust_root_certification_authority.pem');
    // $push->setProviderCertificatePassphrase('abcd1234!');
    $push->connect();
    $message = new ApnsPHP_Message($token_push);
    $message->setCustomIdentifier("Message-Badge-1");
    $message->setBadge(1);
    $message->setText($msg);
    $message->setSound();
    $push->add($message);
    $push->send();
    $push->disconnect();
    // Examine the error message container
    $aErrorQueue = $push->getErrors();
    if (!empty($aErrorQueue)) {
        $code = 400;
Exemple #21
0
//foreach ($result as $row) {
// Adjust to your timezone
date_default_timezone_set('Europe/Kiev');
// Report all PHP errors
error_reporting(-1);
$seconds = 2;
$micro = $seconds * 1000000;
while (true) {
    $stmt = $dbConnection->prepare('SELECT * from push_pool where status = 0');
    $stmt->execute();
    $res1 = $stmt->fetchAll();
    if (!empty($res1)) {
        // Using Autoload all classes are loaded on-demand
        require_once $base . '/ApnsPHP/Autoload.php';
        // Instantiate a new ApnsPHP_Push object
        $push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, $base . '/ap.pem');
        // Set the Provider Certificate passphrase
        // $push->setProviderCertificatePassphrase('test');
        // Set the Root Certificate Autority to verify the Apple remote peer
        //$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
        // Connect to the Apple Push Notification Service
        $push->connect();
        // Instantiate a new Message with a single recipient
        foreach ($res1 as $row) {
            $dt = $row['device_token'];
            //echo $dt."<br>.";
            if (strlen($row['device_token']) == 64) {
                //echo $row['device_token']."<br><hr>";
                $message = new ApnsPHP_Message_Custom($dt);
                // Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
                // over a ApnsPHP_Message object retrieved with the getErrors() message.
Exemple #22
0
 /**
  * Send a push notification using ApnsPHP Library
  * @param string $deviceToken the push token for the mobile device
  * @param string $message the message to display
  * @param string $alertSound the audio file to play, otherwise use the default sound
  * @param string $unlockText if the device is locked, show "Slide to XXX" where XXX is the unlockText
  * @param int $badgeCount the number that should be shown on the springboard badge
  */
 public function SendWithApns($deviceToken, $messageText, $alertSound = 'default', $unlockText = '', $badgeCount = 0)
 {
     $output = new stdClass();
     $output->date = date('Y-m-d H:i:s');
     $output->success = false;
     $output->message = '';
     $push = new ApnsPHP_Push($this->sandboxMode ? ApnsPHP_Abstract::ENVIRONMENT_SANDBOX : ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, $this->certFilePath);
     $push->setProviderCertificatePassphrase($this->certPassphrase);
     $push->connect();
     $message = new ApnsPHP_Message_Custom($deviceToken);
     $message->setCustomIdentifier("message-1");
     // used to get error details if multiple messages are being sent
     $message->setText($messageText);
     $message->setSound($alertSound);
     $message->setExpiry(10);
     // timeout for connecting to push service
     $message->setActionLocKey($unlockText);
     // appended to "slide to " in the main unlock bar
     // $message->setLocKey(''); // override the text on the app lockscreen message
     $message->setBadge($badgeCount);
     $push->add($message);
     $push->send();
     $push->disconnect();
     // Examine the error message container
     $errors = $push->getErrors();
     $output->success = !empty($errors);
     if (!$output->success) {
         $output->message = print_r($errors, 1);
     }
     return $output;
 }
 protected function raw_send($tokens, $title, $user_info)
 {
     // No devices, do nothing
     if (empty($tokens)) {
         return 0;
     }
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Abstract.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Exception.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Feedback.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Message.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Log/Interface.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Log/Embedded.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Message/Custom.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Message/Exception.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Push.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Push/Exception.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Push/Server.php';
     require_once dirname(__FILE__) . '/../../libs/ApnsPHP/Push/Server/Exception.php';
     require_once dirname(__FILE__) . '/../class-pnfw-apnsphp-logger.php';
     $certificate = get_attached_file(get_option("pnfw_production_ssl_certificate_media_id"));
     $passphrase = get_option("pnfw_production_ssl_certificate_password");
     $environment = ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION;
     if (get_option("pnfw_ios_use_sandbox")) {
         $certificate = get_attached_file(get_option("pnfw_sandbox_ssl_certificate_media_id"));
         $passphrase = get_option("pnfw_sandbox_ssl_certificate_password");
         $environment = ApnsPHP_Abstract::ENVIRONMENT_SANDBOX;
     }
     if (empty($certificate)) {
         pnfw_log(PNFW_IOS_LOG, __("iOS SSL certificate is not correctly set.", 'pnfw'));
         return 0;
     }
     if (empty($passphrase)) {
         pnfw_log(PNFW_IOS_LOG, __("iOS SSL certificate password is not correctly set.", 'pnfw'));
         return 0;
     }
     if (!file_exists($certificate)) {
         pnfw_log(PNFW_IOS_LOG, __("iOS SSL Certificate does not exists.", 'pnfw'));
         return 0;
     }
     $pnfw_ios_payload_sound = get_option('pnfw_ios_payload_sound', 'default');
     try {
         $push = new ApnsPHP_Push($environment, $certificate);
         $push->setLogger(new PNFW_ApnsPHP_Logger());
         $push->setProviderCertificatePassphrase($passphrase);
         foreach ($tokens as &$token) {
             try {
                 $this->notification_sent($token);
                 $message = new ApnsPHP_Message($token);
                 foreach (array_keys($user_info) as $key) {
                     $message->setCustomProperty($key, strval($user_info[$key]));
                 }
                 $message->setText($title);
                 $message->setSound($pnfw_ios_payload_sound);
                 $message->setBadge($this->get_badge_count($token));
                 $push->add($message);
             } catch (Exception $e) {
                 // The only exception here is the invalid token, so delete it
                 $this->delete_token($token);
             }
         }
         unset($token);
         $queued = count($push->getQueue(false));
         // Empty queue, do nothing
         if ($queued == 0) {
             return 0;
         }
         // Connect to the Apple Push Notification Service
         $push->connect();
         // Send all messages in the message queue
         $push->send();
         // Disconnect from the Apple Push Notification Service
         $push->disconnect();
         return $queued;
     } catch (Exception $e) {
         pnfw_log(PNFW_IOS_LOG, strip_tags($e->getMessage()));
         return 0;
     }
 }
 * http://code.google.com/p/apns-php/wiki/License
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to aldo.armiento@gmail.com so we can send you a copy immediately.
 *
 * @author (C) 2010 Aldo Armiento (aldo.armiento@gmail.com)
 * @version $Id: sample_push.php 65 2010-12-13 18:38:39Z aldo.armiento $
 */
// Adjust to your timezone
date_default_timezone_set('Europe/Rome');
// Report all PHP errors
error_reporting(-1);
// Using Autoload all classes are loaded on-demand
require_once 'ApnsPHP/Autoload.php';
// Instanciate a new ApnsPHP_Push object
$push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, 'server_cerificates_bundle_sandbox.pem');
// Set the Root Certificate Autority to verify the Apple remote peer
$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
// Connect to the Apple Push Notification Service
$push->connect();
// Instantiate a new Message with a single recipient
//$message = new ApnsPHP_Message('1e82db91c7ceddd72bf33d74ae052ac9c84a065b35148ac401388843106a7485');
$message = new ApnsPHP_Message('5fd4e4af4aec6b1e61b3d3c1d1165151ac3bfa29ef362bfdb482b3acf7ecea6a');
// Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
// over a ApnsPHP_Message object retrieved with the getErrors() message.
$message->setCustomIdentifier("Message-Badge-3");
// Set badge icon to "3"
$message->setBadge(3);
// Set a simple welcome text
$message->setText('COULD YOU COME DOWN FOR THE PROJECT MEETING?!');
// Play the default sound
 protected function sendPushToDevice($cert, $deviceId, $message, $sn = '')
 {
     if (strlen($deviceId) < 64) {
         return;
     }
     $env = APPLICATION_ENV == 'development' ? ApnsPHP_Abstract::ENVIRONMENT_SANDBOX : ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION;
     $env = ApnsPHP_Abstract::ENVIRONMENT_SANDBOX;
     $push = new ApnsPHP_Push($env, $cert);
     $push->setLogger(new ApnsPHP_Log_Null());
     $push->setConnectTimeout(4000);
     $push->setRootCertificationAuthority(APPLICATION_PATH . '/data/entrust_root_certification_authority.pem');
     $push->connect();
     $apnsMessage = new ApnsPHP_Message($deviceId);
     $apnsMessage->setBadge(1);
     $apnsMessage->setText($message);
     $apnsMessage->setSound();
     $apnsMessage->setCustomProperty('sn', $sn);
     $push->add($apnsMessage);
     $push->send();
     //$push->disconnect();
     $aErrorQueue = $push->getErrors();
     if (!empty($aErrorQueue)) {
         var_dump($aErrorQueue);
     }
 }