안녕! '럭키 피스'를 개발중인 1인 개발자 '인헤이븐'이야.


그동안 혼자서 개발하느라 여기서 정보를 많이 얻었을 수 있었는데 나도 출시를 곧 앞두고 있어서 홍보 겸 정보 공유하려고해!


나도 개발일지 작성하고싶었는데 계속해서 바뀌는 작업에 엄두가 안났지 뭐야.. 개발하면서 일지랑 정보글 작성하시는 분들 정말 존경해,,!


글이 길어서 2번으로 나눠올릴게!


✦ 일단 게임 소개를 하자면 로그라이크 RPG인 '럭키 피스'는 선택과 운빨이 중요한 게임이야.


0ab2df21e9d707817cbec6bd1fd20d3019269901cc809a53e6edbdd020891c06f0c1ff


과금없이도 최종 성장이 가능하도록 부담없이 즐길 수 있는 게임이고 진행할수록 매번 테마가 바뀌는 식이야.


클릭만 하면 되는 게임이라 어렵진 않겠지만 클리어를 위해선 선택의 중요성이 높아지지.


1ebec223e0dc0bae61abe9851ede2a383ffa23e6d03303c6af81b111281f8540d09f474fa973bd7cf21ebec223e0dc0bae61abe9851ede2a383ffa23e6c8095fd9ef969f280c22bf633fb23d56c77b091ebec223e0dc0bae61abe9851ede2a383ffa23e6dd280787f19fb8363625827da71e811b034b6632


일단 정보 공유글이니 간단한 홍보는 여기까지하고..


나도 이것저것 해보면서 해결이 된 부분에 대해서 공유하는거라 정보에 문제가 있으면 댓글로 추가 의견달아줘!




✦  파이어베이스를 활용한 인앱결제 >> 클라우드 펑션 >> 앱체크 >> 영수증 검증 시스템 구현하기


24b0d121e09c28a8699fe8b115ef046c64f2214b


나는 현재 파이어베이스를 서버로 사용해서 유료 재화 데이터를 저장중이야.


[게임]에서 구매 호출 >> [Functions]에서 [App Check]가 포함된 서버 함수를 통해 영수증 검증 완료 >> [Firestore Database]에 데이터를 저장 하는 방식이야.




[0. 선행 단계 ]


영수증검증을 사용하려면 먼저 서버에서 검증을 대표할? 서비스 계정이 필요해서

구글 서버 api를 호출에 필요한 access token을 발급하고 구글 플레이 콘솔에 계정을 추가로 등록해야해.



0-1. 플레이콘솔에서 [Play 게임즈 서비스 설정] 에서 구글 클라우드 플랫폼을 누르고


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e37d388829d1bf343664e6e30498e9d5833d9aec98e3e



0-2. [API 및 서비스]에서 [Google Play Android Developer API] 검색 후 활성화 시키기


24b0d121e09c28a8699fe8b115ef046b65669435



0-3. [IAM 및 관리자]에서 [서비스 계정] 누르고 서비스 계정 만들기 클릭 >> 기본 정보 입력 후 서비스 계정 생성

24b0d121e09c28a8699fe8b115ef046eca4fc9fe


0-4. 서비스 계정 생성 확인

ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e36d38b8f9d290dca04e4a7ff7815eb3a258077822f7f57


0-5. [키]를 누르고 [키 추가] >> JSON용 비공개 키 만들기 >> *서비스계정 공개 키 JSON 파일 저장

ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e37d38e8b9d85cf5cbbd325a500de1b8e563e088c2fbc


0-6. 방금 만든 서비스 계정의 세부정보에 들어가**서비스계정 이메일 기억하기

ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e36d38b889d334de4f8cbc49d8b3d8b32ff22314c2f9a


0-7. 다시 구글플레이콘솔로 돌아와 [사용자 및 권한] 에서 [신규 사용자 초대]


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e36d38a8a9d4c2fe8daeb3f2d0f5d00914dd664100cfe



