모든 문서(일반 문서, 분류 문서, 파일(이미지, 사운드 등) 문서) 분류가 달려 있어야 합니다.

--Administrator (토론)

Active User 모듈 적용 가이드 (Android)

컴투스위키
이동: 둘러보기, 찾기
Com2uS 공통모듈 >> Active User >> Active User 모듈 적용 가이드 (iOS)

Active User 모듈 적용 가이드 (Android)

Active User 모듈 적용 가이드 (Unity3d)

>> Active User 모듈 레퍼런스 가이드 >> Active User 샘플 가이드 >> Active User FAQ


목차

역사

<작성법 참고>
Version Date SVN Revision 담당자 변경 사항
2.9.6 2020/09/25 - 최지수
  • Analytics 기능 클래스를 참조하는 내부 경로 설정 변경
  • DID 획득 성공 시 ModuleManager를 통해 hive-core 모듈로 DID를 전달하는 내부 로직 추가
  • setLogged API 호출로 hive-core 모듈 로그가 제어되도록 내부 로직 추가
2.9.4 2020/06/16 - 김현석
  • HIVE UI에서 사용하는 버튼의 유저 인터랙션 개선
2.9.3 2020/03/12 - 김현석
  • AndroidX와 호환되도록 라이브러리를 변경 가이드
  • 일부 Android 10 기기에서 권한 고지 팝업의 글자 크기가 다르게 표시되는 오류 수정
  • Android 기기에서 네트워크 단절 시 약관 동의가 정상적으로 진행되지 않는 오류 수정
2.9.2 2020/01/23 - 김현석
  • Google Play Service에서 Broadcast API와 install_referrer intent 서비스를 중단함에 따라 Play Install Referrer 라이브러리로 변경
    • 기존의 INSTALL_REFERRER 설정 반드시 제거 링크 참조
    • 새로운 install referrer API 반드시 적용 필요 링크 참조
  • 더이상 사용하지 않는 기능과 코드를 제거
2.9.1 2019/12/12 - 최지수
  • HIVE SDK v1 에서만 발생하는 이슈 수정
    • 초기화 전에 C2SModuleSocial_Show (type=requestPermission) 호출 시 앱 종료되는 이슈 수정
2.9.0 2019/10/16 - 최지수
  • 퍼널 로그(모듈 내부 기능) 전송 로직 추가
  • 퍼널 로그(앱 추가 다운로드 시점) 전송 기능 추가 (API 링크)
  • 권한 고지 팝업 노출 여부를 제어하는 기능 추가 (API 링크)
  • Android 권한을 요청하는 기능 추가 (API 링크)
  • Android 10에서 정상 동작하도록 대응
    • Android 10에서 권한 고지 팝업이 노출되지 않는 이슈 수정
  • 모든 웹뷰에서 더이상 쿠키를 사용하지 않도록 로직 변경
  • 앱 설치 후 권한 고지 정보 보기(API 링크)를 요청하고 나서도 초기화면 권한 고지 페이지가 노출되는 이슈 수정
  • 코드 상의 네트워크 통신을 위한 Url 문자열을 변조 처리
2.8.10 2019/10/07 - 최지수
  • 약관 상세보기 페이지에서 Android back 버튼 터치 시 약관 종료가 아닌 페이지 뒤로가기가 되도록 로직 수정
2.8.9 2019/06/25 - 최지수
  • 권한 고지 페이지 다해상도 UI 대응
  • 권한 고지 정보를 획득할 수 있는 기능 추가 [API 가이드]
  • 점검 팝업 버튼의 텍스트 색상 수정
  • C 플러그인 로직의 Android 64비트 시스템 대응
    • .c, .h 파일이 업데이트 되었습니다.
    • .a 라이브러리 파일이 5가지(arm64-v8a, armeabi, armeabi-v7a, x86, x86_64)로 빌드 업데이트 되었습니다.
    • 적용 시 별도의 인터페이스 수정은 없습니다. 다만 내부 로직이 변경되었으니 업데이트 후 동작 확인을 부탁드립니다.
  • 고지할 권한이 없는경우(AndroidManifest.xml에 권한을 설정하지 않은 경우) 빈 페이지의 권한 고지 페이지가 노출되는 이슈 수정
    • 고지할 권한이 없는 경우 권한 고지 페이지가 노출되지 않도록 수정
  • 권한 고지 내용 중 권한을 동의하지 않아도 서비스에 영향이 없음을 알리는 문구 추가

[라이브러리 및 리소스 배포 변경사항]

  • Android Studio 라이브러리 적용 [studio 설정 가이드]
    • .aar 파일을 적용하여 사용이 가능합니다.
    • 이클립스 프로젝트 환경의 라이브러리를 더이상 지원하지 않습니다.
  • 통합 리소스
    • 배포된 패키지에 있는 '/res_통합' 경로의 모든 리소스 파일을 프로젝트가 추가 바랍니다. [가이드 확인하기]
    • 배포된 패키지에 있는 '/res_수정설정' 경로의 모든 리소스 파일을 적용하는 프로젝트 성격에 맞게 내용을 수정하여 추가 바랍니다. [가이드 확인하기]
2.8.7 2019/04/08 2864 최지수
  • 리퍼러 정보 수신 시 기존의 로컬 데이터 존재 여부를 확인 후 리퍼러 정보를 갱신하도록 로직 수정
