Google Play Stroe 출시 리젝 "발견된 문제: 부적절한 광고 정책 위반" 해결 방법

이미지
 안녕하세요. SRR입니다. 구글 리젝 사유 저도 참 궁금한데요~ 오늘은 Google Play Stroe 출시 리젝 발견된 문제 부적절한 광고 정책 위반 해결 방법에 대해 알아보려고 해요. 평화로운 주말 구글 개발자 콘솔 출시 요청을 마친 그날 두둥 저희에게 이런 메일이 도착했답니다... ^_ㅠ 캐서린(구글 검수 직원 이름으로 추측, 아니면 쏘리~ㅎㅎ)씨가 검수할 때 전체 이용가 게임에 포커 게임이 나온 것이지 뭐에요? 17세 이상을 권장 이용가로 설정했기 때문에 이런 사고는 없을 줄 알았는데 하필 캐서린이 게임 플레이할 때 도박 광고가 나오다니.... (캐서린 미워잉~!) 참고로 대한민국은 카지노 게임 서비스 자체가 불법이에요 (토막 상식 ㅎㅎ) 도박 신고는 국번없이 1366 입니다. 막이래 ㅋㅋ 바로 구글 애드몹 사이트의 [차단관리] - [민감한 카테고리]로 가줍니다. 여기서 디폴트값으로 도박 및 베팅, 주류에 대한 광고는 이미 차단되어있더라고요. 그런데 이게 몬일? ㅡ.ㅡ 카지노 게임이 허용된 것입니다!!!!!! (화르륵) 바로 우리 글로벌 자라나는 새싹들을 위해 카지노게임을 포함한 성, 대출, 성형수술과 같은 광고들을 차단해주기로 해요. 저희는 전체 이용가 게임으로쒀다가~ 구글의 광고 정책을 존중한답니다. 헤헷 ^^ 광고 수익이 감소하지만 혹시 우리 자라나는 청소년들이 성인용 광고에 노출되지 않도록 광고 콘텐츠 등급도 [청소년]으로 재설정 합니다. ^^ 그리고 캐서린에게 다시 검수를 요청하면 문제 해결 완료! 회원님들 모듀~ 아름다운 게임 문화를 위해 우리 모두 노력해보기로 해요! ^^ 지금까지 구글 플레이 스토어 출시 리젝 사유인 부적절한 광고 정책 위반에 대해 알아봤어요. 다음에도 좋은 기술 블로그 글을 많이 기대해주세요! 그럼 다음에 또봐요가랑~

[Unity] 제작한 디자인 소스를 유니티 프로젝트에 적용하기

이미지
안녕하세요~ PI Brain Battle 게임 UI 디자인을 맡은 S양 입니다. 보통 디자인 작업을 한다고 하면 포토샵, 일러스트, XD, 피그마 등등은 익숙하시죠? 저도 그랬답니다. 처음에는 피그마로 화면 디자인을 잡아 개발자 팀원에게 전달하려 했지만... 개발자 팀원이 디자인물을 보고 두 번 작업해야 하는 상황이 발생하기 때문에 개발언어인 Unity에서 디자인 작업을 하고 파일을 전달 하기로 했습니다. 본격적인 작업에 들어가기 전! 저희 팀은 작업 시간 단축을 위해 유니티 에셋 스토어 안 kit를 구매하여 사용했습니다. 그러나, 디자인 해 보신 분들이라면 알겠지만 소스는 100% 활용하기가 어려울 때가 많습니다. 직접 디자인이 필요한 경우가 더 많죠. 저희 팀의 경우 국가 캐릭터가 그러했습니다. (노가다가 필요했던 26개국의 캐릭터들..) Unity에서는 어떻게 등록하면 좋을까요? 1. 원하는 이미지를 png(배경 투명화)로 저장합니다. (경우에 따라 jpg(배경 있음)으로 저장하셔도 상관없지만, 앱 소스는 보통 배경과 어우러는 일이 많기 때문에 png를 추천합니다.) 2. 사용 중인 Unity 프로젝트 > assets 파일 경로에 제작한 이미지 파일을 옮겨줍니다. 예시 : (C:\Users\My project\Assets\GUI PRO Kit - Casual Game\ResourcesData\Sprite\Component) 저희 팀은 "GUI PRO Kit (이하생략)"을 사용했기 때문에 접근이 용이하도록 해당 파일 안에 제작한 이미지를 보관했습니다. assets 파일에 바로 보관하셔도 상관없습니다. 3. 제작 중인 Unity Project로 이동합니다. 4. Hierarchy 창에서 오른쪽 마우스를 클릭하고 UI > Image 레이어를 추가해 줍니다. 5. image 레이어가 선택되어 있는 중, Inspector 창에서 Image 속성에 Source Image 창을 클릭한 후, asset에서 등록한 파일명을 검색합니다. 6....

