Nouvelle API de fournisseur APNS et PHP
j'ai commencé à créer du code basé sur pour l'envoi de notifications push depuis PHP.
cependant maintenant que j'ai compris qu'il y a une nouvelle API qui utilise HTTP/2 et fournit des commentaires dans la réponse, j'essaie de comprendre ce que je dois faire pour obtenir ces commentaires.
Je n'ai pas pu trouver de tutoriels ou de Code Type Pour me donner une direction (je suppose parce que c'est tellement nouveau).
Est-il possible d'utiliser le stream_socket_client()
méthode de se connecter à APNS avec la nouvelle API fournisseur? Comment puis-je obtenir de la rétroaction? Tous les je serai de retour à partir de fwrite($fp, $msg, strlen($msg))
aujourd'hui est un nombre. À toutes fins pratiques, vous pouvez considérer que mon code est le même que le code de DONC la question que j'ai basé mon code
Merci!
7 réponses
avec la nouvelle API HTTP/2 APNS provider, vous pouvez utiliser curl pour envoyer des notifications push.
EDIT
avant de continuer (comme noté par @Madox), openssl >= 1.0.2 e de devrait être installé (de préférence à partir du paquet). Vérifiez avec la commande
openssl version
a) votre version de PHP devrait être >= 5.5.24 de sorte que la constante CURL_HTTP_VERSION_2_0 soit définie.
b) assurez-vous que la version 7.46+ de curl est installée dans votre système
curl --version
c) Curl devrait avoir le support http/2 activé. Dans la sortie en tapant la commande précédente, vous devriez voir une ligne comme celle-ci:
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets
si HTTP2 ne se présente pas, vous pouvez suivre cet excellent tutoriel pour installer http / 2 pour curl https://serversforhackers.com/video/curl-with-http2-support
Vérifier que curl détecté openssl >= 1.0.2 e, faire du curl --version devrait sortir quelque chose comme ceci:
curl 7.47.1 (x86_64-pc-linux-gnu) libcurl/7.47.1 OpenSSL/1.0.2f zlib/1.2.8 libidn/1.28 nghttp2/1.8.0-DEV librtmp/2.3
e) une fois tout installé, vous pouvez le tester en ligne de commande:
curl -d '{"aps":{"alert":"hi","sound":"default"}}' \
--cert <your-certificate.pem>:<certificate-password> \
-H "apns-topic: <your-app-bundle-id>" \
--http2 \
https://api.development.push.apple.com/3/device/<device-token>
f) voici un exemple de code en PHP que j'ai essayé avec succès:
if(defined('CURL_HTTP_VERSION_2_0')){
$device_token = '...';
$pem_file = 'path to your pem file';
$pem_secret = 'your pem secret';
$apns_topic = 'your apns topic. Can be your app bundle ID';
$sample_alert = '{"aps":{"alert":"hi","sound":"default"}}';
$url = "https://api.development.push.apple.com/3/device/$device_token";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $sample_alert);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("apns-topic: $apns_topic"));
curl_setopt($ch, CURLOPT_SSLCERT, $pem_file);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pem_secret);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//On successful response you should get true in the response and a status code of 200
//A list of responses and status codes is available at
//https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH107-SW1
var_dump($response);
var_dump($httpcode);
}
je veux ajouter quelques informations à tiempor3al réponse.
1) curl doit être compilé avec la version openssl >=1.0.2 Pour supporter pleinement http/2. - Je recevoir "?@@?HTTP / 2 client preface chaîne manquante ou corrompue..."erreur lorsque j'ai compilé avec CentOS stock openssl-1.0.1 e.
2)si votre version du module PHP mod_curl.ainsi compilé sans la constante CURL_HTTP_VERSION_2_0, vous pouvez le remplacer par le nombre entier 3:
curl_setopt($ch, CURLOPT_HTTP_VERSION, 3);
je pourrais envoyer push avec succès via HTTP2 en utilisant php CURL et lire les commentaires directement dans le corps de réponse (ici j'ai écrit un petit tutoriel sur la façon de faire ceci: envoi de notification Push avec HTTP2 (et PHP)