2.8.6 2019/03/14 2859 최지수
  • 모듈 UI 다해상도 대응을 위해 벡터 드로잉 리소스 적용
    • 약관 동의 페이지, 약관 다시보기, 점검/공지/업데이트 팝업, 제재 팝업
  • Pad 화면 크기에 따른 UI 디자인 적용
    • 점검/공지/업데이트 팝업, 제재 팝업
  • 약관 동의 완료 시 동의한 정보를 저장하는 로직 추가 (Push v4 관련)
  • targetSdkVersion을 28로 빌드 시 AndroidManifest.xml에 설정해야하는 FOREGOUNRD_SERIVCE 부분 가이드 추가 [가이드 바로가기]
2.8.5 2018/08/31 2844 최지수
  • Android 6.0 이상에서 권한 고지 및 약관 동의 이후(앱 최초 실행) 단말 국가 코드(device_country) 값이 null로 반환되는 이슈 수정
  • 서버 점검, 업데이트, 공지 팝업 버튼 텍스트의 기본 색상 값 설정이 누락되어 일부 OS 버전에서 버튼 텍스트가 흰색으로 노출되는 이슈 수정
2.8.3 2018/06/27 2841 최지수
  • 서버 점검/업데이트/공지 팝업에 복수의 버튼 기능을 추가 (리소스 변경 및 추가)
  • 권한 고지 텍스트에 '선택' 문구를 기본값으로 추가 (리소스 변경) [모듈 적용 가이드 참고]
  • 말레이시아어 대응 로직 제거
  • 중국 간체 및 번체 분기 시 사용되는 국가 코드를 단말 국가 코드가 아닌 HIVE Country를 사용하도록 변경
  • 일부 LG 단말에서 약관 다시보기(Terms) 내용이 팝업 영역에서 잘려보이는 현상 수정 (리소스 추가)
  • 리소스 변경사항 확인 [모듈 적용 가이드 참고]
2.8.2 2018/05/02 2838 최지수
  • 내부 동작 API인 Update_DID 및 Get_DID의 호출 조건이 되는 데이터 목록 변경 (HIVE SDK v4와 프로토콜 통일)
  • 내부 동작 API인 Download API 호출 시 서버에서 받은 DID가 변경되었을 경우 변경된 DID를 사용하도록 로직 변경
  • Android OS 2627 이상에서 BuildTarget 2627 이상 설정 시 Android Support v4 라이브러리의 NotificationCompat.Builder 생성자 형태 변경으로 초기화 시 크래시 이슈 수정 [모듈 적용 가이드 참고]
  • 일부 LG 단말에서 점검/업데이트/공지 팝업이 정상 노출되지 않는 이슈 수정
2.8.1 2018/02/21 2834 최지수
  • SMS 수신 동의에 대해 재동의가 필요한 상황에서 SMS 수신 동의 팝업이 노출되지 않는 버그 수정 (v2.8.0 에서 이슈 발생)
2.8.0 2017/12/08 2828 최지수
  • 네트워크 타임아웃 최초 요청 시간을 클라이언트에서 지정할 수 있는 기능 추가
  • HIVE 앱 접근 권한 고지를 개발사가 변경할 수 있도록 적용 방법을 변경하고, 그에 따라 디자인 형태를 새롭게 변경
  • 약관 동의 창 노출 조건에 국가 코드를 추가
    • 기존: 약관 버전이 높은 A 국가에서 약관 동의를 진행했을 경우, 앱 실행시 약관 버전이 낮은 B 국가로 판단되어도 약관 노출되지 않았음
    • 변경: 약관 동의 결과와 버전을 국가별로 체크하여 약관 노출 여부를 결정하도록 변경
    • 앱 권한 고지 커스터마이징 설명 (리소스가 추가되었으니 꼭 확인바랍니다.)
  • HTTPS 프로토콜을 모든 기능에서 사용하도록 변경
  • 더이상 네크워크 단절 상황에서 로컬 약관이 노출되지 않도록 변경
    • 어떠한 경우에도 로컬 약관은 이제 노출되지 않습니다. 약관을 못 띄운 경우였다면 다음 앱 재실행 시 정상 네트워크 연결 상태라면 약관이 노출됩니다.
2.7.7 2017/10/30 2825 최지수
  • 에뮬레이터에서 실행된 경우 에뮬레이터 종류를 서버로 전송하는 로직 추가
2.7.6 2017/09/20 2820 최지수
  • Android OS 8.0 이상에서 백그라운드 서비스 제한을 하지 않도록 대응
  • 멀티윈도우 화면에서 UI가 정상 노출되도록 대응 (Android OS 7.0 이상)
2.7.5 2017/08/28 2816 최지수
  • 모듈 내부 서버통신 데이터에 통합 식별자 추가
  • SetGameLanguage API 추가 (게임 언어 설정)
    • 언어 설정은 게임 언어를 우선시하며 SetGameLanguage API로 게임 언어를 설정하지 않을 경우 단말 언어를 따르도록 수정
  • UI 관련 텍스트 국가별 추가 번역 및 오탈자 수정
  • 점검 공지 팝업 노출 및 정보보기 API에서 serverId를 파라미터로 사용하지 않도록 수정
  • Nexus 5x 단말에서 서버 점검 팝업 UI 이미지가 분리되는 이슈 수정 (재수정)
  • 특정 신규 Android 디바이스(갤럭시S8, LG G6)에서 약관 다시보기 노출 이슈 수정
2.7.4 2017/07/11 2808 최지수
  • 모듈 내부 아랍어 텍스트 추가 (단말 언어를 아랍어로 설정했을 경우 모듈 UI 텍스트가 아랍어로 노출)
2.7.3 2017/01/26 2803 정다운
  • 데이터 요청에 대한 네트워크 타임아웃 로직 추가
  • 점검팝업 UI 변경