[Unity] 프리팹(Prefab)을 사용하여 동적 GameObject 생성하기

이미지
Unity에서 프리팹(Prefab)을 사용하여 동적으로 GameObject를 생성하는 방법에 대해 알아보자. 백단에서 데이터를 받아와 화면에 뿌려줘야 하는데 데이터의 양을 모르니 미리 GameObject를 생성해 둘 수 없는 경우가 있을 것이다. 이 경우, 프리팹(Prefab)을 사용하면 스크립트에서 GameObject 생성을 좀 더 수월하게 구현할 수 있다. 우선 프리팹을 새로 생성해준 뒤 동적으로 추가시킬 GameObject의 디자인과 기본 내용 등을 세팅해준다. 세팅이 완료된 프리팹을 사용하려는 스크립트에 프리팹을 연결해주면 스크립트 내에서  Instantiate()  함수를 이용해  프리팹 오브젝트를 불러와 사용할 수 있게 된다. (4번 사진 속,  GameObject rankingParentGO 부분) 스크립트에서 프리팹 GameObject를 원하는 내용으로 변경해서 사용하면 끝! 1. Create > Prefab 2. Prefab 내에 동적으로 추가할 오브젝트 세팅 3. 오브젝트에 연결된 스크립트에 생성한 프리팹(Prefab) 추가 4. 스크립트 내에서 프리팹 설정을 불러와 원하는 위치 & 내용 세팅

[Unity] IAP(In App Purchasing) 모듈을 사용하여 Google Play 인앱 결제 기능 구현

이미지
 Unity에서는 IAP모듈로 간단하게 인앱 결제 기능을 구현 할 수 있다. 1.      Unity 내부의 IAP 패키지를 설치한다.         Window - Package Manager - Packages: Unity  Registry - In App Purchasing - Install 2.      설치가 완료되면 결제 정보를 설정한다.          1) Project Settings 를 눌러 설정 창으로 이동 한다.          창을 종료 했을 경우 Services - In-App Purchasing - Configure... 이동          2) 13세 미만 대상에게 결제를 허용할 거면 'Yes', 아니면 'No'를 선택한다.          3) 패키지를 설정을 활성화 시켜주고 License Key를 입력한다.          4) License Key는 Google Play Console 사이트에서 가져 올 수 있다.           https://play.google.com/console          Google Play Console - 수익 창출 설정 - 라이선스 3.      스크립트 작성          InitUnityIAP() :  결제 모듈 초기화,  UnityPruchasing.Initialize() : 초기화 프로세스를 시작,  리스너 구현 및 구성 정보 제공   ...

[Unity] Google Mobile Ads SDK 활용하여 광고 삽입하기

