Google FCM HTTP v1 Delphi

· 컴포넌트

sgcWebSockets 2024.9.0부터 Google Firebase Cloud Messaging과 최신 API HTTP v1을 사용해 알림을 보내는 새 클라이언트 컴포넌트가 추가됐어요.

HTTP 및 XMPP에 대해 더 이상 사용되지 않는 FCM 레거시 API를 사용하는 앱은 최대한 빨리 HTTP v1 API로 마이그레이션해야 해요. 해당 API로 메시지 보내기(업스트림 메시지 포함)는 2023년 6월 20일에 더 이상 사용 안 됨으로 표시됐으며 2024년 7월 22일부터 서비스가 중단돼요.

지속적인 지원 및 새 기능 외에도 HTTP v1 API는 레거시 API에 비해 다음과 같은 장점이 있어요:

- 액세스 토큰을 통한 더 나은 보안. HTTP v1 API는 OAuth2 보안 모델에 따라 단기 액세스 토큰을 사용해요. 액세스 토큰이 공개되더라도 만료되기 전 약 1시간 동안만 악의적으로 사용될 수 있어요. 리프레시 토큰은 레거시 API에서 사용되는 보안 키보다 훨씬 덜 자주 전송되므로 캡처될 가능성이 훨씬 낮아요.

- 플랫폼 간 메시지를 더 효율적으로 사용자 지정. 메시지 본문의 경우 HTTP v1 API에는 모든 대상 인스턴스에 적용되는 공통 키와 플랫폼별 키가 있어 플랫폼 간에 메시지를 사용자 지정할 수 있어요. 단일 메시지에서 다른 클라이언트 플랫폼에 약간 다른 페이로드를 보내는 "재정의"를 만들 수 있어요.

- 새 클라이언트 플랫폼 버전에 더 확장 가능하고 미래 지향적. HTTP v1 API는 Apple 플랫폼, Android, Web에서 사용 가능한 모든 메시징 옵션을 완벽하게 지원해요. 각 플랫폼에는 JSON 페이로드에 자체 정의된 블록이 있으므로 FCM은 필요에 따라 새 버전과 새 플랫폼으로 API를 확장할 수 있어요.

Google FCM Delphi 클라이언트

Firebase Cloud Messaging(FCM)은 무료로 안정적으로 메시지를 보낼 수 있는 크로스 플랫폼 메시징 솔루션이에요.

FCM을 사용하면 새 이메일이나 기타 데이터를 동기화할 수 있다고 클라이언트 앱에 알릴 수 있어요. 사용자 재참여 및 유지를 위해 알림 메시지를 보낼 수 있어요. 인스턴트 메시징 같은 사용 사례의 경우 메시지는 최대 4096바이트의 페이로드를 클라이언트 앱에 전달할 수 있어요.

이 컴포넌트는 HTTP v1 API를 지원해요.

인증

Google FCM 컴포넌트 클라이언트는 다음 방법으로 Google 서버에 로그인할 수 있어요:

OAuth2

사용자가 자신의 계정으로 로그인하고 FCM 요청을 승인하는 웹 브라우저를 통해 로그인해요.


서비스 계정

Google이 제공한 개인 키를 사용해 요청에 서명함으로써 로그인해요. 이 방법은 사용자 상호작용 없는 자동화 서비스나 애플리케이션에 권장돼요.

새 서비스 계정이 생성되면 모든 설정이 포함된 JSON 파일을 다운로드할 수 있어요. 이 파일은 FCM 컴포넌트가 처리할 수 있어요. LoadSettingsFromFile 메서드를 호출하고 JSON 파일 이름을 인수로 전달하면 돼요. 

샘플

FCM과 JWT를 인증 방법으로 사용해 알림을 보내는 간단한 예시를 아래에서 확인하세요.

oFCM := TsgcHTTPGoogleCloud_FCM_Client.Create(nil);
oFCM.GoogleCloudOptions.Authorization := gcaJWT;
oFCM.LoadSettingsFromFile('sgcfirebase-7x92e-5c80b8506a6c.json');
oFCM.GoogleCloudOptions.JWT.Subject := GoogleFCM.GoogleCloudOptions.JWT.ClientEmail;
ShowMessage(
  oFCM.SendMessage('Project-id', 
  '{"message": {"topic": "news","notification": ' +
  '{"title": "Breaking News",' + 
  '"body": "New news story available."},"data": {"story_id": "story_12345"}}}')
);