2.7.2 2016/12/15 2800 정다운
  • 네트워크 단절이나 약관동의 팝업 노출이 불필요한 지역의 경우 다시보기 기능 호출시 컴투스 기본약관이 노출되는 버그 수정
2.7.1 2016/11/28 2796 정다운
  • 국가코드가 HK(홍콩)일 때 번체가 표시되도록 수정
2.7.0 2016/11/21 2795 정다운
  • CS_UpdateNoticeShowPopup, CS_UpdateNoticeGetPopupInfo 에러 대응 코드 보강
  • 테스트 단말의 HIVE 게임 서버 점검 우회 기능 개선
    • 해당 사항 적용으로 약관 동의 후 서버 점검 팝업 노출되도록 수행 로직 변경
  • 약관 노출 시 로딩 다이얼로그 배경을 투명에서 기본 색상(다크그레이)로 변경
  • 버그 수정
    • CS_UpdateNoticeShowPopup(isShowNotice = false) 인 경우 샘플 약관이 뜨던 버그 수정
    • 약관이 닫힐 때 약관 내 버튼이 눌러지면 간헐적으로 앱이 멈추는 현상 수정
    • 약관 UI에 Theme이 변경되지 않던 버그 수정
2.6.8 2016/09/09 2789 정다운
  • 루팅/탈옥 단말에 대한 정보 전송 코드 추가
  • 점검/공지 보기 미노출 상황에도 콜백을 전달하도록 수정
  • ActiveUserStartWithoutNotice(showNotice = false) 경우 약관동의 이후에 앱 재실행시에도 약관이 계속 노출되는 버그 수정
2.6.7 2016/07/29 2785 정다운
  • 2.6.6에서 추가된 API 연동하는 JNI 플러그인 변경 및 iOS 모듈과 API SPEC 통일
2.6.6 2016/07/27 2783 정다운
  • 서버 점검 및 공지/업데이트 팝업 UI 변경
    • assets/common/ActiveUserDialog/ 경로에 24개의 이미지 파일 추가
  • 팝업만 노출하는 기능 추가, 팝업 정보만 노출하는 기능 추가
  • 기존 CS_ActiveUserStartEx(SERVER_STATE serverState) 외에 CS_ActiveUserStartEx(SERVER_STATE serverState, bool isGetNotice)로 설정이 가능합니다.
    • isGetNotice가 false일 경우 서버 점검 및 공지/업데이트 팝업을 노출하지 않고 약관만 노출
  • ActiveUser 2.6.7 이용 필수
2.6.5 2016/03/24 2761 김규진
  • Material 테마 대응 (약관다시보기 화면)
  • CheckPermission 문구 및 UI 수정
  • 약관 동의창에서 webview error 발생시 로컬 리소스를 읽도록 추가
2.6.4 2016/01/20 2746 김규진
  • Agreement 통신 데이터를 만들때 Agreement 데이터 외에 AgreementEx (SMS 동의) 데이터도 체크하도록 수정
    • 이 수정으로, 약관동의 없이 SMS 동의만 있는 경우 로그아웃시 계속 SMS 동의 창이 노출되는 이슈가 수정됩니다.
2.6.3 2016/01/04 2738 김규진
  • 샌드박스 설정 기능이 추가됩니다.
    • 샌드박스는 LIVE, SANDBOX, STAGING 의 3가지 타입을 갖습니다.
    • STAGING 은 추후 개발용으로만 사용되고 삭제될 예정으로 LIVE 와 SANDBOX 를 사용하면 됩니다.
    • 기존 CS_ActiveUserStart() 외에 CS_ActiveUserStartEx(SERVER_STATE serverState) 로 설정이 가능합니다.
    • 위 API 로 설정시 이후 다른 모듈들도 모두 동일한 서버 세팅을 갖게 됩니다.
  • Android 6.0 퍼미션 대응이 추가되었습니다.
  • 위 퍼미션 대응으로 리소스가 추가 되었습니다.
    • assets/common/ActiveUserImage/checkPermission/ 경로에 5개의 이미지 파일이 추가되었습니다.
2.4.3 2015/06/17 2682 김규진
  • 서버 도메인 변경
    • 변경 전 : activeuser.com2us.net
    • 변경 후 : activeuser.qpyou.cn
2.4.2 2015/05/13 2664 김규진
  • ModuleManager 2.0.0 반영
  • getDID(Context) 추가
2.4.0.1 2015/02/25 2642 박가진
  • ActiveUser 약관동의창 에니메이션 동작 중 Back key 연타 시 다음 진행이 되지 않는 현상이 수정됩니다.
2.4.0 2015/02/06 2640 박가진
  • 앱 초기 DID 를 못 받아왔을 경우, 다시 받아올때 까지 계속 요청하는 이슈 수정
    • ActiveUserNorifier() 의 ACTIVE_USER_GETDID_FAIL 을 명시적으로 줄 수 있도록 수정
2.3.4 2015/01/13 2633 안영철
  • Android 5.0, Unity 에서 try-catch 문 안에서 bad pointer 접근시 죽는 현상이 수정됩니다.
    • 관련 로그로는 아래와 같습니다.
      • E/CRASH ( 4167): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
      • W/InputDispatcher( 1055): channel ~ Consumer closed input channel or an error occurred. events=0x9
      • E/InputDispatcher( 1055): channel ~ Channel is unrecoverably broken and will be disposed!
      • I/WindowState( 772): WIN DEATH: Window{fba02fe u0 SurfaceView}
      • I/WindowState( 772): WIN DEATH: Window{43c8b51 u0 ~.UnityPlayerNativeActivity}
  • SMS 수신동의 창 에서 back 키로 취소가 가능한 부분이 불가능 하도록 변경됩니다. (안내 메시지 후 2번째에 종료)