이미지
Unity에서 광고를 표시하기 위한 여러 플랫폼이 마련되어 있습니다. 이 중에서도 Google의 AdMob 은 광고 통합에 있어 선택받는 주요 플랫폼 중 하나입니다. (이번 ‘Pi Brain Battle’에서도 Google AdMob을 사용하였습니다.) Google Mobile Ads SDK 를 활용하게 되면, 앱 내에 광고를 간편하게 삽입할 수 있을 뿐만 아니라,  광고의 표시와 관리에 필요한 다양한 기능을 제공하여 광고 효율성을 극대화하는 데 도움을 줍니다. 이번 글에서는 Unity 환경에서 Google Mobile Ads SDK를 활용하는 방법과 주요 이벤트들 을 자세히 살펴보겠습니다. 우선 Google Mobile Ads SDK를 활용하기 전에, 아래 Google AdMob 사이트에서 광고를 생성하여 앱 ID 와 광고 단위 ID 를 발급받아야 합니다. https://admob.google.com/home/ ID를 발급받았다면, 아래 사이트에서 Unity Plugin을 다운로드합니다. https://github.com/googleads/googleads-mobile-unity/releases 저는 Google Mobile Ads Unity Plugin v8.5.1 를 사용하였습니다. (버전 8.5.0은 더 이상 사용되지 않으니, 위의 버전으로 업그레이드가 필요합니다.) unitypackage를 다운로드 받은 후, 프로젝트 내에 import 해줍니다. import를 완료한 후, Google Mobile Ads 설정 과정에서 발급받은 앱 ID를 입력합니다. (아직 앱 출시 전이라면 발급받은 ID 대신, sample ID를 입력해야 합니다.  sample ID를 입력하지 않을 경우, 의심스러운 결제 활동으로 계정이 정지되는 현상이 발생할 수 있습니다. sample App ID: ca-app-pub-3940256099942544~3347511713 ) 이제 설정은 완료되었으며, 광고를 표시하기 위한 스크립트를 작성해야 합니다. 이번 ‘Pi B...

[Back-end] JPA를 사용하여 통계 개발 with QueryDSL

이미지
 Pi Battle Game 을 개발하면서 JPA를 채택한 이유는 보일러플레이트(Boilerplate)를 방지하기 위해서였습니다. JPA가 구현체를 만들어주는 메소드들만 사용할 경우 아쉬운 점들이 있는데요 1. 직접적인 연관관계를 맺지 않는 join이 어렵습니다 (예 : 서브쿼리) 2. entity의 필드가 아닌 항목들을 select 하는 것에 한계가 있습니다. (예 : max, sum, rank) JPA에서 복잡도 높은 쿼리를 구현하려면 어떻게 하면 될까요? 물론 어노테이션을 써서 native query 작성하면 되겠지만... 개발자의 자존심에 어쩐지 허락하지 않습니다. '비즈니스를 코드에 녹여서 쿼리 잔업을 줄이려고 기껏 JPA를 써놓고 네이티브 쿼리로 대체하겠다고?' '이 정도 쿼리면 뭐 많이 복잡한 쿼리도 아닌데 겨우 이 정도로 네이티브를 써야 하나...'  그래서 SRR이 채택한 방법은 바로 QueryDSL입니다. Query DSL과 JPA를 함께 사용한다면 아래와 같이 구현해주어야 합니다. (참고 : Spring Data JPA 공식 Docs ) (출처 : 이노그리드 공식블로그 ) 위 예시의 점선은 implements, 실선은 extends입니다.  JpaRepository는 빌드를 하더라도 그 구현체(implement)가 없기 때문에 Interface로서 사용하게 되어 있습니다. 대신, 런타임에 프록시를 이용해 동적으로 구현합니다. 이를 통해서 우리는 JpaRepository를 상속받은 Repository 인터페이스에서 QueryDslRepository를 상속받는 것으로 Spring Data JPA의 기능과 QueryDSL의 기능을 동시에 활용할 수 있습니다. 스프링은 JpaRepository 인터페이스를 상속받는 Repository 인터페이스를 찾으면, 이를 구현하는 프록시 객체를 생성하여 직접 기본 제공 기능을 구현합니다. 그리고 자동으로 QueryDslRepository을 상속받은 QueryDslReposit...