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

--Administrator (토론)

Mercury 모듈 적용 가이드 (Android)

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

Mercury 모듈 적용 가이드 (Android)

Mercury 모듈 적용 가이드 (Unity3d)

>> Mercury 모듈 레퍼런스 가이드 >> Mercury FAQ


목차

역사

<작성법 참고>
Version Date SVN Revision 담당자 변경 사항
2.13.5 2020-09-25 - 최지수
  • 전면배너 디자인 변경
  • Analytics 기능 클래스를 참조하는 내부 경로 설정 변경
2.13.3 2020-06-16 - 김현석
  • 프로모션 배너 정보를 얻을 수 있는 API 추가 CS_MercuryGetBannerInfo
  • HIVE UI에서 사용하는 버튼의 유저 인터랙션 개선
  • 이벤트 페이지에서 유튜브 시청 후 복귀 시 이벤트 페이지가 세로로 나오는 오류 수정
2.13.2 2020-05-22 - 김현석
  • 프로모션 페이지 내 스키마를 통한 창 닫는 기능이 추가되었습니다.
2.13.1 2020-03-12 - 김현석
  • AndroidX와 호환되도록 라이브러리를 변경 가이드
  • 프로모션 동영상 화면 종료 시 간헐적으로 크래시가 발생하는 오류 수정
  • UA 초대 링크 전송 시 소셜 미디어 타입 식별 정보를 수집
  • 프로모션 CPI 다운로드 로그 전송 시 VID type 값을 추가 전송하도록 변경
2.13.0 2020-01-23 - 김현석
  • 더이상 사용하지 않는 기능과 코드를 제거
  • 픽셀 단말에서 가로 앱을 세로 화면상태에서 실행 시 간헐적으로 전면 배너 모양이 세로형태로 노출되는 이슈 대응
2.12.8 2019-12-12 - 최지수
  • 갤럭시 폴드에서 전면 배너가 정상 노출되도록 수정
  • 전면 배너 노출 시 퍼널 로그를 전달하도록 누락된 로직 추가
2.12.7 2019-10-23 - 최지수

개별전달된 버전입니다.

  • Mercury UserAcquisition 기능 추가
    • 딥링크 발생을 통한 친구 초대 및 보상 프로세스 [적용 가이드]
2.12.6 2019-10-16 - 최지수
  • 프로모션 서버로 CPI 다운로드 로그를 전송하는 로직 추가
  • 모든 웹뷰에서 더이상 쿠키를 사용하지 않도록 로직 변경
    • MercuryCustomViewInfo 호출로 받은 데이터로 배너 페이지를 자체 구현 시 이제 cookies라는 키 값을 꼭 파싱한 뒤 Mercury 서버(프로모션 서버) 요청 시 post 데이터로 넣어주어야 합니다!
  • 코드 상의 네트워크 통신을 위한 Url 문자열을 변조 처리
  • (Known Issue) YouTubeAndroidPlayerApi.jar를 사용하여 동영상 재생 기능을 사용 시 Android 10에서 간헐적으로 동영상 재생이 종료되는 이슈가 있습니다.
    • 동영상 재생 기능을 사용 시 YouTubeAndroidWebPlayerApi.aar를 사용한 설정을 활용 권장합니다.
2.12.4 2019-06-25 - 최지수
  • 모듈 내부 네트워크 통신 시 mac 정보를 보내지 않도록 수정
  • 전면배너, 커스텀 웹뷰 다해상도 UI 대응
  • 태블릿 해상도 대응
  • YouTube Video 프로모션 기능 확장 [가이드 확인하기]
  • Android cutout 영역까지 가능한 모든 화면을 사용하며, cutout 영역에 모듈 UI가 가려지지 않도록 대응
  • C 플러그인 로직의 Android 64비트 시스템 대응
    • .c, .h 파일이 업데이트 되었습니다.
    • .a 라이브러리 파일이 5가지(arm64-v8a, armeabi, areabi-v7a, x86, x86_64)로 빌드 업데이트 되었습니다.
    • 적용 시 별도의 인터페이스 수정은 없습니다. 다만 내부 로직이 변경되었으니 업데이트 후 동작 확인을 부탁드립니다.
  • 개별모듈 인게이지먼트 기능 추가
    • Mercury 모듈로 들어온 인터워크 기능만 수행 가능하며, 인터워크 형태 중 Peppermint 모듈로의 고객센터(1:1문의하기 및 챗봇) 페이지 호출만 가능 [가이드 확인하기]

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

  • Android Studio 라이브러리 적용 [studio 설정 가이드]
    • .aar 파일을 적용하여 사용이 가능합니다.
    • 이클립스 프로젝트 환경의 라이브러리를 더이상 지원하지 않습니다.
  • 미사용 리소스
    • /assets/common/mercury 경로에 있는 모든 리소스를 더이상 사용하지 않습니다.
  • 통합 리소스
    • 배포된 패키지에 있는 '/res_통합' 경로의 모든 리소스 파일을 프로젝트가 추가 바랍니다. [가이드 확인하기]
    • 배포된 패키지에 있는 '/res_수정설정' 경로의 모든 리소스 파일을 적용하는 프로젝트 성격에 맞게 내용을 수정하여 추가 바랍니다. [가이드 확인하기]
2.12.2 2018-11-20 2851 최지수
  • 프로모션에 사용되는 UI에 대하여 다해상도 대응
    • 리뷰, 종료 팝업 다해상도 대응
    • 새소식, 공지사항 등 프로모션 전체화면 페이지 우상단 닫기 이미지 다해상도 대응
    • 리소스 변경사항 확인 [Resource 추가 - case 4]
  • 리뷰 팝업의 버튼 위치 변경
  • 리뷰, 종료 팝업 내부 텍스트를 임의 설정할 수 있는 기능 추가 (HIVE 콘솔에서 설정)
  • (2018-11-15 패키지에서 리소스가 누락되어 2018-11-20 패키지로 업데이트하였습니다.)
    • 추가된 리소스 : /res/drawable-xdpi/hivedialog_scroll_bar.png
