En este artÃculo te mostraré cómo configurar el cliente JWT de sgcWebSockets para enviar solicitudes HTTP/2 autenticadas a los servidores Apple Push Notification.
Asegura tus comunicaciones con el servicio Apple Push Notification (APNs) usando tokens de autenticación sin estado.
Primero debes obtener una Encryption Key y un Key ID desde tu Apple Developer Account. Tras un registro correcto, obtendrás una cadena de 10 caracteres con el Key ID y una Authentication Token signing key con extensión .p8.
Debes usar el cliente JWT de sgcWebSockets para generar un JWT con ES256 como algoritmo. El token no debe generarse para cada solicitud HTTP/2; no debe refrescarse antes de 20 minutos ni después de 60 minutos.
Configurar el cliente JWT
Configura el cliente JWT con los siguientes valores:
- JWTOptions.Header.Algorithm: es el algoritmo de cifrado usado para firmar el token. APNs solo soporta el algoritmo ES256.
- JWTOptions.Header.kid: es el Key ID de 10 caracteres obtenido de tu cuenta de desarrollador.
- JWTOptions.Payload.iss: el valor del Team ID de 10 caracteres que usas para desarrollar las apps de tu empresa. Obtén este valor de tu cuenta de desarrollador.
- JWTOptions.Payload.iat: el tiempo "issued at", cuyo valor indica el momento en el que se generó este token JSON. EspecifÃcalo como número de segundos desde Epoch en UTC. El valor no debe estar a más de una hora del momento actual.
- JWTOptions.RefreshTokenAfter: establece el valor en segundos a 40 minutos (60*40).
Usar conexiones basadas en token requiere enviar el apns-topic con el valor del bundle ID/app id de tu app (ejemplo: com.example.application).
oHTTP := TsgcHTTP2Client.Create(nil);
oHTTP.TLSOptions.IOHandler := iohOpenSSL;
oJWT := TsgcHTTP_JWT_Client.Create(nil);
oHTTP.Authentication.Token.JWT := oJWT;
oJWT.JWTOptions.Header.alg := jwtES256;
oJWT.JWTOptions.Header.kid := 'apple key id';
oJWT.JWTOptions.Payload.iss := 'issuer';
oJWT.JWTOptions.Payload.iat := StrToInt64(GetDateTimeUnix(Now, False));
oJWT.JWTOptions.Algorithms.ES.PrivateKey.LoadFromFile('AuthKey_**.p8');
oJWT.JWTOptions.RefreshTokenAfter := 60*40;
oHTTP.Request.CustomHeaders.Clear;
oHTTP.Request.CustomHeaders.Add('apns-topic: com.example.application');
