Salve, per inviare una notifica push tramite Apple Push Notification Service è necessario effettuare una richiesta HTTP2. Attualmente non riesco ad effettuarla tramite curl, questo tipo di protocollo è abilitato in altervista?
Printable View
Salve, per inviare una notifica push tramite Apple Push Notification Service è necessario effettuare una richiesta HTTP2. Attualmente non riesco ad effettuarla tramite curl, questo tipo di protocollo è abilitato in altervista?
https://it.wikipedia.org/wiki/Notifica_push
Per inviare una notifica push ti serve solo https (per compatibilità verso il browser chrome)..
Vedo CloudFlare con https attivo (http2 si usa con https ma ricorda che questo non è il server di origine e cioè altervista)..
Si le funzioni curl sono abilitate..
1)Definisci per quale applicazione (jooomla,wordpress ecc) vuoi utilizzarlo
2)Posta il codice privo di dati personali
Nota* requisiti MySQL 5.6 e sblocco delle connessioni server to server per le richieste esterne al domino
Salve darbula, grazie per la risposta, questa è la funzione che sto cercando di utilizzare:
Questo è il modo in cui la utilizzo:Codice PHP:
/**
* @param $http2ch la connessione curl
* @param $http2_server l'url per la richiesta
* @param $apple_cert il percorso del certificato
* @param $app_bundle_id l'id dell'applicazione
* @param $message payload (JSON)
* @param $token token dispositivo
* @return mixed codice di stato
*/
function sendHTTP2Push($http2ch, $http2_server, $apple_cert, $app_bundle_id, $message, $token) {
// url (endpoint)
$url = "{$http2_server}/3/device/{$token}";
// certificate
$cert = realpath($apple_cert);
// headers
$headers = array(
"apns-topic: {$app_bundle_id}",
"User-Agent: My Sender"
);
// other curl options
curl_setopt_array($http2ch, array(
CURLOPT_URL => $url,
CURLOPT_PORT => 443,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $message,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLCERT => $cert,
CURLOPT_HEADER => 1
));
// go...
$result = curl_exec($http2ch);
if ($result === FALSE) {
throw new Exception("Curl failed: " . curl_error($http2ch));
}
// get response
$status = curl_getinfo($http2ch, CURLINFO_HTTP_CODE);
return $status;
}
L'errore che ottengo è il seguente:Codice PHP:
if (!defined('CURL_HTTP_VERSION_2_0')) {
define('CURL_HTTP_VERSION_2_0', 3);
}
// open connection
$http2ch = curl_init();
curl_setopt($http2ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
// send push
$apple_cert = '/certificates/samplepush/development.pem';
$message = '{"aps":{"alert":"Hi!","sound":"default"}}';
$token = 'dbdaeae86abcde56rtyww1859fb41b2cby053ec48987847';
$http2_server = 'https://api.development.push.apple.com'; // or 'api.push.apple.com' if production
$app_bundle_id = 'it.dot.TestApp';
$status = sendHTTP2Push($http2ch, $http2_server, $apple_cert, $app_bundle_id, $message, $token);
echo "Response from apple -> {$status}\n";
// close connection
curl_close($http2ch);
Unexpected HTTP/1.x request: POST /3/device/
Qualche suggerimento a riguardo?
Aggiungo inoltre che non utilizzo applicazioni come Joomla o Wordpress, questo script viene richiamato dall'app iOS per inviare una notifica push ad un altro dispositivo.
Inoltre ho già sbloccato le connessioni server to server per richieste esterne al dominio.