2.12.1 2018-10-01 2846 최지수
  • 모듈 내부 통신에 사용되는 통합식별자 관련 수정
    • 통합식별자 데이터 처리 방식 개선
    • 네트워크 데이터 통신시 analytics_id를 추가하여 전송
2.12.0 2018-08-31 2844 최지수
  • iOS 전용 리뷰 팝업 노출 기능 추가 (iOS에서만 사용 가능하며 Android에서 동일 API 호출 시 기존 리뷰 팝업을 노출)(CS_MercuryShowNativeReviewPopup 레퍼런스)
  • 프로모션 로딩 방식 개선
    • 공지사항, 새소식, 오퍼월 페이지에서 로딩 진행상태를 알 수 있는 ProgressBar를 적용
    • 웹뷰에서 설정된 타임아웃 기능을 제거하여 시스템 타임아웃(60초)를 사용
    • 프로모션 페이지 웹뷰 이동 중 재시도 페이지 노출 시 재시도 버튼을 사용하면 노출 실패한 제이피를 다시 노출 시도하도록 적용
  • 리소스 변경
    • 기존에 포함되어있던 promotion_view_full.xml 파일을 새로 업데이트된 파일로 교체 필요
2.11.1 2018-06-27 2841 최지수
  • 말레이시아어 대응 로직 제거
  • 중국 간체 및 번체 분기 시 사용되는 국가 코드를 단말 국가 코드가 아닌 HIVE Country를 사용하도록 변경
  • Android 8.0 이상 단말에서 웹뷰 재시도 페이지의 재시도 버튼 터치 시 정상 작동하지 않는 현상 수정
2.11.0 2018-05-02 2838 최지수
  • YouTube 동영상 프로모션 기능 추가 [About YouTube Video Promotion 참고]
    • 라이브러리 파일 추가(1개) : YouTubeAndroidPlayerApi.jar
    • 리소스 파일 추가(/res/layout 경로)(3개) : promotion_video_control_dialog.xml, promotion_video_main.xml, promotion_video_sub.xml
  • 커스텀 뷰 UI 개선 (기본 뷰 형태는 classic 타입이며 frame, fullscreen 타입 추가) [About CustomView 참고]
    • 리소스 파일 추가(/res/drawable 경로)(9개) : promotion_customview_btn_close_image.png, promotion_customview_btn_close_vector.xml, promotion_customview_btn_next_image.png, promotion_customview_btn_next_vector.xml, promotion_customview_btn_prev_image.png, promotion_customview_btn_prev_vector.xml, promotion_customview_btn_refresh_image.png, promotion_customview_btn_refresh_vector.xml, promotion_customview_rounded_shape.png
    • 리소스 파일 추가(/res/layout 경로)(4개) : promotion_customview_v2_banner_landscape.xml, promotion_customview_v2_banner_portrait.xml, promotion_customview_v2_full_landscape.xml, promotion_customview_v2_full_portrait.xml
2.10.15 2018-02-07 2833 최지수
  • 프로모션과 관련된 서버 통신 시 광고 아이디 수집 여부 값을 전달하도록 추가 (ModuleManager v2.5.1+ 적용 필수)
  • 커스텀 웹뷰 사용 시 외부 링크를 통하여 다른 웹브라우저로 이동한 후 게임으로 돌아왔을 때 기존 커스텀 웹뷰가 흰색 화면으로 유지되던 부분을 웹뷰가 닫히도록 수정
  • 일부 LG 단말에서 전면 배너 테두리 이미지가 비정상 노출되는 이슈 수정 (+ 리소스 수정)
    • /res/layout/promotion_view_custom_landscape.xml, /res/layout/promotion_view_custom_portrait.xml을 새로 교체 필요 (2개 xml 파일)
    • /res/drawable-nodpi/hive_promotion_1_length_box_check_d.png, /res/drawable-nodpi/hive_promotion_1_length_box_check_s.png, /res/drawable-nodpi/hive_promotion_1_wide_box_check_d.png, /res/drawable-nodpi/hive_promotion_1_wide_box_check_s.png을 새로 교체 필요 (4개 png 파일)
2.10.14 2017-12-08 2828 최지수
  • 웹뷰 타임아웃 로직 개선
  • 전면배너 노출 시 2개 이상의 배너가 있는 경우, 현재 배너에서 로딩이 완료되거나 닫히게 되면 다음 배너 로딩을 요청하도록 변경하여 로딩 속도를 개선
  • HTTPS 프로토콜을 모든 기능에서 사용하도록 변경
  • 멀티윈도우에서 네트워크 지연 페이지가 노출되면 재시도 시 재시도로 인한 추가시간이 반영 안되던 오류 수정
  • 일부 태블릿 단말에서 전면 배너의 가로/세로 모드가 맞지 않게 노출되는 오류 수정
    • 일반 단말의 경우 rotation = 0 상태는 단말이 세로인 상태이지만 일부 태블릿 단말의 경우 가로인 경우가 있어서 전면 배너 노출 시 일부 태블릿 단말에서 의도치 않게 가로 배너가 세로로 나오는 현상이 발견되어 회전 값 계산에 대한 부분을 수정
  • 프로모션 웹 배너 호출 후 일반 전체 화면 모드 및 멀티윈도우 모드 간 화면 전환이 이루어질 경우 크래시가 발생하는 오류 수정
  • 리소스 수정
    • /res/layout/promotion_view_custom_landscape.xml, /res/layout/promotion_view_custom_portrait.xml, /res/layout/promotion_view_full을 새로 교체 필요 (3개 파일)
