Apple PHP(7) Push Server
Ik ben bezig met een iOS en Android app waar ik push notificaties in wil kunnen ontvangen.
Ik heb een dedicated server en wil graag in PHP (7) een push server bouwen.
Wat uiteindelijk de bedoeling is:
Devices worden op de server geregistreerd als zijnde individuele devices maar ook bij welke group ze eventueel horen. Op de server wordt een badge count bijgehouden per device, ook word er op de server bijgehouden per device of het stille notificaties wilt ontvangen of niet.
Zodra er een push melding wordt verstuurd vanaf een device wordt deze naar de server gestuurd die vervolgens bepaald naar welke individuele device of group devices het gestuurd moet worden.
Een payload of meerdere payloads wordt gecreëerd met de juiste badge count en of deze still afgeleverd moet worden. Vervolgens wordt de payload(s) afgeleverd bij de APNS servers van Apple die het verder verwerken.
Wat mij niet duidelijk is:
Nu is mij het laatste gedeelde van het proces, het afleveren van de push notificatie bij de APNS servers van Apple niet duidelijk. (dit geld ook voor android maar laten we bij iOS beginnen).
- Hoe maak ik een verbinding met de APNS server van Apple?
- Hoe hou ik de verbinding tussen mijn server en de APNS server open (zoals hieronder aangegeven)?
- Mijn push payloads zijn dynamisch omdat ik een eigen badge count bij houd op de server en ook of een gebruiker een stille notificatie wilt ontvangen of niet. Dus als ik een push melding wil sturen naar een groep devices dan kan de payload van een push melding met de zelfde melding toch per device verschillend zijn van elkaar. Kan ik deze payloads per stuk verzenden of moet ik deze in een soort queue zetten om ze vervolgens in een keer te verzenden?
Op de developer website van Apple staat het volgende hierover:
Quote:
Connections
The first step in sending a remote notification is to establish a connection with the appropriate APNs server:
- Development server: api.development.push.apple.com:443
- Production server: api.push.apple.com:443
Your provider server must support TLS 1.2 or higher when creating the connection to the APNs servers. In addition, the connection must be authenticated with your provider client certificate, which you obtain from Member Center, as described in Creating a Universal Push Notification Client SSL Certificate.
The APNs server allows multiple concurrent streams for each connection. The exact number of streams is based on server load, so do not assume a specific number of streams. The APNs servers ignore HTTP/2 PRIORITY frames, so do not send them on your streams.
Best Practices for Managing Connections
Keep your connections with APNs open across multiple notifications; don’t repeatedly open and close connections. APNs treats rapid connection and disconnection as a denial-of-service attack. You should leave a connection open unless you know it will be idle for an extended period of time—for example, if you only send notifications to your users once a day it is ok to use a new connection each day. You can establish multiple connections to APNs servers to improve performance. When you send a large number of remote notifications, distribute them across connections to several server endpoints. This improves performance, compared to using a single connection, by letting you send remote notifications faster and by letting APNs deliver them faster.
You can check the health of your connection using an HTTP/2 PING frame.
Termination
If APNs decides to terminate an established HTTP/2 connection, it sends a GOAWAY frame. The GOAWAY frame includes JSON data in its payload with a reason key, whose value indicates the reason for the connection termination. For a list of possible values for the reason key, see Table 6-6.
Normal request failures do not result in termination of a connection.
The first step in sending a remote notification is to establish a connection with the appropriate APNs server:
- Development server: api.development.push.apple.com:443
- Production server: api.push.apple.com:443
Your provider server must support TLS 1.2 or higher when creating the connection to the APNs servers. In addition, the connection must be authenticated with your provider client certificate, which you obtain from Member Center, as described in Creating a Universal Push Notification Client SSL Certificate.
The APNs server allows multiple concurrent streams for each connection. The exact number of streams is based on server load, so do not assume a specific number of streams. The APNs servers ignore HTTP/2 PRIORITY frames, so do not send them on your streams.
Best Practices for Managing Connections
Keep your connections with APNs open across multiple notifications; don’t repeatedly open and close connections. APNs treats rapid connection and disconnection as a denial-of-service attack. You should leave a connection open unless you know it will be idle for an extended period of time—for example, if you only send notifications to your users once a day it is ok to use a new connection each day. You can establish multiple connections to APNs servers to improve performance. When you send a large number of remote notifications, distribute them across connections to several server endpoints. This improves performance, compared to using a single connection, by letting you send remote notifications faster and by letting APNs deliver them faster.
You can check the health of your connection using an HTTP/2 PING frame.
Termination
If APNs decides to terminate an established HTTP/2 connection, it sends a GOAWAY frame. The GOAWAY frame includes JSON data in its payload with a reason key, whose value indicates the reason for the connection termination. For a list of possible values for the reason key, see Table 6-6.
Normal request failures do not result in termination of a connection.
Alvast bedankt!
Michael
Gewijzigd op 05/04/2016 13:25:50 door Michael nvt
Hier iets aan.
Misschien heb je Bedankt voor de tutorial!.
Deze bron is al bekend en heb het ook meerdere keer gebruik van gemaakt.
Ik zal deze tutorial als voorbeeld gebruiken omtrent wat voor mij niet duidelijk is.
In de tutorial wordt een verbinding geopend:
Quote:
// Open a connection to the APNS server
$fp = stream_socket_client('ssl://' . $host . ':' . $port, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
$fp = stream_socket_client('ssl://' . $host . ':' . $port, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
En de connection word gesloten:
Quote:
// Close the connection to the server
fclose($fp);
fclose($fp);
Deze verbinding openen en sluiten wordt elke keer gedaan als de script gedraaid wordt (denk ik), dat kan dus aardig wat keren gebeuren als er veel notificaties gestuurd gaan worden. In mijn eerste post staat een referentie naar de developer website van Apple waar nadrukkelijk wordt gezegd dat je niet te vaak de verbinding met de APNS server moet openen en verbreken omdat dan je server geblokkeerd kan worden.
Mijn vraag is dus eigenlijk:
Hoe kan ik checken of er al een verbinding is gemaakt, zo niet maak dan een verbinding maar verbreek de verbinding niet als de notificaties zijn afgeleverd maar laat de verbinding zo lang mogelijk open.
BTW:
Ben nu voor iemand met een app bezig, ook ios. En daar moet de verbinding constant open blijven. Hiervoor gebruik ik nodeJS.
Gewijzigd op 05/04/2016 16:12:30 door Randy vsf
Enig idee hoe ik in PHP de verbinding open kan houden?
Sockets .
Heb er zelf geen ervaring mee.
PHP kent ook zoiets als Heb er zelf geen ervaring mee.