모바일 게임에서 푸시 통지 서비스는 게임 유저의 리텐션(잔존율) 관리에 중요한 수단입니다. Hive는 다양한 경로로 유저에게 알림을 보낼 수 있도록 푸시 서비스를 제공하는데, 모바일 게임의 리텐션을 올리기 위한 마케팅용 광고 푸시를 제공할 뿐만 아니라 Google의 FCM, Apple의 APNs, Amazon의 ADM을 지원합니다. 언어별 시간대 설정 역시 가능해 글로벌 서비스에 대응하고 있습니다. 푸시 정책은 KISA 및 Google Play Store 마켓 가이드라인을 준수하고 있습니다.
푸시 종류
리모트 푸시
Hive 콘솔을 통하거나 게임 서버에서 Hive 서버 API를 이용하여 유저의 단말기로 푸시를 발송하는 것을 리모트 푸시라고 합니다.
리모트 푸시를 받기 위해 별도로 게임에서 구현해야 할 부분은 없습니다. 다만, 유저가 리모트 푸시에 대한 설정을 조회하거나 설정을 변경할 때, Hive API를 호출하여 유저의 푸시 수신 설정을 확인하고 변경해 주어야 합니다. 자세히 보기
오버라이트
마켓 정책에 따라, 중복된 코드(Hive 콘솔 기준)의 푸시를 수신할 경우 최신 푸시만 노출하는 기능입니다. 푸시 등록 시 등록자가 Hive 콘솔에서 오버라이트 사용 여부를 선택할 수 있으며, 이 경우 동일한 코드를 사용한 푸시 메시지를 유저가 미확인할 경우, 이전 푸시는 신규 푸시로 덮어 쓰이게 됩니다.
Hive 콘솔에서 발송하는 푸시 알림에 대해서만 광고성 알림 수신동의 여부에 따른 필터링이 적용됩니다. 따라서 게임 서버에서 Hive 푸시 API를 이용해 발송하는 푸시는 정보성 알림으로 한정해야 합니다.
로컬 푸시
로컬 푸시 서비스는 게임 클라이언트에거 Hive API를 이용하여 유저에게 직접 푸시를 발송하는 방식입니다. Hive API를 이용하여 로컬 푸시를 등록하거나 해제할 수 있으며, Android 단말기용 푸시 UI를 커스터마이즈 할 수 있습니다. 자세히 보기
타임존 및 서머타임
Hive 푸시는 글로벌 전 지역의 타임존 및 서머타임이 적용됩니다. 예를 들어 미국 지역 유저를 대상으로 오후 6시에 발송되도록 예약해두면 뉴욕에 있는 유저와 LA에 있는 유저가 푸시 알림을 수신하는 시간은 3시간의 시차가 발생합니다. 반대로 지역에 상관없이 동시에 푸시 알림을 발송하는 기능도 제공합니다. 이 때는 푸시 알림의 메시지 내에 정해진 규격으로 시간을 표시하면 유저의 지역 시간을 기준으로 변환하여 발송됩니다. 서머타임은 서머타임이 적용되는 지역과 해당 일자에 맞춰 서버에서 자동으로 반영됩니다.
시차를 적용, 혹은 적용하지 않을지 여부는 백오피스에서 푸시 발송 캠페인을 작성할 때 작성자가 직접 설정할 수 있습니다.
푸시 설정
유저는 앱 설치 후 초기 실행 시 약관 동의를 받게 되고 마케팅용 광고 푸시를 받겠다는 동의 절차를 수행하게 됩니다. 하지만 푸시 알림 서비스를 원하지 않는 유저를 위해서 게임 설정 창에서 푸시 알림을 켜고 끌 수 있는 기능을 제공해야 합니다.
푸시 알림 종류
푸시 알림에 대한 수신여부를 모든 알림, 게임 알림, 공지 알림, (공지)야간 알림 등으로 구분하여 설정할 수 있어야 합니다.
모든 알림 |
|
---|---|
게임 알림 |
|
공지 알림 |
|
(야간)공지 알림 |
|
푸시 설정 정책
1. 여러분의 게임 내에 유저가 푸시 알림을 활성화하거나 비활성화할 수 있는 메뉴를 제공하세요.
- 푸시 설정 메뉴 구성
- 게임 언어가 한국어일 경우 푸시 알림 설정 메뉴의 예시
(Android와 iOS를 포함하는 모든 단말에서 반드시 야간 알림 설정을 노출해야 합니다.) - 게임 언어가 한국어가 아닐 경우 푸시 알림 설정 메뉴의 예시
(Android와 iOS를 포함하는 모든 단말에서 반드시 야간 알림 설정을 노출하지 않습니다.)푸시 알림 설정 변경 시에는 토스트 팝업을 2초 동안 표시해야 합니다.
- 푸시 알림 팝업을 노출하는 경우
- 유저가 접속한 지역이 한국일 경우
- 모든 알림, 공지 알림, 야간 알림 변경 발생 시 (게임 알림의 경우 토스트 팝업을 띄우지 않습니다.)
- 푸시 알림 팝업 문구
- 모든 알림 동의 활성화: [회사명] 2016.05.01 알림 수신에 동의하셨습니다.
- 공지 알림 동의 비활성화: [회사명] 2016.05.01 알림 수신에 거부하셨습니다.
- 야간 알림 동의 활성화: [회사명] 2016.05.01 야간 알림 수신에 동의하셨습니다.
- 토스트 팝업 예시
- 푸시 설정 안내 문구를 제공하세요.
푸시 설정 메뉴에서 수신을 활성화 했음에도 푸시가 수신되지 않으면 단말기 설정 메뉴에서 알림 설정을 확인하려는 안내를 제공해 주세요. 단말기에서 여러분 게임 앱이 발생하는 알림을 차단하면 푸시 알림을 제대로 받을 수 없습니다. - 푸시 안내 문구를 적용한 예시
2. Hive 콘솔을 통해 발송하는 공지의 설정은 Hive API를 적용하세요.
- Hive 콘솔을 통해 발송하는 공지 설정의 종류는 공지 알림과 (공지)야간 알림 2가지가 있습니다.
- 두 알림 옵션은 Hive 서버에 설정된 값을 조회해서 반영해야 합니다.
- 두 알림 옵션에 변경이 발생 시 Hive 서버에 변경 내용을 전달해야 합니다.
- 자세한 내용은 리모트 푸시 전송하기를 참고하세요.
3. 야간 알림 정책을 적용하세요.
야간 알림은 공지 알림에 속한 알림입니다. 야간 알림 설정 메뉴을 구현할 때 다음 정책을 적용하세요.
- 공지 알림을 비활성화하면 야간 알림도 자동으로 비활성화해야 합니다.
- 공지 알림이 비활성화일 때 야간 알림을 활성화할 수 없어야 합니다.
- 공지 알림을 활성화해도 야간 알림을 자동으로 활성화하지 않아야 합니다.
푸시 노출 설정
푸시 알림은 기본적으로 앱을 사용하지 않을 때 나타납니다. 그렇지만 Hive SDK v4.9.0을 활용하면 앱이 사용 중일 때도 알림을 노출하도록 설정할 수 있습니다. 단, iOS는 iOS 10 이상 버전에서 지원됩니다.
알림 설정 클래스
앱이 활성화 상태일 때 알림 수신 여부를 표시하는 클래스입니다.
알림 설정 콜백
알림 설정 API를 호출할 때 아래 콜백을 구현하면 요청 결과를 확인할 수 있습니다.
앱 활성화 시 알림 수신 여부 설정
아래 API를 사용하면 앱이 활성화 상태일 때 알림 수신 여부를 설정할 수 있습니다.
API Reference: Push.setForegroundPush
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using hive; // 리모트 푸시 설정 Boolean useForegroundRemotePush = true; // 로컬 푸시 설정 Boolean useForegroundLocalPush = false; PushSetting pushSetting = new PushSetting(useForegroundRemotePush, useForegroundLocalPush); Push.setForegroundPush (pushSetting, (ResultAPI result, PushSetting setting) => { if (result.isSuccess()) { // 호출 성공 // setting: API를 통해 설정된 알림 표시 여부 결과 } }); |
API Reference: Push::setForegroundPush
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; // 리모트 푸시 설정 bool useForegroundRemotePush = true; // 로컬 푸시 설정 bool useForegroundLocalPush = false; PushSetting pushSetting(useRemote, useLocal); Push::setForegroundPush(pushSetting, [=](ResultAPI const & result, PushSetting setting) { if (result.isSuccess()) { // 호출 성공 // setting: API를 통해 설정된 알림 표시 여부 결과 } }); |
API Reference: Push.setForegroundPush
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import com.hive.Push import com.hive.ResultAPI // 리모트 푸시 설정 val useForegroundRemotePush = true // 로컬 푸시 설정 val useForegroundLocalPush = false val pushSetting = Push.PushSetting(useForegroundRemotePush, useForegroundLocalPush) Push.setForegroundPush(pushSetting, object: Push.PushSettingListener{ override fun onPushSetting(result: ResultAPI, pushSetting: Push.PushSetting?) { if (result.isSuccess) { // 호출 성공 // pushSetting: API를 통해 설정된 알림 표시 여부 결과 } } }) |
API Reference: Push.INSTANCE.setForegroundPush
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import com.hive.Push; import com.hive.ResultAPI; // 리모트 푸시 설정 boolean useForegroundRemotePush = true; // 로컬 푸시 설정 boolean useForegroundLocalPush = false; Push.PushSetting setting = new Push.PushSetting(useForegroundRemotePush, useForegroundLocalPush); Push.INSTANCE.setForegroundPush(setting, (result, pushSetting) -> { if (result.isSuccess()) { // 호출 성공 // pushSetting: API를 통해 설정된 알림 표시 여부 결과 } }); |
API Reference: Swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import HIVEService let pushSetting = PushSetting() // 리모트 푸시 설정 pushSetting.useForegroundRemotePush = true // 로컬 푸시 설정 pushSetting.useForegroundLocalPush = false PushInterface.setForegroundPush(pushSetting) { result, setting in if result.isSuccess() { // 호출 성공 // setting: API를 통해 설정된 알림 표시 여부 결과 } } |
API Reference: Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#import <HIVEService/HIVEService-Swift.h> HIVEPushSetting *pushSetting = [[HIVEPushSetting alloc] init]; // 리모트 푸시 설정 pushSetting.useForegroundRemotePush = YES; // 로컬 푸시 설정 pushSetting.useForegroundLocalPush = NO; [HIVEPush setForegroundPush: pushSetting handler: ^(HIVEResultAPI *result, HIVEPushSetting *setting) { if ([result isSuccess]) { // 호출 성공 // setting: API를 통해 설정된 알림 표시 여부 결과 } }]; |
앱 활성화 시 알림 수신 여부 조회
아래 API를 사용하면 앱이 활성화 상태일 때 알림 수신 여부를 조회할 수 있습니다.
API Reference: Push.getForegroundPush
1 2 3 4 5 6 7 |
using hive; Push.getForegroundPush ((ResultAPI result, PushSetting pushSetting) => { if (result.isSuccess()) { // TODO: pushSetting으로 알림 수신 여부 조회 } }); |
API Reference: Push::getForegroundPush
1 2 3 4 5 6 7 8 9 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; Push::getForegroundPush([=](ResultAPI const & result, PushSetting pushSetting) { if (result.isSuccess()) { // TODO: pushSetting으로 알림 수신 여부 조회 } }); |
API Reference: Kotlin
1 2 3 4 5 6 7 8 9 10 |
import com.hive.Push import com.hive.ResultAPI Push.getForegroundPush(object : Push.PushSettingListener { override fun onPushSetting(result: ResultAPI, pushSetting: Push.PushSetting?) { if (result.isSuccess) { // TODO: pushSetting 으로 알림 수신 여부 조회 } } }) |
API Reference: Push.INSTANCE.getForegroundPush
1 2 3 4 5 6 7 8 |
import com.hive.Push; import com.hive.ResultAPI; Push.INSTANCE.getForegroundPush((result, pushSetting) -> { if (result.isSuccess()) { //TODO: pushSetting 으로 알림 수신 여부 조회 } }); |
API Reference: PushInterface.getForegroundPush
1 2 3 4 5 6 7 |
import HIVEService PushInterface.getForegroundPush() { result, pushSetting in if result.isSuccess() { // TODO: pushSetting으로 알림 수신 여부 조회 } } |
API Reference: HIVEPush getForegroundPush
1 2 3 4 5 6 7 |
#import <HIVEService/HIVEService-Swift.h> [HIVEPush getForegroundPush: ^(HIVEResultAPI *result, HIVEPushSetting *pushSetting) { if ([result isSuccess]) { // TODO: pushSetting으로 알림 수신 여부 조회 } }]; |
Provisional Authorization
Hive SDK v4.11.4부터 iOS 12에 추가된 Provisional Authorization 기능을 지원합니다.
Hive SDK 약관 동의 이후 노출되던 기존의 푸시 전송 동의 팝업이 더 이상 노출되지 않기 때문에 앱을 실행한 유저들은 모든 푸시 메시지를 기본으로 수신합니다. 이때 푸시 수신 여부는 유저가 받은 푸시 메시지나 앱 설정에서 선택할 수 있습니다. 유저가 수동으로 푸시 전송에 동의하기 전까지는 푸시를 수신해도 알림음이 울리지 않으며, 팝업 또한 노출되지 않습니다.
iOS 12 미만 버전을 사용하는 기기에서는 기존과 동일하게 초기화 이후 푸시 전송 동의 팝업이 노출됩니다.
명시적 푸시 권한 요청
v4.16.2 (Android) 부터 게임에서 필요한 경우 유저에게 명시적으로 푸시 전송 동의 팝업을 노출할 수 있는 API가 적용됩니다. 유저가 푸시 전송 동의 여부를 설정하지 않은 상태라면 Push 클래스의 requestPushPermission()
메서드를 호출하여 유저에게 푸시 전송 동의 팝업을 노출할 수 있습니다.
iOS의 경우 Provisional Authorization을 활용하여 Hive SDK 약관 동의에 대한 묵시적 권한 동의를 받은 경우라도 푸시 전송 동의 팝업이 노출되며, 푸시 전송에 동의한 유저에게는 명시적으로 푸시 메시지가 노출됩니다.
Android의 경우 Android 13 이상 기기에서 target SDK 33 이상일 때 팝업이 노출되며, target SDK 33 미만일 경우에는 AuthV4.setup() 시 노출됩니다.
다음은 iOS 푸시 전송 동의 팝업을 노출하는 예제 코드입니다.
API Reference: hive.Push.requestPushPermission
1 2 3 |
using hive; Push.requestPushPermission(); |
API Reference: Push::requestPushPermission
1 2 3 4 5 |
#include <HIVE_SDK_Plugin/HIVE_CPP.h> using namespace std; using namespace hive; Push::requestPushPermission(); |
API Reference: Push.requestPushPermission
1 2 3 |
import com.hive.Push Push.requestPushPermission() |
API Reference: Push.INSTANCE.requestPushPermission
1 2 3 |
import com.hive.Push; Push.INSTANCE.requestPushPermission(); |
API Reference: PushInterface.requestPushPermission
1 2 3 |
import HIVEService PushInterface.requestPushPermission() |
API Reference: HIVEPush::requestPushPermission
1 2 3 |
#import <HIVEService/HIVEService-Swift.h> [HIVEPush requestPushPermission]; |
푸시 설정 다국어 표기법
언어 | 모든 알림 | 게임 알림 | 공지 알림 |
---|---|---|---|
영어 | All notifications | Game notification | Announcement notification |
일본어 | 全ての通知 | ゲーム通知 | お知らせ通知 |
중국어 간체 | 所有通知 | 游戏通知 | 公告通知 |
중국어 번체 | 所有通知 | 遊戲通知 | 公告通知 |
독일어 | Alle Benachrichtigungen | Spiel-Benachrichtigung | Ankündigungen |
러시아어 | Все уведомления | Уведомления игры | Объявления |
말레이시아어 | Semua notifikasi | Notifikasi permainan | Notifikasi pengumuman |
베트남어 | Tất cả thông báo | Thông báo game | Thông báo tin tức |
스페인어 | Todas las notificaciones | Notificación del Juego | Notificación de Anuncio |
이탈리아어 | Tutte le notifiche | Notifiche di gioco | Notifiche degli avvisi |
인도네시아어 | Semua Notifikasi | Notifikasi Game | Notifikasi Pengumuman |
태국어 | การแจ้งเตือนทั้งหมด | การแจ้งเตือนเกม | การแจ้งเตือนประกาศ |
터키어 | Tüm Bildirimler | Oyun Bildirimi | Duyuru Bildirimi |
포르투갈어 | Todas as notificações | Notificação de Jogo | Notificação de Anúncios |
프랑스어 | Toutes les notifications | Notification de jeu | Notification d’annonce |
아랍어 | كل الإشعارات | إشعارات اللعبة | إشعارات الإخطار |
푸시 알림과 앱 아이콘 뱃지
기기에서 알림을 수신하면 앱 아이콘 뱃지가 자동으로 표시됩니다. 뱃지란 앱 아이콘 오른쪽 상단 모서리에 표시되는 숫자로, 이 앱으로 온 알림 개수입니다. 뱃지 기능은 앱 설정 또는 기기 설정에서 끄거나 켤 수 있습니다. 기본적으로 뱃지 표시는 OS별로 아래 정책을 따릅니다.
- iOS
- 새로 수신한 알림 개수와 상관 없이 앱 아이콘 뱃지는 1로 표시합니다.
- 앱 아이콘 뱃지가 0이 되는 순간, 알림 센터에 쌓인 모든 알림이 제거됩니다.
- Hive SDK에서 앱 아이콘 뱃지가 0이 되는 시점은 다음과 같습니다.
- 앱을 최초로 실행할 때
- 알림을 클릭하여 앱을 다시 포그라운드 상태로 불러왔을 때
- Android
- 알림을 수신하면 뱃지가 1개씩 증가합니다.
- 알림을 클릭하여 앱을 실행하는 등, 앱이 포그라운드 상태가 되면 뱃지가 0으로 초기화됩니다.
- 알림 센터의 목록은 클릭한 알림만 삭제됩니다.