2.10.13 2017-09-20 2820 최지수
  • 종료 팝업(MoreGames)의 ‘더 많은 게임’ 페이지를 기존의 자체 구성하는 웹뷰가 아닌 외부 브라우저를 통해 노출하도록 변경
  • 머큐리 페이지(공지사항, 대배너, 커스텀웹뷰) 레이아웃 생성 로직 개선
    • 리소스 파일 추가 (모듈 적용중인 안드로이드 프로젝트의 /res 폴더에 아래와 같이 필수 추가 필요)
      • /res/layout 경로 (4개 파일) : promotion_dialog.xml, promotion_view_custom_landscape.xml, promotion_view_custom_portrait.xml, promotion_view_full.xml
      • /res/drawable-nodpi 경로 (9개 파일) : hive_promotion_0_length_outline.png, hive_promotion_0_wide_outline.png, hive_promotion_1_length_box_check_d.png, hive_promotion_1_length_box_check_s.png, hive_promotion_1_wide_box_check_d.png, hive_promotion_1_wide_box_check_s.png, hive_promotion_2_length_box_close.png, hive_promotion_2_wide_box_close.png, hive_promotion_btn_native_x.png
  • 멀티윈도우 화면에서 UI가 정상 노출되도록 대응 (Android OS 7.0 이상)
2.10.12 2017-08-28 2816 최지수
  • 모듈 내부 서버통신 데이터에 통합 식별자 추가
  • 언어 설정은 게임 언어를 우선시하며 게임 언어를 설정하지 않을 경우 단말 언어를 따르도록 수정
    • ActiveUser SetGameLanguage API 를 통해 게임 언어 설정 가능 (ActiveUser v2.7.5 이상)
  • UI 관련 텍스트 국가별 추가 번역 및 오탈자 수정
  • Android O 버전 대응 (모듈 내부 서버통신시 IMEI, AdvertisingId 정보 전달)
  • 웹뷰 타임아웃 로직 개선 (호출한 웹뷰 페이지 제공률을 높이기 위해 재시도 페이지 노출 판정 개선)
  • 특정 신규 Android 디바이스(갤럭시S8, LG G6)에서 대배너 노출 이슈 수정
  • MoreGames 팝업의 ‘더 많은 게임’ 페이지에서 Back key 및 페이지내 UI 버튼이 수행되지 않는 이슈 수정
2.10.11 2017-07-11 2808 최지수
  • 모듈 내부 아랍어 텍스트 추가 (단말 언어를 아랍어로 설정했을 경우 모듈 UI 텍스트가 아랍어로 노출)
2.10.10 2017-02-27 2805 정다운
  • 웹뷰 지연처리 로직 예외 처리 대응
  • ‘오늘 하루 안보기’ 기능 수행 후 머큐리 기능 호출시 크래시 발생 버그 수정
  • “MERCURY_SHOW_NOTICE_ONLY” 페이지 호출시 오늘 하루 안보기 여부에 영향을 받지 않도록 변경
2.10.9 2017-01-26 2803 정다운
  • 데이터 요청에 대한 네트워크 타임아웃 로직 추가
  • 웹뷰 요청에 대한 네트워크 타임아웃 로직 추가(타임아웃 발생 시 자체 에러페이지 노출)
2.10.8 2016-11-28 2796 정다운
  • 국가코드가 HK(홍콩)일 때 번체가 표시되도록 수정
2.10.7 2016-09-09 2789 정다운
  • MercuryGetCustomViewInfo 통합 모듈 대응 코드 추가
  • review 팝업 버튼 위치 수정
2.10.6 2016-07-27 2783 정다운
  • 리뷰(review) 팝업, 종료(moregames) 팝업 UI 변경
  • 오늘 하루 안보기를 무시하고 강제로 호출되는 페이지의 ‘오늘 하루 안보기' 체크 박스 및 텍스트가 나오지 않게 호출하도록 수정
  • 종료(moregames) 팝업에서 ‘더 많은 게임' 페이지 이동 시 외부 브라우저가 아닌 앱 내의 웹뷰로 노출되게 변경
    • 특정 단말에서 오류 발생 시 예외처리 하여 외부 브라우저로 노출
2.10.5 2016-05-26 2774 정다운
  • DID 최초 발급시 UI block 버그 수정
  • Offerwall 호출 버그 수정
2.10.4 2016-04-12 2764 김규진
2.10.3 2016-03-17 2754 김규진
  • Mercury/20160128 custom view info bugfix
    • X509TrustManager 관련 코드 제거
    • C/C++용 헤더(개별 모듈로 사용 시 필요)의 enum 값 오류 수정
    • customViewInfo 관련 동작 오류 수정
2.10.2 2016-01-26 2747 김규진
  • 내부 로직 중 개별 서버 세팅값이 반영 되도록 수정
2.10.1 2015-12-17 2735 김규진
  • 일부 단말에서 UI 레이아웃 깨지는 문제 수정
2.8.1 2015-10-16 2726 김규진
2.8.0 2015-08-12 2711 김규진
2.7.6 2015-07-03 2697 김규진
2.7.5 2015-06-22 2689 김규진
  • webview HW가속 예외 처리 (SDK 11)
  • Header Enum 값 변경
2.7.3 2015-06-17 2683 김규진
  • getCustomViewInfo 추가
  • Network Disconnect 콜백 이후 재 호출 안되는 현상 수정
  • 서버 도메인 변경
    • 변경 전 : m.mercury.com2us.com
    • 변경 후 : m-mercury.qpyou.cn
2.7.1 2015-06-05 2677 박가진
2.7.0 2015-06-04 2673 박가진
2.6.1 2015-05-26 2670 박가진
2.6.0 2015-04-29 2661 박가진
  • ModuleManager v2 대응
  • 특정 단말에서 UI 축소되어 표시되는 증상 수정
  • API 간소화
