web-dev-qa-db-fra.com

APNS + PHP "stream_socket_client (): échec de l'activation de la cryptographie"

J'ai du mal à utiliser APNS avec PHP et à recevoir le message suivant:

stream_socket_client(): Failed to enable crypto

Le problème ne se produit que parfois, et d'autres fois, il enverrait en fait le Push.

Comme j'ai le script de test sur une boucle de 10 itérations, j'obtiens parfois ceci:

stream_socket_client(): SSL: Connection reset by peer

Je teste en utilisant le serveur sandbox tls://gateway.sandbox.Push.Apple.com:2195

Voici ce que j'ai essayé:

  • J'ai essayé de réémettre le PEM et tous les certificats avec.
  • J'ai joué avec le protocole de demande sslv3:// et tls://.
  • J'ai joué avec la phrase secrète (Push fonctionnait sans la phrase secrète btw)
  • J'ai essayé de chercher stackoverflow pour une solution et rien n'a fonctionné.
  • Autorisations de fichier pem vérifiées 644
  • Autorisations des répertoires parents pem vérifiées 755

Il semble que toutes les solutions que j'ai trouvées sur Google et SO sont des gens qui ont du mal à pousser complètement.

J'ai l'impression que le service est à tarif limité peut-être? Parce que nous avons attendu un certain temps (environ 15 minutes), puis nous l'avons réessayé, et nous avons réussi à transmettre environ 100 messages jusqu'à ce que je recommence à recevoir ce message.

17
Samer

Le service Push bac à sable est à tarif limité. J'ai vécu cela moi-même lors des tests, mais je n'ai jamais rencontré une telle limite en utilisant l'API de production.

Vous pourriez également toucher leurs autres protections.

Êtes-vous en train d'ouvrir une connexion, d'envoyer un message, de fermer la connexion, puis de boucler et de recommencer?

Vos notifications seront alors supprimées. Apple veut que vous envoyiez plusieurs notifications Push en utilisant la même connexion, pas une nouvelle à chaque fois.

Meilleures pratiques pour la gestion des connexions

Vous pouvez établir plusieurs connexions à la même passerelle ou à plusieurs instances de passerelle. Si vous devez envoyer un grand nombre de notifications à distance, répartissez-les sur des connexions à plusieurs passerelles différentes. Cela améliore les performances par rapport à l'utilisation d'une seule connexion: il vous permet d'envoyer les notifications à distance plus rapidement, et il permet aux APN de les livrer plus rapidement.

Gardez vos connexions avec les APN ouvertes sur plusieurs notifications; n'ouvrez et ne fermez pas les connexions à plusieurs reprises. Les APN traitent la connexion et la déconnexion rapides comme une attaque par déni de service. Vous devez laisser une connexion ouverte à moins que vous ne sachiez qu'elle sera inactive pendant une période prolongée, par exemple, si vous envoyer des notifications à vos utilisateurs une fois par jour, il est possible d'utiliser une nouvelle connexion chaque jour.

De Apple Docs @ https://developer.Apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html

14
greg_diesel

Mon PHP générait l'erreur suivante:

PHP Warning:  stream_socket_client(): Failed to enable crypto in /private/tmp/t.php on line 12
PHP Warning:  stream_socket_client(): unable to connect to ssl://gateway.sandbox.Push.Apple.com:2195 (Unknown error) in /private/tmp/t.php on line 12
PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in /private/tmp/t.php on line 24

Le problème était que le putain de certificat avait expiré avant-hier! :-) Pouvez-vous croire cela?

J'ai donc besoin de recréer mon fichier PEM.

5

Il n'est pas nécessaire de recréer votre fichier pem

cette erreur se produit lorsque vous utilisez un PassPhrase incorrect

en ce qui concerne Emiliano

1
Emiliano

J'ai ce problème parce que j'ai bêtement oublié d'inclure l'extension de fichier (.pem) lors de la fourniture du chemin de fichier pour local_cert.

0
spybart

Dans mon cas, le problème était avec mon mac (OSX Sierra). J'ai téléchargé php et cert sur mon serveur, l'ai exécuté et la notification a été envoyée.

0
stackOverFlew

quelques vérifications:

  1. le jeton de l'appareil doit être - sans spaces et sans < ou >
  2. assurez-vous que le chemin du certificat est correct et expiré.
  3. assurez-vous que la phrase secrète que vous utilisez est celle que vous avez utilisée pour créer le certificat
0
Bhavin Rana

J'ai eu ce problème. Disparu après avoir accordé une autorisation d'écriture à "tout le monde" pour le fichier .pem.

0
Toxic Brain