Apple Push (APNs) para Delphi e C++ Builder | eSeGeCe

Apple Push Notifications

Envie notificações push APNs a partir do Delphi via HTTP/2 para api.push.apple.com. Suporta autenticação por certificado e por token (JWT ES256).

TsgcHTTP2Client + TsgcHTTP_JWT_Client

Combine TsgcHTTP2Client (transporte HTTP/2) com TsgcHTTP_JWT_Client (emissão de token ES256) para acionar o APNs — a combinação recomendada pela Apple desde a aposentadoria do protocolo binário legado.

Classe do componente

TsgcHTTP2Client + TsgcHTTP_JWT_Client

Protocolo

APNs HTTP/2

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Standard / Professional / Enterprise

Assine um JWT, faça POST do alerta, verifique o status HTTP/2

Configure TsgcHTTP_JWT_Client com sua chave privada ES256 do APNs e os IDs de chave/equipe, vincule-o a TsgcHTTP2Client.Authentication.Token.JWT e faça POST do payload JSON para /3/device/<token>.

uses
  sgcHTTP, sgcBase_Helpers;

var
  HTTP2: TsgcHTTP2Client;
  JWT: TsgcHTTP_JWT_Client;
begin
  JWT := TsgcHTTP_JWT_Client.Create(nil);
  JWT.JWTOptions.Header.alg := jwtES256;
  JWT.JWTOptions.Header.kid := 'APPLE-KEY-ID';
  JWT.JWTOptions.Payload.iss := 'APPLE-TEAM-ID';
  JWT.JWTOptions.Payload.iat := StrToInt64(GetDateTimeUnix(Now, False));
  JWT.JWTOptions.Algorithms.ES.PrivateKey.LoadFromFile('AuthKey_XXX.p8');
  JWT.JWTOptions.RefreshTokenAfter := 40 * 60;

  HTTP2 := TsgcHTTP2Client.Create(nil);
  HTTP2.TLSOptions.IOHandler := iohSChannel;
  HTTP2.Authentication.Token.JWT := JWT;
  HTTP2.Request.CustomHeaders.Clear;
  HTTP2.Request.CustomHeaders.Add('apns-topic: com.example.app');

  HTTP2.Post(
    'https://api.push.apple.com/3/device/',
    '{"aps":{"alert":"hello","sound":"default"}}');
end;
// uses: sgcHTTP
TsgcHTTP_JWT_Client *JWT = new TsgcHTTP_JWT_Client(this);
JWT->JWTOptions->Header->alg = jwtES256;
JWT->JWTOptions->Header->kid = "APPLE-KEY-ID";
JWT->JWTOptions->Payload->iss = "APPLE-TEAM-ID";
JWT->JWTOptions->Algorithms->ES->PrivateKey->LoadFromFile("AuthKey_XXX.p8");

TsgcHTTP2Client *HTTP2 = new TsgcHTTP2Client(this);
HTTP2->Authentication->Token->JWT = JWT;
HTTP2->Request->CustomHeaders->Add("apns-topic: com.example.app");
HTTP2->Post("https://api.push.apple.com/3/device/", payload);

O que tem por dentro

Dois componentes cooperantes tratam o APNs de ponta a ponta — framing HTTP/2 e emissão de JWT.

Autenticação por token

JWTs ES256 assinados com sua chave privada Apple AuthKey_*.p8. O cliente JWT renova o token automaticamente a cada 40 minutos (a Apple exige rotação em menos de uma hora).

Autenticação por certificado

Para certificados universais legados, defina TLSOptions.CertFile + Password e limpe Authentication.Token.JWT. O handshake TLS autentica a conexão.

Produção / Sandbox

Aponte a URL para api.push.apple.com em produção ou api.development.push.apple.com para o sandbox — mesmo componente, apenas host diferente.

apns-topic + cabeçalhos

Defina Request.CustomHeaders para apns-topic, apns-priority, apns-push-type, apns-collapse-id, apns-expiration conforme a documentação da Apple.

Multiplexação HTTP/2

Uma única conexão TLS envia milhares de notificações por minuto — os streams HTTP/2 multiplexam as requisições. Verifique Response.Status por chamada para os resultados de entrega.

SChannel ou OpenSSL

Use iohSChannel no Windows para TLS em modo kernel (sem DLLs necessárias) ou iohOpenSSL para implantações de servidor multiplataforma.

Especificações e referências

Fontes autoritativas das APIs que este componente implementa.

Documentação e demos

Acesse a referência do componente, obtenha o projeto demo pronto para executar e baixe a versão de avaliação.

Ajuda online — TsgcHTTP2Client Referência completa de propriedades, métodos e eventos deste componente.
Projeto de demonstração — Demos\20.HTTP_Protocol\07.Apple_Push_Notifications Projeto de exemplo pronto para executar. Acompanha o pacote sgcWebSockets — baixe a versão de avaliação abaixo.
Documento técnico (PDF) Recursos, início rápido, exemplos de código para Delphi & C++ Builder e referências de fontes primárias — somente este componente.
Manual do usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.

Perguntas frequentes sobre Apple Push

Dúvidas comuns sobre o envio de notificações APNs a partir do Delphi e C++ Builder.

Combine um TsgcHTTP2Client (transporte HTTP/2) com um TsgcHTTP_JWT_Client (geração de tokens ES256). Configure o JWT client com seu key ID, team ID e chave privada .p8 do APNs, vincule-o a HTTP2.Authentication.Token.JWT, defina o header apns-topic e, em seguida, faça um POST do payload JSON para https://api.push.apple.com/3/device/<token>.
Ambas. Para autenticação baseada em token, o TsgcHTTP_JWT_Client gera JWTs ES256 a partir da sua chave AuthKey_*.p8 da Apple e os atualiza automaticamente (a Apple espera rotação dentro de uma hora). Para a autenticação legada por certificado, defina TLSOptions.CertFile e Password e limpe Authentication.Token.JWT, de modo que o handshake TLS autentique a conexão.
Sim. O TsgcHTTP2Client fala a API HTTP/2 do APNs que substituiu o protocolo binário descontinuado. Uma única conexão TLS multiplexa milhares de pushes por minuto sobre streams HTTP/2, e você lê Response.Status por chamada para os resultados de entrega. O TLS roda através do Windows SChannel (iohSChannel) ou OpenSSL (iohOpenSSL).
O sgcWebSockets suporta do Delphi 7 até o mais recente lançamento do Delphi e as versões correspondentes do C++ Builder, no Windows, macOS, Linux, iOS e Android. Baixe a versão de avaliação gratuita para integrar Apple Push Notifications no seu próprio projeto.

Pronto para enviar notificações APNs a partir do Delphi?

Baixe a versão de avaliação gratuita e integre o Apple Push Notifications às suas aplicações Delphi.