2.5.5 2015-04-02 2655 박가진
2.5.4 2015-03-20 2651 박가진
2.5.3 2015-03-19 2650 박가진
2.5.2 2015/3/5 2647 박가진
  • UI 언어지원 확대 (총 16개 언어)
기존 8개 언어 - English, Korean, French, German, Chinese(간체), Chinese(번체), Russian
추가 8개 언어 - Spanish, Portuguese, Indonesian, Malay, Vietnamese, Thai, Italian, Turkish
2.4.3 2015/2/5 2638 박가진
  • 간체 번체 뒤바뀐 버그 수정
  • 허니콤 계열 단말에서 Mercury UI 영역 계산 버그 수정
  • 허니컴 계열 단말에서 앱 실행 초기 시 단말 회전 상태 인식 버그 수정
2.4.0 2014/11/26 2612 강주상
2.3.11 2014/10/24 2588 임성훈
  • Wrapper 프로젝트가 Lollipop OS에서 죽는 문제 해결
  • 독어 로딩문구 오류 수정
2.3.10 2014/10/21 2587 임성훈
  • Show함수를 통해 대배너와 공지사항을 동시에 띄울 때, ScrollLock이 비정상적으로 동작하는 문제 수정
2.3.9 2014/10/07 2586 임성훈
  • Mercury 창이 여러 개일 경우, '하루안보기' 안되는 문제 수정
2.3.8 2014/07/10 2574 임성훈
  • Mercury BackOffice 설정이 잘못되었을 경우, 클라이언트에서 Close-callback을 받지 못한 문제 수정.
2.3.7 2014/07/10 2563 임성훈
  • MercuryShowEx API 추가. (여러 가지 추가 정보를 머큐리 서버에 보낼 수 있음.)
  • callback에서 MERCURY_NETWORK_DISCONNECT을 제공하지 않습니다.
2.3.5 2014/04/22 2549 임성훈
  • 전면배너 클릭 후 페이지 이동 시, Scroll Lock 걸리는 문제 수정
2.3.4 2014/03/07 2541 조태형
  • 전면배너 하루안보기 기능 동작하지 않는 문제 수정
2.3.3 2014/02/18 2537 김혜란
  • requestForcedShowForNotice 호출 시 죽는 문제 수정
2.3.2 2014/02/17 2534 김혜란
  • 하루 안보기 체크 기능 오류 수정.
2.3.1 2014/02/12 2530 김혜란
  • 전면배너 기능 추가.
  • 다중 웹뷰 기능 추가.
  • 각 show api에 uid 파라미터 받도록 수정.
2.1.1 2013/12/16 2519 김혜란
  • 닫기 버튼 터치 영역 확장.
2.0.8 2013/09/25 2488 김혜란
  • 내부 로직 중 처음 getDID 시 내부에서 다른 thread 를 통해 DID 를 요청하되, 처음에는 빈문자열이 한번 리턴되는 구조에서, 요청 주체에서 새로운 thread 에서 호출하는 구조로 변경
2.0.6 2013/08/29 2471 김혜란
  • 웹뷰 텍스트 인풋 버그가 수정되었습니다.
2.0.4 2013/08/23 2463 김혜란
  • 쿠키에 DID 내용이 추가되었습니다.
2.0.3 2013/07/31 2428 김혜란
  • 머큐리 웹뷰의 사이즈가 단말 사이즈로 변경되었습니다.
    • 사이즈 때문에 추가적인 처리(터치 및 배경 알파처리)가 있으셨다면 제거해주셔도 좋습니다.
  • 머큐리의 웹뷰가 공지와 이벤트 두 가지를 제공합니다.
    • 공지
      • 일반 노출 함수 : requestShowForNotice()
      • 강제 노출 함수 : requestForcedShowForNotice()
      • 콜백 : MERCURY_NOTICE_OPEN, MERCURY_NOTICE_CLOSE
    • 이벤트
      • 일반 노출 함수 : requestShowForEvent()
      • 강제 노출 함수 : requestForcedShowForEvent()
      • 콜백 : MERCURY_EVENT_OPEN, MERCURY_EVENT_CLOSE
  • 뉴스배너 CPI 및 이벤트 개인화 페이지의 사용을 위한 함수 void setUid(String uid)가 추가되었습니다.
    • 로그인 완료 콜백을 받고 난 후, 적용하시는 것을 권고드립니다.
  • 하루 안 보기 기능이 추가되었습니다.
    • 웹 페이지 상에서 하루 안 보기를 체크하면 그에 해당하는 페이지 타입(공지/이벤트)만 하루 안 보기가 적용이 됩니다.
    • requestForcedShowForNotice(), requestForcedShowForNotice()를 호출했을 때에는 상관없이 보이게 됩니다.
    • 해당 기능은 24시간이 아닌, 체크한 날짜에 따라 호출 여부가 결정 됩니다.
1.0.3 2013/07/16 2415 김혜란
  • 테스트용 로그가 있는 부분 삭제.
1.0.2 2013/07/16 2412 김혜란
  • Load First 기능을 추가하여, 웹 내용을 먼저 로딩할 수 있도록 수정.
    • CS_MercuryLoadFirst()를 CS_MercuryShow()이전에 호출하여, 웹페이지를 Initialize시점에 로딩할 수 있도록 합니다.
      로딩을 먼저하여 실제 머큐리가 로딩되는 시점에서는 미리 로딩된 웹페이지를 보여주기 때문에 좀더 로딩이 빨라진 것처럼 보이게 합니다.
      항상 CS_MercuryLoadFirst()는 CS_MercurySetCallBack()이후, CS_MercuryShow()와 CS_MercuryForcedShow()이전 시점에 호출되어야 합니다.