2.3.3_2 2014/12/24 2622 안영철
  • handler null pointer issue
    • 동의창 Activity 가 finish 되어, onDestroy 에서 자원 해제 (handler = null)
    • Android 동작 중 handler 의 생명주기는 속한 thread 와 같음
    • 여기서 사용한 핸들러는 onCreate 에서 생성되었으므로 UI thread 와 연결됨
    • UI thread 상 process 주기와 같으므로 activity 가 finish 되었어도 살아있음.
    • onDestroy 가 불릴때 null로 만드므로, handler post 시 마다 null 체크를 해서 activity 종료여부 판단
2.3.3_1 2014/12/16 2617 안영철
  • WebView timeout 시 로컬버전과 비교 부분에서 버전값 읽는 로직 수정
2.3.3 2014/12/08 2615 임성훈
  • 로컬 약관 리소스 오적용 예외처리 추가 (리소스 부재)
- meta data 파싱부분에서 assetManager 를 통해 해당 html 을 open 여부로 체크
- 실패할 경우 version 0 으로 세팅, 종료시키거나 이전버전에 동의받은적이 있다면 패스
  • InstallReceiver 에서 referrer 값을 받을 경우 setLog true/false 와 상관없이 로그를 출력하도록 추가
  • MCC 코드 값을 얻어올 때 유심의 MCC 값도 같이 고려하여 가져오도록 수정
2.3.2 2014/11/14 2611 임성훈
  • Install Referrer 관련하여 InstallService class 가 추가되었습니다.
- 이 버전 이후 부터는 Manifest.xml 에 service 를 선언해 주어야 합니다.
<service android:name="com.com2us.module.activeuser.downloadcheck.InstallService" />
  • WebView 'Loading...' 문구 중, 어색한 일본어 문구 수정
  • 로컬 리소스를 읽는 중 Exception 로그를 Logger 설정과 상관없이 출력하도록 수정
  • Country, Language 대소문자 변환을 default 가 아닌 US 로 고정
2.3.0_1 2014/10/30 2600 임성훈
  • PERMISSION 체크에서 GET_TASKS 항목 제거
2.3.0 2014/10/28 2599 임성훈
  • C Library 만 변경
  • CS_ActiveUserGetVersion() 에서 내부 ReleaseStringUTFChars 하는 char* 주소값이 잘못 된 부분 수정
2.3.0 2014/10/27 2589 임성훈
  • 2.1.X -> 2.3.0 업데이트시 주의 사항
    • 리소스가 추가/삭제 및 몇몇 파일은 경로가 바뀌었습니다. 꼭 확인해 주세요. Resource 추가 링크
    • CS_UserAgreeShowUI() API 가 Deprecated 되었습니다.
    • 약관 동의 내부 UI 가 WebView 로 바뀌었습니다.


[이하 버전별 업데이트 내역]

  • 2.3.0 : (iOS) iOS 8 대응과 관련 버전표기만 맞춤
  • 2.2.7_2 : 페키지네임, 번들네임으로 게임사별 리소스 분기처리 #1620
  • 2.2.7_1 : au_terms_meta.json 의 국가코드 비교 부분에서 대소문자 구별없이 비교하도록 추가
  • 2.2.7  :
    • 점검 팝업 세로폭 증가
    • SMS 수신 동의 약관 변경 추가로 인한 URL scheme 수정
    • get_config protocol 에 offset 필드 추가
  • 2.2.6.2 : au_terms_meta.json 정보를 읽어 isLocalShow 판별 부분에서 예외처리 추가
  • 2.2.6.1 : 점검 안내 팝업 UI 변경
  • 2.2.6 : 서버별 점검 안내 팝업 추가
  • 2.2.5 : 약관 판단로직에 country 추가
  • 2.2.4 : advertising_id 항목 추가 (google-play-service library 없으면 protocol 에서 제외), getVID 종속 제거, READ_PHONE_STATE 종속 제거
  • 2.2.3 : ActiveUser DID check 로직 수정(null, empty string 비교)
  • 2.2.2 : 강제 업데이트 팝업 기능 포함
  • 2.2.0 : 약관 webview 기능 추가


모든 버전의 역사 보기


적용 방법

AndroidManifest.xml

