Overview
com.111percent.gamebase.policies.user-agreement
이게 뭔가요?
게임에 필요한 유저 동의를 관리하기 위한 패키지예요. 이용약관(Terms of Service), 개인정보처리방침(Privacy Policy), iOS ATT(App Tracking Transparency), Google UMP(User Messaging Platform)를 포함해요.
*TOS(Terms of Service, 이용약관) & PP(Privacy Policy, 개인정보처리방침):
- 게임 서비스 운영에 필요한 동의 사항
- 개인정보 보호법 준수를 위한 개인정보의 수집, 사용, 공유 처리 방침
*iOS ATT(App Tracking Transparency):
- 유저 및 기기 정보를 추적하기 위해 사용자의 허가를 요구하는 프로세스
- iOS 광고 ID(IDFA)에 액세스하기 위해 유저로부터 명시적인 동의를 얻는 과정
*CMP(Consent Management Platform):
- 유저로부터 개인 데이터를 수집하고 처리하는 데 필요한 동의를 관리하고 기록하는 도구입니다. 유럽 일반 데이터 보호 규정(GDPR)과 같은 개인정보 보호 및 데이터 보호 규정을 준수하는 데 필수입니다.
*Google UMP(User Messaging Platform):
- Google UMP는 검증된 CMP의 한 종류입니다. GDPR 대응을 위한 프로세스입니다.
참고 링크
- ATT: https://developer.apple.com/documentation/apptrackingtransparency?language=objc
- CMP, UMP: https://support.google.com/adsense/answer/13790256?sjid=8613248518763426415-AP
왜 필요한가요?
법적 요구사항 준수, 게임 운영, 광고 수익에 필요한 유저의 동의 UI와 동의 이력 관리 기능을 제공합니다.
동의 이력은 디바이스에 저장하여 관리합니다.
어떻게 사용하나요?
1. 설정 및 초기화
Percent > Policies > Focus UserAgreement Config 메뉴 클릭 혹은 Assets/Percent/Resources/UserAgreementConfig.asset 클릭하기
‼️필수 설정 목록
AdMob 개인 정보 보호 및 메세지 설정
AdMob 개인 정보 보호 및 메세지 설정 요청하기
슬랙 채널: #team_business
@biz * [누구] - {요청자} * [무엇] - {해당 프로젝트}의 AdMob 대시보드에서 UMP(User Messaging Platform) 설정 * [이유] - GDPR 대응
개인 정보 보호 및 메세지를 설정하지 않으면 발생하는 native error
GoogleUMP::onConsentInfoUpdateFailure ERROR: Publisher misconfiguration: Failed to read publisher's account configuration; no form(s) configured for the input app ID. Verify that you have configured one or more forms for this application and try again. Received app ID: ca-app-pub-6194476983287254~1708813623.
Admob App Id 기입하기 - Admob App Id 목록 시트
이용약관 및 개인정보처리방침 회사 선택하기 - Percent, SuperMagic, Zzoo
Optional 설정 목록
- 기본값을 Override하여 ATT Localization 수정 가능
앱 실행 후, 초기화 메서드 호출하기
Splash Scene에서 호출 권장→ Title Scene에서 호출 권장
var initResult = await UserAgreementManager.InitializeAsync();
PLog.Debug($"InitResult:: {initResult.ToString()}");
switch (initResult.ErrorCode)
{
case ErrorCode.NetworkNotConnected:
// 네트워크 오류
// 팝업 보여주기: 네트워크 상태 확인 안내하기.
// 팝업 이후 로직: 다시 타이틀씬으로 돌아가서 초기화 재시도
PLog.Warning($"초기화 실패! {initResult.ErrorCode}");
return;
case ErrorCode.Timeout:
// 타임아웃
// 팝업 보여주기: 애플리케이션 종료 후 재시작 안내하기.
// 팝업 이후 로직: 애플리케이션 종료 (한 번 타임아웃이 난 경우에는 재시도해도 무조건 타임아웃이 발생하기 때문)
PLog.Error($"초기화 실패! {initResult.ErrorCode}");
return;
case ErrorCode.Cancelled:
PLog.Warning("클라이언트 개발자가 전달한 취소토큰에 의해 작업이 취소 되었습니다.");
// 게임 클라이언트 개발자에 의해 취소된 상황, 취소 처리 로직 수행하기
return;
case ErrorCode.Fatal:
// 알 수 없는 에러
// 팝업 보여주기: 애플리케이션 종료 후 재시작 안내하기.
// 팝업 이후 로직: 애플리케이션 종료
// 로그 확인하기... 로그 확인했음에도 불구하고 해결책이 안나오면, 기술지원팀에 문의하기
PLog.Error($"초기화 실패! {initResult.ErrorCode}");
return;
case ErrorCode.None:
// 초기화 성공
PLog.Info("초기화 성공!");
break;
}
2. 초기화 이후, 앱 실행 상황
Important
1 -> 2 -> 3 순서를 지켜주세요
- UMP가 필요한 상황이면 UI를 보여주는 메서드 호출하기
await UserAgreementManager.UmpService.ShowConsentFormIfRequiredAsync();
- ATT가 필요한 상황이면 ATT를 요청하는 메서드 호출하기
await UserAgreementManager.AttService.RequestAttIfRequiredAsync();
- 광고 SDK 등의 3rd party SDK 초기화 수행하기
Caution
MaxMediation 초기화는 초기화를 읽어주세요.
flowchart LR
Start(On First-Time App Start) --> PushNotificationRequest["Push Notification Permission Request (iOS only)"]
PushNotificationRequest --> GDPRCheck{In GDPR Region?}
GDPRCheck -- Yes --> GoogleUMPFlow[Google UMP Flow]
GDPRCheck -- No --> ATTPrompt["ATT Prompt (iOS only)"]
GoogleUMPFlow --> ATTPrompt
ATTPrompt --> SDKInit["SDK Initialization (Mediation, MMP, etc.)"]
3. 플랫폼 (Google, Apple, 등) 로그인 및 연동 상황
- 유저의 플랫폼 로그인 혹은 플랫폼 연동 버튼 클릭
- Percent Consent가 필요한 상황이면 UI를 보여주는 메서드 호출하기
await UserAgreementManager.PercentConsentService.ShowConsentFormIfRequiredAsync();
- 플랫폼 로그인 혹은 플랫폼 연동 로직 수행
private void PlatformLoginSample()
{
if (UserAgreementManager.PercentConsentService.IsAuthorized() is false)
{
// 유저가 Percent Consent에 동의하지 않고 Form을 닫은 상황.
// 유저에게 Percent Consent Form에 동의해야 플랫폼 로그인 할 수 있다는 안내하고,
// 다시 PercentConsent 동의를 받아야 한다.
return;
}
// 플랫폼 연동 혹은 플랫폼 로그인을 수행한다.
}
flowchart LR
SignInRequest["Platform Sign-In Request (Google, Apple, etc.)"] --> GDPRCheck{In GDPR Region?}
GDPRCheck -- Yes --> SignInProcess[Sign-In Process]
GDPRCheck -- No --> TOSPPFlow[TOS/PP Flow]
TOSPPFlow --> SignInProcess
4. 플레이어에게 정책 다시 보여주기
플레이어는 앱 실행 중간에 언제든 게임의 정책을 확인할 수 있어야 합니다.
예를 들면 메인씬의 설정창에 아래의 버튼을 만듭니다
개인정보처리방침(Privacy Policy)
이용약관(Terms of Service)
// _showTermsOfServiceBtn, _showPrivacyPolicyBtn 버튼을 멤버로 가지고 있는
// MonoBehaviour 객체 상황을 전제합니다.
private void OnEnable()
{
// 버튼 클릭할 때 실행할 이벤트 등록
_showTermsOfServiceBtn.onClick.RemoveListener(OnClickShowTermsOfService);
_showTermsOfServiceBtn.onClick.AddListener(OnClickShowTermsOfService);
_showPrivacyPolicyBtn.onClick.RemoveListener(OnClickShowPrivacyPolicy);
_showPrivacyPolicyBtn.onClick.AddListener(OnClickShowPrivacyPolicy);
}
private void OnClickShowTermsOfService()
{
// '서비스 이용약관'을 보여줍니다.
UserAgreementManager.ShowTermsOfService();
}
private void OnClickShowPrivacyPolicy()
{
// '개인정보처리방침'을 보여줍니다.
// GDPR 적용 유저에게는 플레이어에게 UMP(User Messaging Platform) 동의 UI를 보여줍니다.
UserAgreementManager.ShowPrivacyPolicy();
}
Change Log
2.2.1
🐛 이슈 해결:
- 초기화 할 때, GDPR 동의 이력이 삭제되는 버그 해결
2.2.0
✨ 추가됨:
- 서로 다른 AdMobAppId 여러개 설정 방지 기능. 빌드 단계에서 검증하여 실패처리
- 팝업 없이 바로 이용약관, 개인정보처리방침을 보여주는 기능 추가.
- ShowTermsOfService: 이용약관 링크 열기
- ShowPrivacyPolicy: GDPR 국가 대상으로는 UMP 팝업 노출. 그 외 국가 대상으로는 개인정보처리방침 링크 열기
🔧 변경됨:
- UserAgreementManager 초기화 응답 결과 제공.
- 초기화 결과에 따라 게임 클라이언트에서 처리 가능
- UMP 초기화 시도 조건 변경
- 기존: 전체 유저
- 변경: 디바이스 시스템 설정 GDPR 국가로 설정한 유저
- UMP 노출 조건 변경
- 기존: 유럽 국가에서 네트워크 접속
- 변경: 유럽 국가에서 네트워크 접속 + 디바이스 시스템 설정 GDPR 국가로 설정한 유저
2.1.1
🐛 이슈 해결:
- Android: 중국어 환경에서 영어로 노출되는 이슈 해결
2.1.0
✨ 추가됨:
- PercentConsnetForm에서 사용하는 Font 패키지 내장
⛔ 제거됨:
- PercentConsnetForm의 Font 및 내용 수정 옵션 제거
2.0.3
🐛 이슈 해결:
- 초기화 직후 Google UMP(User Messaging Platform) 팝업을 보여줄 경우, 팝업이 닫힐때까지 await로 기다리지 못하는 이슈 해결
2.0.2
🐛 이슈 해결:
- UnloadAsset 에러 해결
2.0.1
🐛 이슈 해결:
- 특정 프로젝트에서 초기화 끝나지 않던 이슈 해결
✨ 추가됨:
- (Optional) 초기화 로직에 CancellationToken 파라미터 추가
2.0.0
🔑 필수 조건:
- UserAgreementConfigAsset 설정
- Admob App Id 기입하기
- 이용약관 및 개인정보처리방침 회사 선택하기
- Localization Font 에셋 설정하기
✨ 추가됨:
- Percent Consent Form(사내 자체 제작 동의 Form UI) 관련 기능 추가
- iOS ATT(App Tracking Transparency) 관련 기능 추가
- Google UMP(User Messaging Platform) 관련 기능 추가
⛔ 제거됨:
- V1에 있던 대부분의 API들…
- UserAgreementConfigAsset 설정
1.1.0
- ILocalizationService 기본 구현체 제공
- DEV, QA, PROD 환경별 fallback data 제공
- 초기화 인터페이스 변경
- GameId는 Percent Scripting - Configuration 의 설정에서 읽도록 수정
- 1.1.0 이전 버전에서는 초기화할 때, GameId를 수동으로 주입했음
- GameId는 Percent Scripting - Configuration 의 설정에서 읽도록 수정
- DEV, QA, PROD 환경별 동의 정보 URI 커스텀 설정 제공
- 일부 사용자 예외 메세지 수정
1.0.0
신규 버전