Google Play 게임즈는 오픈 베타 버전입니다.

무결성 보호

초대된 개발자는 여러 무결성 보호 기능에 액세스할 수 있습니다. Play Integrity API와 자동 무결성 보호는 Google Play 게임즈와 모바일 플랫폼 모두에서 작동합니다.

Play Integrity API

Play Integrity API를 사용하면 잠재적으로 위험하고 허위일 가능성이 있는 상호작용으로부터 게임을 보호하고, 적절한 조치를 취해 사기, 속임수, 무단 액세스와 같은 공격 및 악용을 줄일 수 있습니다. 게임 백엔드 서버는 배포 채널(Play 스토어를 통해 라이선스가 부여되거나 설치됨), 애플리케이션 패키지(어떤 방식으로든 조작되거나 수정되지 않음) 및 기기 자체(예: 루팅되거나 보안 침해된 기기가 아님)와 관련된 신호를 수신할 수 있습니다. 이는 사용자가 다른 가상 환경이 아닌 Google Play 게임즈를 사용한다는 신뢰할 수 있는 신호를 제공하는 유일한 Google 지원 솔루션입니다. 이는 다음 작업에 도움이 됩니다.

  • Google Play에서 APK가 배포되고 설치되도록 보장하여 무단 액세스 방지
  • 게임 백엔드 서버가 수정되지 않은 바이너리와 상호작용함을 확인하여 APK 조작 방지
  • 새로 게시된 x86 바이너리가 Google Play 게임즈 가상 환경에서 실행되고, 지원되지 않는 표시 경로에서 쉽게 악용되지 않도록 보장

Play Integrity API는 암호화된 토큰에 여러 신호를 한데 모읍니다. 그리고 Google Play 무결성 검사를 통과한 정품 Android 기기와 가상 환경에 긍정적인 무결성 확인 결과를 제공합니다. 사용자가 인앱 상품을 구매하거나 게임에서 사용자 점수를 저장하는 등 앱에서 중요한 게임 이벤트를 실행하는 중에는 Play Integrity API를 사용하는 것이 좋습니다. 미리 정해진 시간에 API를 호출하는 등 사전 정의된 방식으로 API를 사용하는 것은 권장되지 않습니다.

API는 최고 수준의 유연성을 제공하지만, 신뢰할 수 있는 서버에서 추가 코드를 실행해야 합니다. 기기 내 유효성 검사는 안전하지 않으므로 권장되지 않습니다. 전체 솔루션에는 무결성 검사와 응답 유효성 검사에 필요한 기반이 되는 서버 측 구성요소가 포함되어야 합니다. 그리고 바이너리 예/아니요 결정을 기기에 다시 보내는 대신 Play Integrity API에서 제공하는 결과에 따라 애플리케이션 동작을 미세하게 조정하는 것을 적극 권장합니다.

Play Integrity API는 SafetyNet Attestation API(SNAA)와 Play 앱 라이선스 API를 모두 대체합니다. SNAA는 Google Play 게임즈의 무결성을 확인할 때 부정적인 신호만 반환하기 때문에 Google Play 게임즈와 호환되지 않습니다.

기기 무결성 필드

deviceIntegrity 필드에는 기기가 앱 무결성을 얼마나 잘 시행할 수 있는지 나타내는 단일 값 deviceRecognitionVerdict가 포함됩니다. 기본적으로 deviceRecognitionVerdict에는 다음 라벨 중 하나가 있을 수 있습니다.

  • MEETS_DEVICE_INTEGRITY: 앱이 Google Play 서비스와 함께 Android 기기에서 실행됩니다. 기기는 시스템 무결성 검사를 통과했고 Android 호환성 요구사항을 충족합니다.
  • MEETS_VIRTUAL_INTEGRITY: 앱이 Google Play 서비스를 통한 가상 Android 환경에서 실행되며 현재 Google Play 게임즈로 제한됩니다. 환경은 핵심 Android 호환성 요구사항을 충족하고 Google Play 무결성 검사를 통과했습니다.
  • 라벨 없음(예: 빈 값): 앱이 공격(예: API 후킹)이나 시스템 손상(예: 루팅됨) 징후가 있는 기기에서 실행되거나 Google Play 무결성 검사를 통과하지 못한 실제 기기가 아닌 기기(예: 에뮬레이터)에서 실행됩니다.