in <manifest>, before <application>...

  • targetSdkVersion의 값이 28 이상인 경우 ( 항목 1)~2) )
    • 1)FOREGROUND_SERVICE 권한을 추가해야 합니다.
      <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    • 2)application 태그에 usesCleartextTraffic 설정을 추가해야 합니다. (http:// 관련 통신이 가능하도록)
      <application
         .. (기타 설정) ..
         android:usesCleartextTraffic="true" />
  • 필요한 권한 추가
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  • android.permission.UPDATE_DEVICE_STATS 퍼미션 추가 시 'permission is only granted to system apps'에러 관련 링크


in <application>...

<application android:name="..." android:hardwareAccelerated="..." android:icon="..." android:label="..." android:allowBackup="false" >
  • application 태그에 android:allowBackup 옵션은 설정하지 않을 경우 Default 상태가 true 이다. 만약 false로 설정하지 않을 경우 구글 드라이브 등의 클라우드 백업을 통해 다른 단말에서 앱을 복원하게 되면 이미 앱에 저장되어 있는 단말 정보나 유저 정보가 앱의 내부 저장소에 복사될 수 있다. 때문에 allowBackup 옵션을 false로 설정해야 한다. (18-02-07에 확인된 사항으로 모듈 업데이트가 필요하지 않지만 AndroidManifest.xml에 내용 추가 필요)

in <application>...

 <activity android:name="com.com2us.module.activeuser.useragree.AgreementUIActivity" android:theme='@android:style/Theme.NoTitleBar.Fullscreen'
          android:screenOrientation="behind"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|locale|fontScale"    />


<!-- added in v2.3.2 -->
<service android:name="com.com2us.module.activeuser.downloadcheck.InstallService" />
  • AgreementUIActivity는 Android 권한 고지 및 약관 페이지를 관장합니다. 해당 activity 태그에 android:screenOrientation은 게임의 상태에 따라 변경하여 사용바랍니다.
    • behind : 이전에 보여진 액티비티의 속성을 따라감 (단, 가로 및 세로의 회전이 가능함)
    • landscape : 가로 방향으로 노출 (일반적으로 홈 버튼이 오른쪽에 위치하는 가로 방향 기준으로 노출되며, 180도 전환이 되지 않음)
    • portrait : 세로 방향으로 노출 (일반적으로 홈 버튼이 아래 위치하는 세로 방향 기준으로 노출되며, 180도 전환이 되지 않음)
    • sensorLandscape : 가로 방향으로 노출 (180도 전환이 가능)
    • sensorPortrait : 세로 방향으로 노출 (180도 전환이 가능)
Install referrer 설정
  • androidmanifest.xml 에서 위의 코드 이외에 INSTALL_REFERRER에 대한 receiver가 있다면 referrer[1] 정보를 정상적으로 수집할 수 없습니다. 아래 내용을 참고하시기 바랍니다. 항상 com.android.vending.INSTALL_REFERRER는 매니페스트 파일에 한 줄만 존재해야 합니다.(v1.3.1부터 지원)
  • Google Play Service에서 Broadcast API와 install_referrer intent 서비스를 중단함에 따라 Play Install Referrer 라이브러리를 사용하도록 변경되었습니다. ( ActiveUser 2.9.2) INSTALL REFERRER 지원 종료 안내 공지 INSTALL REFERRER 마이그레이션 가이드
  • INSTALL_REFERRER 기능을 대체할 새로운 InstallReferrer API 설정 가이드는 build.gradle InstallReferrer API 설정 가이드를 참고하세요.
  • ActiveUser 2.9.2 이후 버전 적용시에는 AndroidManifest.xml 파일 내 INSTALL_REFERRER값이 존재하는 경우 해당 값을 반드시 제거 하시기바랍니다.
<!-- ActiveUser 2.9.2 이후 버전 적용시 아래 코드를 제거하세요 -->
 <receiver android:name="com.com2us.module.activeuser.downloadcheck.InstallReceiver" android:exported="true">
          <intent-filter>
                  <action android:name="com.android.vending.INSTALL_REFERRER" />
          </intent-filter>
 </receiver>

외부 라이브러리를 적용할 때

  • 외부 라이브러리를 사용하는 경우라도 Google에서 더이상 INSTALL_REFERRER 기능을 제공하지 않으므로 {{글자색|red|관련 값을 전부 제거||하여도 됩니다.
<!-- ActiveUser 2.9.2 이후 버전 적용시 아래 코드를 제거하세요 -->
 <receiver android:name="com.com2us.module.activeuser.downloadcheck.InstallReceiver" android:exported="true">
          <intent-filter>
                 <action android:name="com.android.vending.INSTALL_REFERRER" />
          </intent-filter>
          <!-- 외부 라이브러리  적용시 필요한 값 : android:name은 receiver내의 다른 meta-data name과 중복되지 않게 작성하며, android:value는 외부 라이브러리의 receiver android:name을 입력 -->
          <meta-data android:name="forward.external_library" android:value="external.library.Receiver" />
          <meta-data android:name="forward.external_library_two" android:value="external.library.ReceiverTwo" />
          ...
 </receiver>

Resource

파일:컴투스 게임 kr 및 게임빌 로컬 약관 리소스.zip

{PROJECT_ROOT}/assets/common/

AndroidActiveUserRes.png

해당 리소스가 존재하는지 확인합니다.

  • 2.2.0 이후 리소스 내용이 추가/변경 되었습니다. 2.2.0 미만에서 업데이트 시 확인 해주세요.
  • au_terms_meta.json 과 이하 html 파일들은 게임에 따라 달라질 수 있으니 꼭 확인이 필요합니다.
    • 약관 내용 변경이 필요한 경우 추가된 약관 html 파일을 수정해서 사용 바랍니다.
  • 래퍼를 사용하실 경우에는 직접적으로 Assets폴더에 넣어두시면 덮어쓰는 스크립트에 의해 덮어질 수 있으니 이점 참고해 주시기 바랍니다.
  • 기본적으로 화이트 버전의 리소스가 ActiveUserImage안에 들어있습니다. 블랙 버전을 사용하실 경우에는 BlackVerImage 폴더 내부의 파일들을 ActiveUserImage안에 덮어써 주시기 바랍니다.
  • 2.8.0 이후 네트워크 통신이 실패해도 로컬 약관을 띄우지 않습니다. 때문에 로컬 약관 리소스를 별도로 첨부할 필요가 없습니다. (어떠한 경우에도 로컬 약관을 띄우지 않음)


Android ActiveUser v2.8.0 이상 적용 시 앱 접근 권한 고지 리소스 적용

앱 접근 권한에 대한 고지화면이 변경되어 관련된 리소스를 추가하였는지 확인합니다. 앱 접근 권한 고지 화면에 대한 레이아웃과 국가별 권한 고지 텍스트 파일을 확인할 수 있습니다.

  • 추가 리소스
    • layout 폴더에 xml 파일 추가(1개) : checkpermission_layout_v2.xml
    • layout-land 폴더에 xml 파일 추가(1개) : checkpermission_layout_v2.xml
    • /res 경로에 국가별 value 폴더 추가 후 국가별 hive_permission_strings.xml 추가 (22개) : values, values-ar, values-de, values-en, values-es, values-fr, values-in, values-it, values-ja, values-ko, values-ms, values-pt, values-ru, values-th, values-tr, values-vi, values-zh, values-zh-rCN, values-zh-rHK, values-zh-rMO, values-zh-SG, values-zh-rTW

new permission resource.jpg


Android ActiveUser v2.8.2 이상 적용 시 리소스 변경 사항

점검/업데이트/공지 팝업에 사용되는 리소스가 변경되었습니다.

  • 추가 리소스
    • layout 폴더에 xml 파일 추가(8개): activeuser_popup_maintenance_pad_landscape.xml, activeuser_popup_maintenance_pad_portrait.xml, activeuser_popup_maintenance_phone_landscape.xml, activeuser_popup_maintenance_phone_portrait.xml, activeuser_popup_maintenance_phone_portrait.xml, activeuser_popup_update_pad_portrait.xml, activeuser_popup_update_phone_landscape.xml, activeuser_popup_update_phone_portrait.xml
    • drawable 폴더에 png 파일 추가(14개) : activeuser_popup_box_maintenance_pad_0_article.png, activeuser_popup_box_maintenance_pad_1_btn.png, activeuser_popup_box_maintenance_phone_0_article.png, activeuser_popup_box_maintenance_phone_1_btn.png, activeuser_popup_box_pad_1_touch.png, activeuser_popup_box_phone_1_touch.png, activeuser_popup_box_update_pad_0_article.png, activeuser_popup_box_update_pad_0_article.png, activeuser_popup_box_update_phone_0_article.png, activeuser_popup_box_update_phone_1_btn.png, hive_popup_scroll_bar_pad_1.png, hive_popup_scroll_bar_pad_2.png, hive_popup_scroll_bar_phone_1.png, hive_popup_scroll_bar_phone_1.png

activeuser 2 8 2 res.png

  • 제거된 리소스
    • /assets/common/ActiveUserDialog 이하의 모든 이미지 파일


Android ActiveUser v2.8.3 이상 적용 시 리소스 변경 사항

점검/업데이트/공지 팝업, 약관 다시보기, 권한 고지에 사용되는 리소스가 변경 및 추가되었습니다.

  • 추가 리소스
    • drawable 폴더에 png 파일 추가(10개) : hive_popup_box_type2_pad_1_btn.png, hive_popup_box_type2_pad_2_btn.png, hive_popup_box_type2_phone_1_btn.png, hive_popup_box_type2_phone_2_btn.png, hive_popup_box_type3_pad_1_btn.png, hive_popup_box_type3_pad_2_btn.png, hive_popup_box_type3_pad_3_btn.png, hive_popup_box_type3_phone_1_btn.png, hive_popup_box_type3_phone_2_btn.png, hive_popup_box_type3_phone_3_btn.png
    • layout 폴더에 xml 파일 추가(2개): activeuser_terms_landscape.xml, activeuser_terms_portrait.xml
  • 변경 리소스
    • layout 폴더에 xml 파일 변경(8개) : activeuser_popup_maintenance_pad_landscape.xml, activeuser_popup_maintenance_pad_portrait.xml, activeuser_popup_maintenance_phone_landscape.xml, activeuser_popup_maintenance_phone_portrait.xml, activeuser_popup_update_pad_landscape.xml, activeuser_popup_update_pad_portrait.xml, activeuser_popup_update_phone_landscape.xml, activeuser_popup_update_phone_portrait.xml
    • /res 경로에 국가별 value 폴더 추가 후 국가별 hive_permission_strings.xml 변경 (22개) : values, values-ar, values-de, values-en, values-es, values-fr, values-in, values-it, values-ja, values-ko, values-ms, values-pt, values-ru, values-th, values-tr, values-vi, values-zh, values-zh-rCN, values-zh-rHK, values-zh-rMO, values-zh-SG, values-zh-rTW


Android ActiveUser v2.8.9 이상 적용 시 리소스 변경 사항

ActiveUser v2.8.9 부터 .aar 라이브러리로 배포되면서 리소스를 수동 추가할 필요가 없습니다. .aar 라이브러리에 리소스 파일이 포함되어 있습니다. 단, 권한 고지 팝업의 문구를 커스터마이징 하려는 경우 관련된 xml 파일을 수정하여 프로젝트에 수동으로 추가합니다. [권한 고지 설정방법 확인] 기본적으로 제공되는 권한 고지 팝업의 문구를 사용할 경우 별도의 xml 리소스 추가 없이 ActiveUser의 .aar 라이브러리만 사용하면 됩니다.



ActiveUser가 필요로하는 외부 라이브러리 설정 (v2.8.2 이후부터)

  • ActiveUser v2.8.2부터 Android Support v4 라이브러리(27.1.0 버전)을 필요로 합니다.
    • Android 8.1.0 이상 버전 대응으로 Support v4 라이브러리의 NotificationCompat.Builder 클래스를 사용하게 되는데 26.x.x 버전에서 해당 클래스의 생성자 형태가 변경되어 AndroidManifest.xml에서 BuildTarget이 26 이상일 경우 ActiveUser.start 메서드 이후 크래시가 발생할 수 있습니다. (ActiveUser v2.8.1 이하에서 발생, BuildTarget이 26 미만일 경우 특이사항 없음)
    • BuildTarget 26 이상을 지원하기 위해 프로젝트에 포함된 Android Support v4 라이브러리(버전 27.1.0)를 참조 부탁드립니다.
    • Peppermint v2.6.7 이상을 사용하는 경우
      • Peppermint v2.6.7에 포함된 Facebook 4.18 라이브러리에는 동일한 Android Support v4 라이브러리가 포함되어 있습니다.
      • 중복 사용되어 빌드 시 에러가 나지 않도록 Facebook 4.18에 포함된 Android Support v4만 사용 부탁드립니다.
    • ActiveUser v2.8.2부터 참조하고 있는 Support v4 라이브러리 목록

activeuser 2 8 2 libs.png

Jar 파일 추가

activeuser.jar (svn://devbackup.com2us.com/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/ActiveUser/libs/)
modulemanager.jar (svn://devbackup.com2us.com/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/ModuleManager/libs/)

build.gradle 수정

InstallReferrer API 설정 추가
implementation 'com.android.installreferrer:installreferrer:1.1'


InstallReferrer 사용시 주의사항 (2020.02.05 기준)
  • installreferrer 1.1을 사용할 경우 구글에서 아래의 3가지 퍼미션을 AndroidManifest.xml에 자동으로 추가하는 것으로 확인 되었습니다.
   - android.permission.READ_PHONE_STATE
   - android.permission.WRITE_EXTERNAL_STORAGE
   - android.permission.READ_EXTERNAL_STORAGE
  • 구글 installreferrer 라이브러리에서 잘못 추가하는 것으로 추정되며 만약 게임에서 해당 권한을 사용하지 않을 경우 아래와 같이 "remove" 설정을 해주시기 바랍니다. 이후 구글에서 installreferrer의 업데이트가 이루어질 경우 다시 공지하도록 하겠습니다.
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />
  • 만약 위의 설정을 추가할 때 "Namespace 'tools' is not bound.." 에러가 발생한다면 <manifest> 태그 안에 아래와 같이 수정 부탁드립니다.
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

Android NDK

적용방법 1) 실행 후 크래쉬 발생

실행 후 크래쉬가 발생한다면 아래 코드를 리소스 로딩과 같은 무거운 작업 이후에 실행 되도록 변경합니다.

문제가 해결 되지 않으면 2번 방법을 사용 합니다.

 void startClet(int argc, char* argv[])
 {
         ...

        //로그 활성화
        CS_ActiveUserSetLogged(TRUE);

/* deprecated in 2.2.0        
        //UserAgree화면을 노출하는 함수로
        //1.국내 마켓인 경우 반드시 호출하며
        //2.글로벌마켓(국내 포함)인  경우 언어설정이 한국어일떄 호출해 줍니다.
        //3.해외마켓(국내 제외)인 경우 호출하지 않습니다.  
//        CS_UserAgreeShowUI(NULL);
*/
       

        CS_ActiveUserStart();
       
 }
   
 void showUserAgreeTerms(){
       
  CS_UserAgreeShowTermsUI();
               
 }

적용방법 2) 사용자 동의 화면 노출 후 크래쉬 발생

1번 방법으로 사용자 동의 화면이 노출된 후에 어플이 크래쉬 나는 문제가 있을 시 적용 합니다.

차이점은 UserAgreeSetCallback를 통해 게임이 실행된다는 점입니다.

 void UserAgreeCallback(int result){
 
    CS_knlPrintk("userAgreeCallback : %d",result);
 
         //사용자동의화면에서 동의하거나 동의화면이 나오지 않으면
    if(result == USER_AGREE_SUCCESS){
          startGame();
    }
 
 };
 
 void startClet(int argc, char* argv[])
 {
         ...

        //로그 활성화
        CS_ActiveUserSetLogged(TRUE);
 
        CS_UserAgreeSetCallback(UserAgreeCallback);
       
/* deprecated in 2.2.0
        //UserAgree화면을 노출하는 함수로
        //1.국내 마켓인 경우 반드시 호출하며
        //2.글로벌마켓(국내 포함)인  경우 언어설정이 한국어일떄 호출해 줍니다.
        //3.해외마켓(국내 제외)인 경우 호출하지 않습니다.  
//        CS_UserAgreeShowUI(NULL);
*/
       

        CS_ActiveUserStart();
       
        ...
 }

 void showUserAgreeTerms(){
       
  CS_UserAgreeShowTermsUI();
               
 }


MainActivity.java

setAppIdForIdentity은 모듈에서 서버로 전송할 AppId를 변경하는 메서드로 반드시 납품전에 주석 처리 하셔야 합니다.

현재는 필요없는 부분이지만 스마트폰 초기 시절에 사용한 AppID의 경우 Android, iOS 모두 동일하고

App 버전이 변경되어도 동일한 AppID로 사용하다보니 구분할 방법이 없어 Test용으로 AppID를 변경할 수 있도록 한 기능입니다.

따라서 납품전에 주석 처리 해주시면 됩니다.


 public void onCreate(Bundle savedInstanceState) {
                ...
 
         mModuleManager.setAppIdForIdentity("com.com2us.module.activeuser.test");
         //mModuleManager.setLogged(true);
         mModuleManager.setExitAppIfCracked(isExitAppIfCracked);
         mModuleManager.load(mainactivity, wrapperView);
         mModuleManager.onActivityCreated();
               
 }

Android SDK

   
  ActiveUser activeUser
 public void onCreate(Bundle savedInstanceState) {
 
         ...
 
        activeUser = new ActiveUser(this);
        //activeUser.setLogged(true);
 
/* deprecated in 2.2.0
        //UserAgree화면을 노출하는 함수로
        //1.국내 마켓인 경우 반드시 호출하며
        //2.글로벌마켓(국내 포함)인  경우 언어설정이 한국어일떄 호출해 줍니다.
        //3.해외마켓(국내 제외)인 경우 호출하지 않습니다.  
//         activeUser.setEnableUserAgreeUI();
*/

                               
        activeUser.start();
 
        ...
 }
 
 public void onDestroy(){
      super.onDestroy();
      activeUser.destroy();
 }
 
 void showUserAgreeTerms(){
         
   activeUser.showUserAgreeTerms();
               
 }


Android Studio 적용하기 (190625 배포 이후)

1) .aar 라이브러리 추가하기

  • 배포된 패키지에 있는 ActiveUser-x.x.x.aar 라이브러리를 프로젝트가 추가합니다.
    • build.gradle 설정에서 해당 .aar 파일을 implementation하여 빌드되도록 설정합니다.

2) 통합 리소스 및 수정설정 리소스 추가하기

  • 리소스 가이드에 있는 통합 리소스와 수정설정 리소스를 프로젝트에 추가합니다. [리소스 추가하기]

3) ActiveUser 라이브러리가 필요로하는 외부 라이브러리를 추가하기

  • ActiveUser 라이브러리는 Android Support 라이브러리 등 외부 라이브러리를 필요로 합니다. 아래 라이브러리를 build.gradle의 dependencies 항목에 추가하여 같이 사용하도록 합니다.