1.0.1 2013/05/02 2278 김혜란
  • Mercury OPEN 콜백 추가
1.0.0 2013/03/01 김혜란
  • Mercury 배포


모든 버전의 역사 보기

공통 유의 사항

<작성법 참고>

Mercury적용 시 유의 사항

  • Active User -> Hive Login -> Mercury 초기화 및 SetUID 설정 순서로 모듈이 실행되도록 적용한다
    위 순서로 하지 않으면 Mercury관련 서버에 UID Log가 남지 않는다
<작성법 참고>

App ID 등록

  • 앱 아이디, 노출 여부, 노출시킬 배너를 백오피스에 등록해야 합니다.
    • 앱 정보를 등록하지 않을 경우 배너가 노출되지 않습니다.
<작성법 참고>

UI제작 필요

  • Mercury 공지사항 노출 함수(ShowNotice)를 사용하기 위한 버튼 UI제작이 필요합니다.
<작성법 참고>

함수호출 위치

  • CS_MercuryShowForNotice와 CS_MercuryForcedShowForNotice 함수가 호출되는 위치는 같은 Scene에서 이루어지도록 해야 합니다.
CS_MercuryShowForEvent와 CS_MercuryForcedShowForEvent 함수도 동일합니다.
<작성법 참고>

서버 에러 로그

  • 서버에서 미노출 상태에 대한 에러로그를 클라이언트 로그로 출력하고 있습니다. 해당 로그들을 확인하고 문의하면 좀 더 빠른 답변을 얻으실 수 있습니다.
    • error number : 0, msg : success => 성공
    • error number : 1, msg : post data is null => 클라이언트로부터 받은 post 데이터가 없음
    • error number : 2, msg : some data are missing => App ID, language, action 의 중요한 정보가 없음
    • error number : 3, msg : cannot find mercury main info => 머큐리 메인 정보를 찾을 수 없음 : App ID 미등록일 확률이 높음.
    • error number : 5, msg : cannot find cpi/event info => 전면배너에 등록될 이벤트나 CPI정보가 없음: 웹뷰개수가 1개이고 전면배너만 노출하도록 설정했을 경우.
<작성법 참고>

YouTube 동영상 프로모션 (Android & iOS Mercury v2.11.0+)

  • YouTube 동영상 링크가 담긴 스키마를 프로모션 페이지의 링크로 설정하여 Mercury에서 재생 가능
    • 스키마 형태
c2smercury://videoplay?{pid}|{time_to_show_close_btn}|{time_to_remain_close_btn}|{URL}

// ex ) c2smercury://videoplay?200001|4|2|https://www.youtube.com/watch?v=0gIOjN_kmKc
// - pid : 프로모션
// - time_to_show_close_btn : 동영상 종료 버튼 최초 노출 시간(sec)
// - time_to_remain_close_btn : 종료 버튼 노출 시 화면에 유지 시간(sec)
// - URL : YouTube 동영상 경로
  • 스키마 호출을 통해 동영상이 재생될 때 MERCURY_RESULT에서 콜백(MercuryCB)로 'MERCURY_VIDEO_PROMOTION_START = 17' 값이 전달됩니다. 해당 콜백을 받았다면 게임 사운드를 낮추거나 음소거하여 동영상 사운드와 겹치지 않게 조정합니다.
  • 동영상이 종료되면 (닫기 버튼을 누르거나 재생 완료) 'MERCURY_VIDEO_PROMOTION_FINISH = 18' 값이 전달됩니다. 해당 콜백을 받았다면 게임 사운드를 올리거나 복구하여 소리 재생이 가능하도록 합니다. [콜백 타입값 확인하기]
  • 커스텀 보드를 통해 아래 예시처럼 스키마 링크를 설정할 수 있습니다.

mercury 2 11 0 videopromotionsetting.png

  • 동영상 프로모션 사용을 위한 Android 및 iOS 프로젝트 설정
    • Android
      • .jar 파일 추가 : YouTubeAndroidPlayerApi.jar
      • 리소스 추가 : [리소스 확인하기]
      • AndroidManifest.xml에 추가
        <activity
           android:name="com.com2us.module.mercury.MercuryVideoActivity"
           android:hardwareAccelerated="true"
           android:screenOrientation="sensorLandscape"
           android:launchMode="standard"/>
        <!-- 동영샹 재생 시 노출되는 화면 방향은 screenOrientation 설정 값으로 변경 가능 -->
    • iOS
      • WebKit.framework을 추가
  • 동영상 프로모션 설정 시 '플랫폼 서버팀 박충렬 책임, 배하석 선임' 으로 문의바랍니다.
<작성법 참고>

YouTube 동영상 프로모션 기능 강화 (Android & iOS Mercury v2.12.4+)

  • YouTube에서 제공하는 다양한 옵션을 사용할 수 있도록 기능이 업데이트 되었습니다
    • (1-1) Android 설정하기
      • YouTubeAndroidWebPlayerApi.aar 라이브러리를 추가하고 참고해야합니다.
      • AndroidManifest.xml에 아래 내용을 추가합니다.
<application>
...
    <activity
           android:name="com.com2us.module.mercury.MercuryWebVideoActivity"
           android:hardwareAccelerated="true"
           android:screenOrientation="sensorLandscape"
           android:theme="@style/Theme.AppCompat.NoActionBar"/>
<!-- 동영샹 재생 시 노출되는 화면 방향은 screenOrientation 설정 값으로 변경 가능 -->
...
<application/>


<작성법 참고>