Play Integrity API는 deviceRecognitionVerdict 라벨 MEETS_VIRTUAL_INTEGRITY를 사용하여 게임이 Google Play 게임즈에서 실행 중임을 나타냅니다. 다음은 Play Integrity API의 통과 응답 예입니다.

deviceIntegrity: {
    // "MEETS_VIRTUAL_INTEGRITY" indicates the game is running on Google Play Games
    deviceRecognitionVerdict: ["MEETS_VIRTUAL_INTEGRITY"]
}

Google Play 게임즈에서 유효성 검사 로직이 MEETS_VIRTUAL_INTEGRITY 라벨을 검사해야 합니다.

모바일에서도 사용 가능한 크로스 플랫폼 게임인 경우 유효성 검사 로직이 MEETS_DEVICE_INTEGRITY 라벨도 검사해야 합니다.

자세한 내용은 Play Integrity API 문서를 참고하세요.

자동 무결성 보호

자동 무결성 보호는 게임이 실행될 때마다 Google Play에서 추가하는 런타임 검사입니다. 조작되었거나 Google Play를 통해 설치되지 않은 게임은 자동 무결성 보호를 통해 실행되지 않도록 차단될 수 있습니다. 자동 무결성 보호는 기기를 검사하지 않으므로, Play Integrity API를 사용하여 기기 무결성 상태를 가져와야 합니다.

자동 무결성 보호는 다음 기능을 사용하여 무결성을 보호하는 데 도움이 됩니다.

  • Google Play를 통한 설치 요구: 앱이 Google Play에서 설치되었는지 확인하는 검사를 추가합니다. 검사를 통과하지 못하면 사용자에게 Google Play에서 앱을 다운로드하라는 메시지가 표시됩니다. 이 추천 기능은 기본적으로 사용 설정되어 있지만 사용 중지할 수도 있습니다. 이 기능을 사용 중지하면 유료 앱의 불법 복제 방지 기능이 사용 중지됩니다.
  • 수정 제한: 앱이 수정되지 않았는지 확인하는 검사를 추가합니다. 검사를 통과하지 못하면 앱이 실행되지 않습니다. 이 기능은 항상 사용 설정되어 있으며 사용 중지할 수 없습니다.
  • 리버스 엔지니어링 제한: 런타임 검사를 삭제하기 어렵게 하는 난독화와 기타 고급 기술을 추가합니다. 이 기능은 항상 사용 설정되어 있으며 사용 중지할 수 없습니다.

자동 무결성 보호는 개발자가 선택해야 사용할 수 있으며 별도의 코드 변경이나 개발자 작업이 필요하지 않습니다. 데이터 또는 인터넷 연결 여부와 관계없이 보호가 실행되고 서버 측 구성요소는 필요하지 않습니다. 참고로, 기기의 Play 스토어 앱이 장시간 오프라인 상태인 경우 'Google Play를 통한 설치 요구' 검사 시 주기적으로 데이터 연결이 필요합니다.

기타 Google Play 게임즈 고려사항

Play는 게임을 보호하는 데 도움이 되는 무결성 제품 컬렉션을 제공합니다. 사용 가능한 제품에 관한 자세한 내용은 Play 무결성 문서를 참고하세요. 이 섹션에서는 Google Play 게임즈에서 이러한 제품을 사용할 때 특별히 고려해야 할 사항을 중점적으로 설명합니다.

배포에서 신뢰할 수 없는 기기 제외

Google Play Console에는 무결성 검사를 통과하지 못한 기기의 경우 Google Play에서 앱을 설치할 수 없도록 차단하는 설정이 있습니다.

이 기능은 현재 Google Play 게임즈와 호환되지 않으며 플랫폼에 게임이 배포되지 않도록 합니다. 기기 카탈로그에서 이 제외 규칙을 사용 설정하지 마세요.

Play Integrity API

Play Integrity API는 deviceRecognitionVerdict 라벨 MEETS_VIRTUAL_INTEGRITY를 사용하여 게임이 Google Play 게임즈에서 실행 중임을 나타냅니다. 다음은 Play Integrity API의 통과 응답 예입니다.

deviceIntegrity: {
    // "MEETS_DEVICE_INTEGRITY" is one of several possible values.
    deviceRecognitionVerdict: ["MEETS_VIRTUAL_INTEGRITY"]
}

유효성 검사 로직이 MEETS_VIRTUAL_INTEGRITY 라벨을 검사하도록 합니다.

자세한 내용은 Play Integrity API 문서를 참고하세요.