//... (생략)...
dependencies {
  // ...(생략)...

  implementation 'androidx.appcompat:appcompat:1.0.0'
  implementation 'androidx.appcompat:appcompat:1.0.0'
  implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
//...(생략)...

4) gradle.properties 파일 내 androidX 사용 설정

  • gradle.properties 파일 내 아래의 코드를 추가하세요. gradle.properties 파일이 존재하지 않는 경우 신규 생성 후 아래의 코드를 추가하세요.
android.useAndroidX=true
android.enableJetifier=true


튜토리얼

Callback 함수 추가

사용하려는 위치에 아래 예시처럼 콜백 함수를 추가.

약관 동의 Callback

void UserAgreeCallBack(USER_AGREE_RESULT type)
{
    switch (type) {
        case USER_AGREE_SUCCESS:
            NSLog(@"USER_AGREE_SUCCESS");
            break;
        case USER_AGREE_TERMS_CLOSE:
            NSLog(@"USER_AGREE_TERMS_CONFIRM");
            break;
        default:
            break;
    }
}

각 약관 동의 콜백은 다음과 같은 경우에 호출

  • USER_AGREE_SUCCESS
1.약관 동의 화면이 나왔을 때, 모든 체크박스를 체크한 경우.
2.이미 약관동의가 완료 된 경우.
3.약관 동의가 필요 없는 국가의 경우.


  • USER_AGREE_TERMS_CLOSE
