Hive 프로모션에서는 게임에서 활용할 수 있도록 게임 리뷰 팝업과 게임 종료 팝업을 제공합니다. 게임 유저들의 긍정적인 평점 및 사용 후기는 다른 유저들이 게임을 이용하는데 영향을 미치게 됩니다. 유도 팝업을 제공하면 유저의 참여 건수가 5~10배 증가하는 것으로 알려져 있습니다. Hive에서 제공하는 기능을 이용할 수도 있고 게임에서 직접 구현하고 마켓 URL로 링크해도 됩니다.
- Hive 리뷰 팝업 – 게임 앱을 다운로드 받은 마켓에 게임에 대한 별점과 리뷰를 남기도록 유도하는 팝업
- 네이티브 리뷰 팝업 (Android/iOS) – 마켓으로 이동하지 않고 게임 내에서 별점과 리뷰를 즉시 남기도록 유도하는 팝업
- 종료 팝업 – 유저가 게임을 종료할 때 띄우는 팝업 (정책상의 이유로 Android만 제공)
리뷰 팝업
리뷰 팝업은 유저가 마켓(예: Google Play)에 게임에 대한 별점과 후기를 남기도록 유도하는 팝업입니다. Hive SDK v1.16.2과 v4.11.0 버전부터는 Hive 리뷰 팝업 문구를 게임마다 다르게 개발할 수 있도록 지원합니다. Hive가 제공하는 팝업이 아니라 여러분이 직접 리뷰 유도 팝업을 구현하면 리뷰 팝업 문구와 팝업의 UI를 원하는 대로 구성할 수 있습니다. 이 때 게임을 다운로드하는 마켓 URL을 잊지 말고 팝업에 링크해주세요.
Hive 리뷰 팝업 조건
리뷰 팝업에 대해 Hive가 권장하는 조건은 다음과 같습니다.
- 게임 설치 후 최초로 게임을 실행시킨 후 5분 내외로 리뷰 유도 팝업 띄우기
- 유저가 게임 안에서 긍정적인 경험(예: 스테이지 클리어, 보상 지급)을 할 때 띄우기
- 일정 횟수 반복하여 띄우기를 권장하나 유저에게 불편함을 초래하지 말아야 함
Google과 Apple은 보상을 제공하여 높은 평가를 유도하는 것을 금지하고 있으며, 특히 Google은 보상에 대한 언급 자체를 금지하고 있습니다.
Hive 리뷰 팝업의 기능은 다음과 같습니다.
- 유저가 닫기(X) 버튼을 클릭한 경우 리뷰 팝업이 동일 단말기에서 다시 노출되지 않음
- 유저가 다음에 하기 버튼을 클릭한 경우 리뷰 팝업이 동일 단말기에서 다시 노출될 수 있음
- 앱 버전이 바뀌면 이미 참여하거나 거부한 유저에게도 다시 노출됨
- 리뷰 팝업의 노출 조건이나 노출 횟수는 Hive 조건에 맞게 게임에서 직접 구현해야 함
Hive 리뷰 팝업 띄우기
Hive 리뷰 팝업을 띄우려면 Promotion 클래스의 showReview()
메서드를 호출하세요. Hive 콘솔의 프로모션 > 앱설정에서 설정한 내용에 따라 기본 스타일 또는 커스텀 스타일 리뷰 팝업이 노출됩니다. (개발자 사이트의 운영 > 프로모션 > 앱 설정하기 참조)
API Reference: Promotion.showReview
1 2 3 4 5 6 7 |
using hive; Promotion.showReview((ResultAPI result, PromotionEventType viewEventType) => { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: Promotion::showReview
1 2 3 4 5 6 7 8 9 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; Promotion::showReview([=](ResultAPI const & result, PromotionEventType viewEventType) { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: Promotion.showReview
1 2 3 4 5 6 7 8 9 10 |
import com.hive.Promotion import com.hive.ResultAPI Promotion.showReview(object : Promotion.PromotionViewListener { override fun onPromotionView(result: ResultAPI, promotionEventType: Promotion.PromotionViewResultType) { if (result.isSuccess) { // 호출 성공 } } }) |
API Reference: Promotion.INSTANCE.showReview
1 2 3 4 5 6 7 8 |
import com.hive.Promotion; import com.hive.ResultAPI; Promotion.INSTANCE.showReview((result, promotionEventType) -> { if (result.isSuccess()) { // 호출 성공 } }); |
API Reference: PromotionInterface.showReview
1 2 3 4 5 6 7 |
import HIVEService PromotionInterface.showReview() { result, viewResultType in if result.isSuccess() { // 호출 성공 } } |
API Reference: HIVEPromotion showReview
1 2 3 4 5 6 7 |
#import <HIVEService/HIVEService-Swift.h> [HIVEPromotion showReview: ^(ResultAPI *result, HIVEPromotionViewResultType viewResultType) { if ([result isSuccess]) { // API 호출 성공 } }]; |
Android 네이티브 리뷰 팝업 조건
Hive SDK v4.15.1 버전부터 Android 환경에서 게임을 이용하는 유저라면 게임 실행 중에 리뷰를 남길 수 있는 기능을 제공합니다. 기존 리뷰 팝업과 달리 마켓으로 이동하지 않아도 만족도 평가가 가능하며, 리뷰 요청에 응할 경우 작성 페이지로 즉시 이동합니다. 다음과 같이 Google에서 제공하는 정책에 따라 Android 네이티브 리뷰 팝업이 노출됩니다.
- 리뷰 팝업은 Google 내부 정책에 따라 노출 여부가 결정되며, 임의로 노출 여부를 변경할 수 없습니다.
- 앱 아이디에 구글 마켓이 연결되어 있다면, Google Play 스토어가 설치되어 있는 Android 5.0 (API 수준 21) 이상의 Android 기기에서 노출할 수 있습니다.
- 사용자 개인정보 보호 강화 및 API 오용 방지를 위해 Google Play In-App Review API 가이드에 따라 API 호출할 것을 권장합니다.
- 개발 중인 빌드에서도 Google 내부 정책에 따라 노출 여부가 결정됩니다. 상시 노출을 설정하려면 Google에서 제공하는 인앱 리뷰 테스트 가이드를 참고하세요.
Android 네이티브 리뷰 팝업 띄우기
iOS 네이티브 리뷰 팝업 조건
Hive SDK v1.16.0과 v4.10.0 버전부터 iOS 환경에서 게임을 이용하는 유저라면 게임 실행 중에 리뷰를 남길 수 있는 기능을 제공합니다. 기존 리뷰 팝업과 달리 마켓으로 이동하지 않아도 만족도 평가가 가능하며, 리뷰 요청에 응할 경우 작성 페이지로 즉시 이동합니다. iOS 네이티브 리뷰 팝업을 사용할 수 있는 조건은 다음과 같습니다.
- Hive에서 공통으로 제공하는 리뷰 팝업을 그대로 사용하더라도 iOS 네이티브 리뷰 팝업과 동시 사용 가능
- 게임에서 개발한 맞춤 리뷰 팝업을 사용할 경우에는 iOS 네이티브 리뷰 팝업과 동시 사용 불가
Apple에서 제공하는 정책에 따라 iOS 네이티브 리뷰 팝업이 노출됩니다.
- 노출 순서나 텍스트, UI 등을 임의로 변경 불가
- 팝업은 각 앱에서 디바이스별 연 3회 까지만 노출되며, 노출 여부는 Apple 내부 정책에 따라 동작하므로 임의 변경 불가
- iOS 10.3 이상 버전에서 동작
- 유저가 기기 설정에서 앱 내 평가 및 리뷰 항목을 비활성화(OFF)한 경우 노출되지 않음
- 개발 중인 빌드에서는 노출 횟수와 관계 없이 항상 노출되나, 마켓에 평점을 제출할 수 없음
- TestFlight을 이용해 배포한 앱에서는 노출되지 않음
iOS 네이티브 리뷰 팝업 띄우기
네이티브 리뷰 팝업을 띄우려면 Promotion 클래스의 showNativeReview()
메서드를 호출하세요.
API Reference: Promotion.showNativeReview
1 2 3 |
using hive; Promotion.showNativeReview(); |
API Reference: Promotion::showNativeReview
1 2 3 4 5 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; Promotion::showNativeReview(NULL); |
API Reference: Promotion.showNativeReview
1 2 3 4 |
import com.hive.Promotion import com.hive.ResultAPI Promotion.showNativeReview() |
API Reference: Promotion.INSTANCE.showNativeReview
1 2 3 4 |
import com.hive.Promotion; import com.hive.ResultAPI; Promotion.INSTANCE.showNativeReview() |
API Reference: PromotionInterface.showNativeReview
1 2 3 |
import HIVEService PromotionInterface.showNativeReview() |
API Reference: HIVEPromotion showNativeReivew
1 2 3 |
#import <HIVEService/HIVEService-Swift.h> [HIVEPromotion showNativeReivew]; |
종료 팝업
종료 팝업은 유저에게 게임을 종료할지 묻는 팝업이며, 더불어 Hive를 탑재한 게임 추천 목록을 제공 받을지 함께 확인 요청합니다.
종료 팝업 조건
Android 앱 개발 가이드라인에 따르면, 게임 실행 중 유저가 단말기의 뒤로 가기 버튼을 터치했을 때 현재 페이지의 이전 페이지로 이동하도록 구현해야 합니다. 이에 따라 게임 실행 중 유저가 단말기의 뒤로 가기 버튼을 터치하면 게임을 일시 정지 시킨 후, 유저에게 게임을 계속할지 종료할지 물어보아야 합니다. 더 이상 돌아갈 이전 페이지가 없을 때 종료 팝업을 띄우세요. 돌아갈 이전 페이지가 없을 때는 주로 유저가 게임 로비에 있을 때입니다.
종료 팝업 띄우기
종료 팝업을 띄우려면 Promotion 클래스의 showExit()
메서드를 호출하세요. 종료 팝업이 뜬 후에 유저가 종료하기 버튼을 클릭하면 promotionEventType
에 PromotionEventType.EXIT
가 할당됩니다.
다음은 종료 팝업을 띄우는 예제 코드입니다. Apple 정책상 iOS 단말기에서는 종료 팝업을 제공하지 않으므로 iOS 예제 코드는 없습니다.
API Reference: hive.Promotion.showExit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using hive; hive.Promotion.showExit(ResultAPI result, PromotionEventType viewEventType) => { if (!result.isSuccess()) { return; } // 호출 성공 if (viewEventType == PromotionEventType.EXIT) { // TODO: // 앱 종료 기능을 구현하세요 Application.Quit(); } }); |
API Reference: Promotion::showExit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; Promotion::showExit([=](ResultAPI result, PromotionEventType viewEventType) { if (!result.isSuccess()) { return; } // 호출 성공 if (viewEventType == PromotionEventType::EXIT) { // TODO: // 앱 종료 기능을 구현하세요 // Cocos2d-x 엔진 사용자 exit(0); // Unreal 엔진 사용자 UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false); } }); |
API Reference: com.hive.Promotion.showExit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import com.hive.Promotion import com.hive.ResultAPI Promotion.showExit(object: Promotion.PromotionViewListener { override fun onPromotionView(result: ResultAPI, promotionEventType: Promotion.PromotionViewResultType) { if (!result.isSuccess) { return } // 호출 성공 if (promotionEventType == Promotion.PromotionViewResultType.NEED_TO_EXIT) { // TODO: // 앱 종료 기능을 구현하세요 exitProcess(0) } } }) |
API Reference: Promotion.INSTANCE.showExit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import com.hive.Promotion; import com.hive.ResultAPI; Promotion.INSTANCE.showExit((result, promotionEventType) -> { if (!result.isSuccess()) { return; } // 호출 성공 if (promotionEventType == Promotion.PromotionViewResultType.NEED_TO_EXIT) { // TODO: // 앱 종료 기능을 구현하세요 System.exit(0); } }); |