Compare commits

...

2 commits

3 changed files with 95 additions and 0 deletions

2
.gitignore vendored
View file

@ -4,6 +4,8 @@
/public/bundles/
/var/
/vendor/
/sql/
/pem/
###< symfony/framework-bundle ###
*.swp

View file

@ -69,3 +69,8 @@ services:
arguments:
$ip_address: "%env(MQTT_IP_ADDRESS)%"
$port: "%env(MQTT_PORT)%"
App\Service\APNSPusher:
arguments:
$gateway_url: "%env(APNS_GATEWAY_URL)%"
$pem_file: "%env(PEM_FILE)%"

View file

@ -0,0 +1,88 @@
<?php
namespace App\Service;
class APNSPusher
{
protected $conn;
protected $gateway_url;
protected $pem_file;
protected $is_connected;
public function __construct($gateway_url, $pem_file)
{
$this->gateway_url = $gateway_url;
$this->pem_file = $pem_file;
$this->is_connected = false;
}
public function connect()
{
$passphrase = '';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $this->pem_file);
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// attempt connection
$conn = stream_socket_client($gateway_url, $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
if (!$conn)
{
// can't connect to pusher
error_log("Failed to connect to APNS: $err $errstr");
$this->conn = null;
$this->is_connected = false;
}
else
{
error_log("Connected to APNS");
$this->conn = $conn;
$this->is_connected = true;
}
}
public function buildPayload($message)
{
$payload = '{"aps":{"alert":"' . $message . '","sound":"default"}}';
return $payload;
}
public function send($device_id, $payload)
{
// connect
if (!$this->is_connected)
$this->connect();
// build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $device_id) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($this->conn, $msg, strlen($msg));
if (!$result)
{
echo 'Undelivered message count: ' . $device_id . '<br />';
}
else
{
echo 'Delivered message count: ' . $device_id . '<br />';
}
if ($this->conn)
{
fclose($this->conn);
$this->is_connected = false;
error_log("connection closed");
}
}
protected function tr_to_utf($text)
{
$text = trim($text);
$search = array('Ü', 'Þ', 'Ð', 'Ç', 'Ý', 'Ö', 'ü', 'þ', 'ð', 'ç', 'ý', 'ö');
$replace = array('Ü', 'Åž', '&#286;ž', 'Ç', 'İ', 'Ö', 'ü', 'ÅŸ', 'ÄŸ', 'ç', 'ı', 'ö');
$new_text = str_replace($search, $replace, $text);
return $new_text;
}
}