1.게임내 이용약관 확인 함수 CS_UserAgreeShowTermsUI() 를 호출 한 후 닫기 버튼을 누른 경우. (iOS only)
(유니티 사용 or 로드가 큰 게임의 경우 CS_UserAgreeShowTermsUI() 호출시 게임정지. USER_AGREE_TERMS_CLOSE 콜백시 게임 재개 가능.)

Get DID Callback

void ActiveUserCallBack(ACTIVE_USER_RESULT type)
{
    switch (type) {
        case ACTIVE_USER_GETDID_SUCCESS:
            NSLog(@"ACTIVE_USER_GETDID_SUCCESS");
            break;
        case ACTIVE_USER_GETDID_FAIL:
            NSLog(@"ACTIVE_USER_GETDID_FAIL");
            break;
        default:
            break;
    }
}

Wrapper 사용 예시

콜백 함수를 추가 한 뒤, ActiveUser Start를 호출.

 void startClet(int argc,char* argv[])
{
    CS_ActiveUserSetCallback(ActiveUserCallBack); // Get did success / fail callback
    CS_UserAgreeSetCallback(UserAgreeCallBack); // User agree callback
    CS_ActiveUserStartEx(); // 약관 동의 시작
}

iOS 사용 예시

- (void)viewDidLoad
{  
    CS_ActiveUserSetCallback(ActiveUserCallBack);
    CS_UserAgreeSetCallback(UserAgreeCallBack);
    CS_ActiveUserStartEx();
}