0-80-6에서 기억한 서비스 계정 이메일 주소 입력하고 계정 권한 아래와 같이 설정 후 [사용자 초대] 클릭하여 반영하기.

ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e37d3888a9d080c83393ee244afd106b95737629dc529


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e37d3888a9d090c83393ee244afd106b957336794c82d27



[ 1. App Check ]

파이어베이스에는 변조된 기기를 체크하는 [App Check]가 있어. 선택사항이긴 하지만 결제에 대한 부분이라 적용했어.

(앱 체크 설정하는 법은 따로 확인해봐!)


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e36d3898e9df1aa5efec1e3ec5db82395ec043899702f


24b0d121e09c28a8699fe8b115ef046c63f82f4a94


>> 파이어베이스에 앱 체크가 적용 후 확인된 요청으로 받아오고 있는 상태.

* 서비스에 앱체크를 적용하려면 서비스마다 별도로 적용을 눌러줘야해.


 확인사항

앱체크는 유효한 계정이 아니면 파이어베이스 접근을 거절해. 즉, 앱에 앱체크 계정 체크가 안되면 모든 접근이 거절되는거같아. 

실제로 적용 후 "FirestoreException: Missing or insufficient permissions." 이라는 오류가 발생했어.


1-1. 규칙 재설정

파이어스토어 데이터베이스를 들어가서 [규칙] 안에 해당 정보 입력


rules_version = '2';

service cloud.firestore {

  match /databases/{database}/documents {

    match /{document=**} {

      allow read, write: if request.auth != null;

    }

  }

}

24b0d121e09c28a8699fe8b115ef0464d08ee1cc




1-2. 파이어베이스 초기화 시 앱체크 적용 (코드)

파이어베이스 초기화 시 아래 코드를 실행하면 앱체크가 적용된 계정이 접근할 수있어.


여기서 참고할게 테스트가 필요한 [유니티 에디터]에서 적용하는 방법이야.

안드로이드와 ios와 달리 기기 체크가 안되는 [유니티 에디터]에선 아래 "Debug Token"에 토큰을 따로 넣어줘야해.


void Awake()
{
instance = this;

#if UNITY_EDITOR
Debug.Log("+ UNITY_EDITOR 환경입니다.");
DebugAppCheckProviderFactory.Instance.SetDebugToken("Debug Token");
FirebaseAppCheck.SetAppCheckProviderFactory(DebugAppCheckProviderFactory.Instance);
#elif UNITY_ANDROID
Debug.Log("+ UNITY_ANDROID 환경입니다.");
FirebaseAppCheck.SetAppCheckProviderFactory(PlayIntegrityProviderFactory.Instance);
#elif UNITY_IOS
Debug.Log("+ UNITY_IOS 환경입니다.");
FirebaseAppCheck.SetAppCheckProviderFactory(AppAttestProviderFactory.Instance);
#endif

Debug.Log("[AppCheck] Play Integrity Provider 설정 완료");
}



1-3. 유니티 에디터에 앱체크 적용


1-3-1. 앱 체크에 들어가 등록된 앱의 [디버그 토큰 관리] 클릭

ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e36d38f899d0371c60d15644b469a8a6497ec11afea36


1-3-2. [디버그 토큰 추가] 클릭 후 오른쪽 아래 [토큰 생성]을 누르면 "Debug Token"이 나옴.

Debug Token은 저장을 누를 시 바로 암호화로 안보이니 따로 복사 후 저장 클릭.


ac5939a70001b942813e33669735c1bcc2a977c21c773585f0dabed5e42e074dc2d2552d4ea0fd29c0a114c2d1971e9e38c33a5ab8c607f1b63a8e36d38f899d027ec60d15644b469a8a6497ec11aeee84


1-3-3. 1-2 코드에 "DebugToken" 값 붙여넣기 >> 에디터에서도 파이어베이스 데이터 접근 가능


#if UNITY_EDITOR
Debug.Log("+ UNITY_EDITOR 환경입니다.");
DebugAppCheckProviderFactory.Instance.SetDebugToken("DebugToken"); << 여기에 토큰 값 입력
FirebaseAppCheck.SetAppCheckProviderFactory(DebugAppCheckProviderFactory.Instance);



>> 2부에서 이어짐.