UserAcquisition 친구 초대 링크 전송 기능 (Android Mercury v2.13.0+, iOS Mercury v2.13.1+)

  • UserAcquisition 친구 초대 링크 전송 기능을 사용할 수 있도록 업데이트 되었습니다.
    • 딥링크 스키마를 받을 수 있도록 설정하기 (Android / iOS)
      • Android Mercury v2.13.0, iOS Mercury v2.13.1 이상 라이브러리를 추가하고 참조해야합니다.
        (Android Mercury v2.12.7, iOS Mercury v2.12.8 버전에 해당 기능이 포함되었으나 해당 버전은 정식 배포된 버전이 아닙니다.)
      • Android ModuleManager v2.5.12 이상 라이브러리를 추가하고 참조해야합니다.
      • [Android] AndroidManifest.xml 및 build.gradle 에 아래 내용을 추가합니다.
        <!-- AndroidManifest.xml -->
        <application>
        <!--...(생략)...-->
            <!-- 메인이 되는 런쳐 액티비티에 설정합니다 -->
            <activity ... (생략)...
                   <intent-filter >
                        <action android:name="android.intent.action.VIEW" />
                        <category android:name="android.intent.category.DEFAULT" />
                        <category android:name="android.intent.category.BROWSABLE" />
                        <data android:scheme="com.com2us.hivesdk.normal.freefull.google.global.android.common" /> <!-- 앱 아이디를 본 프로젝트 것으로 수정해주세요 -->
                        <!-- 해당 설정을 추가해야 '초대를 받는 유저'가 딥링크를 터치하였을때 앱이 딥링크 스키마를 수신할 수 있습니다. -->
                    </intent-filter>
                </activity>
        <!--...(생략)...-->
        <application/>
        <!-- AndroidManifest.xml -->
        <application>
        <!--...(생략)...-->
            <!-- 페이스북 공유 시 필요한 설정입니다. -->
               <provider
                   android:name="com.facebook.FacebookContentProvider"
                   android:authorities="com.facebook.app.FacebookContentProvider${facebook_app_id}"
                   android:exported="true" />
            <!-- facebook 앱아이디를 facebook_app_id라는 변수와 같이 사용할 경우 위와 같이 추가 -->
            <!-- facebook 개발자 사이트에서 제공하는 아래 가이드 스크린샷을 참고 바랍니다. -->
        <!--...(생략)...-->
        <application/>
        facebook contentProvider 설정.png
        // build.gradle에서 facebook의 share 라이브러리를 추가합니다.
        'com.facebook.android:facebook-share:5.4.+'
      • [iOS] 스키마가 전달될 수 있도록 'URL Scheme 추가'을 참고하여 등록합니다. 스키마의 형태는 아래 내용을 참고 바랍니다.
        // 딥링크 터치로 진입 시 액티비티로 들어오는 스키마 형태
        com.com2us.hivesdk.normal.freefull.google.global.android.common://hivePromotionDeepLinkInvite?uatoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJ
  • 초대 링크를 전달하는 입장
    • (1) UserAcquisition 초대 링크 및 메시지 정보를 프로모션 서버에 요청
      • UserAcquisition 초대 링크 및 메시지 정보를 반환 받는 API를 호출하여 초대 링크("invite_link")와 초대 메시지("invite_message")를 얻을 수 있습니다.
      • 정보를 반환 받는 API 호출 시 초대 링크를 전달하는 유저의 uid와 프로모션 서버와 사전에 논의된 uatoken 정보를 API의 additionalInfo 파라미터에 넣어 전달합니다. (uatoken 값은 json 포멧으로 전달하며 uatoken 키는 모두 소문자입니다.) (uatoken 값은 초대를 받는 경우 검증에 사용될 수 있으니 게임 서버 등에서 관리 바랍니다.)
        // 반환 데이터 형태
        {"uainfo":{"result_code":"0","result_message":"success","invite_message":"HIVE SDK에 초대합니다. 함께 플레이 하면 즐거움이 두 배 ★☆ 초대문구","invite_link":"http:\/\/test-ua.withhive.com\/ko\/ua684c?t=1571725383"}}
        // result_code 목록
        /**
        0     RESULT_SUCCESS                   성공      
        100     RESULT_ERROR_SERVER              서버 오류          
        200     RESULT_ERROR_PARAMETER           파라메타 전송 오류      
        201     RESULT_ERROR_INVALID_PARAMETER   파라메타 유효성 오류      
        300     RESULT_ERROR_DATABASE            데이터베이스 오류        
        301     RESULT_ERROR_QUERY_FAILED        쿼리 실패        
        302     RESULT_ERROR_DATA_NOT_FOUND      조회 실패
        */
    • (2) 초대 링크와 초대 메시지를 활용하여 초대 기능 호출
      • 앞서 얻은 초대 링크와 초대 메시지를 활용하여 초대 기능 API를 호출합니다.
      • 초대 기능 API를 호출할 경우 초대 링크와 초대 메시지를 전달할 애플리케이션을 선택하는 UI가 노출됩니다. 애플리케이션을 선택하거나 클립보드에 내용을 복사하는 기능을 사용할 수 있습니다.
        UA 초대링크전달.png
  • 초대 링크를 받는 입장
    • (1) 초대로 온 링크를 터치합니다.
      • 링크를 터치할 경우 사전에 구성된 웹 페이지가 오픈됩니다. (웹 페이지가 정상 노출되지 않을 경우 GCP 서버팀 프로모션 담당자분께 문의 바랍니다.)
      • 웹 페이지는 '앱 실행', '앱 설치' 버튼을 지원합니다. 앱이 설치되어있지 않을 경우 '앱 설치' 버튼을 눌러 앱이 설치되도록 가이드 부탁드립니다. 앱이 설치되어있을 경우 '앱 실행' 버튼을 눌러 초대 링크에 대한 보상을 받을 수 있습니다.
        UA 초대링크페이지.png
    • (2) '앱 실행'을 통해 앱에 진입한 경우
      • Android/iOS에서 스키마를 받을 수 있는 설정이 정상적으로 되어있다면 아래와 같은 형태의 스키마가 넘어옵니다. 해당 스키마의 'hivePromotionDeepLinkInvite?' 이후 값을 파싱하여 uatoken 값을 받을 수 있습니다.
        // 딥링크 터치로 진입 시 액티비티로 들어오는 스키마 형태
        com.com2us.hivesdk.normal.freefull.google.global.android.common://hivePromotionDeepLinkInvite?uatoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJ
      • Android에서 스키마를 파싱하는 경우 activity에서 intent 데이터를 획득하여 onResume과 onNewIntent 메서드와 아래와 같이 구현할 수 있습니다.
        // Android 예시 코드입니다. 참고 바라며 앱에서 보다 편리한 방법으로 구현하셔도 됩니다.
        @Override
        protected void onResume() {
                super.onResume();
                Intent intent = getIntent();
                Uri data = intent.getData();

                if(data != null) {
                        Log.d("UATest", "onResume data : " + data.toString());

                        String[] schemeArr = data.toString().split("'hivePromotionDeepLinkInvite\\?");
                        if(schemeArr.length > 1) {
                                String[] dataSetArr = schemeArr[1].split("&");
                                for(int i = 0; i < dataSetArr.length; i++) {
                                        String[] keyValueArr = dataSetArr[i].split("=");
                                        if(keyValueArr.length > 1 && keyValueArr[0].equals("uatoken")) {
                                                uaToken = keyValueArr[1];
                                                Log.d("UATest", "onResume receivedUaToken : " + uaToken);

                                                showDialogMsg("[초대받은 유저 UA Token 획득 성공]");
                                                break;
                                        }
                                }
                        }
                }

                Log.d("UATest", "onResume intent : " + intent.toString());
        }

        @Override
        protected void onNewIntent(Intent intent) {
                super.onNewIntent(intent);

                Bundle intentBundle = intent.getExtras();
                Uri data = intent.getData();

                if(data != null) {
                        Log.d("UATest", "onNewIntent data : " + data.toString());

                        String[] schemeArr = data.toString().split("hivePromotionDeepLinkInvite\\?");
                        if(schemeArr.length > 1) {
                                String[] dataSetArr = schemeArr[1].split("&");
                                for(int i = 0; i < dataSetArr.length; i++) {
                                        String[] keyValueArr = dataSetArr[i].split("=");
                                        if(keyValueArr.length > 1 && keyValueArr[0].equals("uatoken")) {
                                                uaToken = keyValueArr[1];
                                                Log.d("UATest", "onNewIntent receivedUaToken : " + uaToken);

                                                showDialogMsg("[초대받은 유저 UA Token 획득 성공]");
                                                break;
                                        }
                                }
                        }
                }

                Log.d("UATest", "onNewIntent intent : " + intent.toString());
        }
      • iOS에서 스키마를 파싱하는 경우 아래와 예시와 같이 구현할 수 있습니다.
        // iOS 예시 코드입니다. 참고 바라며 앱에서 보다 편리한 방법으로 구현하셔도 됩니다.

        - (BOOL)application:(UIApplication*)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
           
            NSLog(@"TTTESTTT URL : %@",url);
           
            NSDictionary* dict = [self queryDictionaryFromURL:url];
           
            if(dict!=nil && dict[@"uatoken"]!=nil){
                [[NSUserDefaults standardUserDefaults] setObject:dict[@"uatoken"] forKey:@"mercury_sample_uatoken"];
                [[NSUserDefaults standardUserDefaults] synchronize];
            }
           
            return YES;
        }

        - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
        {
            return [self application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
        }


        - (NSDictionary *)queryDictionaryFromURL:(NSURL *)url
        {
            NSString* query = url.query;
            if (query == nil || query.length == 0)
                return nil;
           
            NSArray* components = [query componentsSeparatedByString:@"&"];
            NSMutableDictionary* dict = [@{} mutableCopy];
           
            for (NSString* component in components) {
                if ([component isEqualToString:@""]) continue;
               
                NSRange range    = [component rangeOfString:@"="];
                if (range.location == NSNotFound) {
                    [dict setObject:@"" forKey:component];
                }
                else {
                    NSString* key    = [component substringToIndex:range.location];
                    NSString* value    = [component substringFromIndex:range.location + range.length];
                    [dict setObject:value forKey:key];
                }
            }
           
            return dict;
        }
      • uatoken 값을 게임 서버 등에 관리하고 있는 값인지 확인하여 이상이 없는 경우 초대 링크로 들어온 인원에 보상을 할 수 있습니다.


Android 유의 사항

<작성법 참고>

v2.5.3 이상 버전 사용 시

<작성법 참고>

v2.5.5 이상 버전 사용 시


Android 적용 방법

<작성법 참고>
Jar 파일 추가 (Java Libraries)
Add JARS...
mercury.jar (svn://devbackup.com2us.kr/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/Mercury/libs/)
modulemanager.jar (svn://devbackup.com2us.kr/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/ModuleManager/libs/)

MainActivity.java

Com2uS Wrapper Project 는 이부분은 따로 설정할 필요가 없습니다.

import com.com2us.module.mercury.Mercury;
import com.com2us.module.mercury.Mercury.MercuryCB;

public class MainActivity extends Activity implements MercuryCB {

        Mercury mc;
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                ...

                mc = new Mercury(this);
                ...
        }
}

AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  • targetSdkVersion의 값이 28 이상인 경우
    • application 태그에 usesCleartextTraffic 설정을 추가해야 합니다. (http:// 관련 통신이 가능하도록)
      <application
         .. (기타 설정) ..
         android:usesCleartextTraffic="true" />

Resource 추가

Case 1

  • 아래 경로에서 리소스를 확인하시기 바랍니다.
svn://devbackup.com2us.com/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/Mercury/assets/mercury/
  • Wrapper Project 폴더 구성
mercury android res W.png
  • Non-Wrapper Project 폴더 구성
mercury android res N.png

새로운 UI가 적용된 v2.4.0 이상 버전 resource도 같은 경로에 넣어주시면 됩니다.


Case 2

  • Android에서 Mercury v2.10.13 이상 적용 시 해당합니다.
  • 아래 경로에서 리소스를 확인하시기 바랍니다.
svn://devbackup.com2us.com/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/Mercury/res/
  • 안드로이드 프로젝트의 /res 경로에 해당 리소스를 모두 복사하도록 합니다.
mercury android 2 10 13 resource.png

Case 3

  • Android에서 Mercury v2.11.0 이상 적용 시 해당합니다.
  • 아래 경로에서 리소스를 확인하시기 바랍니다.
svn://devbackup.com2us.com/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/Mercury/res/
  • 커스텀뷰 UI 개선 및 YouTube 동영상 프로모션 기능이 추가되어 아래 리소스가 모두 추가되어야 합니다.
    • /res/layout 경로 (7개) : promotion_customview_v2_banner_landscape.xml, promotion_customview_v2_banner_portrait.xml, promotion_customview_v2_full_landscape.xml, promotion_customview_v2_full_portrait.xml, promotion_video_control_dialog.xml, promotion_video_main.xml, promotion_video_sub.xml
    • /res/drawable 경로(9개) : promotion_customview_btn_close_image.png, promotion_customview_btn_close_vector.xml, promotion_customview_btn_next_image.png, promotion_customview_btn_next_vector.xml, promotion_customview_btn_prev_image.png, promotion_customview_btn_prev_vector.xml, promotion_customview_btn_refresh_image.png, promotion_customview_btn_refresh_vector.xml, promotion_customview_rounded_shape.png
mercury 2 11 0 resource.png

Case 4

  • Android에서 Mercury v2.15.0 이상 적용 시 해당합니다.
  • 아래 경로에서 리소스를 확인하시기 바랍니다.
svn://devbackup.com2us.com/Wrapper_redist/program/templates/AndroidTemplate/Com2uSAndroid/module/Mercury/res/
  • 프로모션 UI에 대한 다해상도 지원으로 아래 리소스를 추가해야 합니다.
    • /res/layout 경로 (3개) : promotion_popup_1btn_dialog.xml, promotion_popup_2btn_dialog.xml, promotion_popup_3btn_dialog.xml
    • /res/drawable 경로(4개) : hive_popup_border.xml, hive_popup_round_button_box.xml, hive_popup_round_top.xml, hive_popup_round_touch_box.xml
    • /res/drawable-hdpi 경로(2개) : hive_promotion_btn_native_x.png, hive_promotion_offerwall_btn_x.png
    • /res/drawable-mdpi 경로(2개) : hive_promotion_btn_native_x.png, hive_promotion_offerwall_btn_x.png
    • /res/drawable-xdpi 경로(3개) : hive_promotion_btn_native_x.png, hive_promotion_offerwall_btn_x.png, hivedialog_scroll_bar.png
    • /res/drawable-xxdpi 경로(2개) : hive_promotion_btn_native_x.png, hive_promotion_offerwall_btn_x.png
    • /res/drawable-xxxdpi 경로(2개) : hive_promotion_btn_native_x.png, hive_promotion_offerwall_btn_x.png
    • /res/values 경로(1개) : hive_dimens.xml
    • /res/values-sw600dp 경로(1개) : hive_dimens.xml
  • v2.15.0에서 UI 개선으로 더이상 사용하지 않는 리소스
    • /assets/common/mercury 경로(20개) : popup_box_end_pad.png, popup_box_end_pad_0_article.png, popup_box_end_pad_1_btn_left.png, popup_box_end_pad_1_btn_center.png, popup_box_end_pad_1_btn_right.png, popup_box_end_phone.png, popup_box_end_phone_0_article.png, popup_box_end_phone_1_btn_left.png,, popup_box_end_phone_1_btn_center.png, popup_box_end_phone_1_btn_right.png, popup_box_review_pad.png, popup_box_review_pad_0_article.png, popup_box_review_pad_1_btn_left.png, popup_box_review_pad_1_btn_center.png, popup_box_review_pad_1_btn_right.png, popup_box_review_phone.png, popup_box_review_phone_0_article.png, popup_box_review_phone_1_btn_left.png, popup_box_review_phone_1_btn_center.png, popup_box_review_phone_1_btn_right.png,
    • /assets/common/offerwall 경로(2개) : btn_native_X.png, btn_native_X_tablet.png


Android Mercury v2.12.4 부터 별도의 리소스 추가가 필요 없습니다.

  • .aar 형태의 라이브러리로 배포되어 리소스가 라이브러리에 포함되어있습니다. 따라서 별도의 리소스 파일을 추가할 필요가 없습니다.

Android Studio 적용 방법 (190625 배포 이후)

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

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

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

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

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

  • Mercury 라이브러리는 Android Support 라이브러리 등 외부 라이브러리를 필요로 합니다. 아래 라이브러리를 build.gradle의 dependencies 항목에 추가하여 같이 사용하도록 합니다.
//... (생략)...
dependencies {
  // ...(생략)...
  implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  implementation 'androidx.appcompat:appcompat:1.0.0'
  implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
//...(생략)...

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

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

Debug

  • Mercury
Mercury Log Tag


Com2uS 공통모듈 >> Mercury >> Mercury 모듈 적용 가이드 (iOS)

Mercury 모듈 적용 가이드 (Android)

Mercury 모듈 적용 가이드 (Unity3d)

>> Mercury 모듈 레퍼런스 가이드 >> Mercury FAQ
개인 도구
이름공간

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