게임 시작과 동시에 최초 1회에 한하여 약관 동의 창이 노출.

ActiveUser의 Start 함수는 세션 기록을 위해, 앱을 시작할 때 마다 필수로 호출되어야 한다.

게임 내 이용약관 노출

  • 게임 내에서 이용약관을 보여주는 기능을 사용할 경우 CS_UserAgreeShowTermsUI()를 호출.
해당 함수를 호출하게 되면 이용약관 페이지가 모달뷰로 노출됨.
  • loadView.c 파일의 activeUserShowTerms() 함수는 이용약관 확인 버튼을 누르는 경우 호출 되는 코드 입니다.
 void activeUserShowTerms()
 {
     CS_UserAgreeShowTermsUI(NULL);
 }

Active User Sample

전체적인 흐름은 program/ wrapper /sample /iOS / ActiveUserSample을 참고.

Debug

  • ActiveUser
ActiveUser의 기본적인 로그가 찍히는 Tag


주석

  1. 이 랩이 어떤 경로로 설치 되었는지 확인할 수 있는 정보
Com2uS 공통모듈 >> Active User >> Active User 모듈 적용 가이드 (iOS)

Active User 모듈 적용 가이드 (Android)

Active User 모듈 적용 가이드 (Unity3d)

>> Active User 모듈 레퍼런스 가이드 >> Active User 샘플 가이드 >> Active User FAQ
개인 도구
이름공간

변수
행위
둘러보기
도구모음
인쇄/내보내기