로컬 푸시 전송하기
Hive 플랫폼은 Hive 푸시 서버에 관계 없이 게임 클라이언트에서 단말에 푸시를 등록하여 게임 알람으로 사용할 수 있는 기능을 제공하며 이를 로컬 푸시라고 합니다. 로컬 푸시 기능에 대해 Hive는 로컬 푸시 등록과 로컬 푸시 해제 기능을 제공합니다. 로컬 푸시는 앱을 종료해도 정해진 시간에 통지가 발생하게 되고 등록된 로컬 푸시는 필요에 따라 해지할 수 있습니다.
Note
- Android 4.4 (KitKat) API Level 19 이상 환경에서 알람을 사용하는 로컬 푸시는 정확한 수신여부를 보장하지 않습니다.
- Android OS에서 배터리 사용을 최소화 하기 위해 알람을 제한하고 있습니다.
로컬 푸시 정보¶
Hive는 로컬 푸시 정보에 대해 다음의 정보를 담아 LocalPush 클래스에 정의합니다.
Name | Type | Description |
---|---|---|
noticeId | Integer | 로컬 푸시 메시지 식별자 |
title | String | 로컬 푸시 메시지 제목 |
msg | String | 로컬 푸시 메시지 내용 |
after | Integer | 푸시 등록 후 몇 초 후에 푸시 메시지를 띄울 것인지를 의미(초 단위, 기본값=0) |
groupId | String | 알림 그룹을 위한 그룹 ID값입니다. 알림 그룹이란 같은 앱에서 보낸 알림들은 같은 그룹으로 묶어서 기기 화면에 표시하는 기능입니다. 이 값을 설정하지 않으면 로컬 푸시 메세지 그룹은 기본 앱 그룹으로 설정됩니다. |
로컬 푸시 등록하기¶
유저의 단말기에 로컬 푸시를 등록하려면 Push 클래스의 registerLocalPush()
메서드를 호출하세요.
iOS에서는 최대 64개의 로컬 푸시를 등록할 수 있으며, 기기 및 OS 버전에 따라 64개 미만으로 등록 수량이 제한되기도 합니다. 사용 환경별 최대 등록 가능 수량을 초과하는 경우에는 이전에 등록된 푸시들이 자동으로 등록 취소됩니다. (참조)
다음은 로컬 푸시를 등록하는 예제입니다.
API Reference: hive.Push.registerLocalPush
using hive;
LocalPush localPush = new LocalPush ();
localPush.noticeId = 1;
localPush.title = "Local Push Title";
localPush.msg = "Local Push Message";
localPush.after = 5;
localPush.groupId = "a";
Push.registerLocalPush(localPush, (ResultAPI result, LocalPush localPush) => {
if (result.isSuccess()) {
// call successful
}
});
#include "HivePush.h"
FHiveLocalPush LocalPush;
LocalPush.NoticeId = 1;
LocalPush.Title = TEXT("Local Push Title");
LocalPush.Msg = TEXT("Local Push Message");
LocalPush.After = 5;
LocalPush.GroupId = TEXT("a");
FHivePush::RegisterLocalPush(LocalPush, FHivePushOnLocalPushDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveLocalPush& LocalPush) {
if (Result.IsSuccess()) {
// API 호출 성공
}
}));
API Reference: Push::registerLocalPush
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
LocalPush localPush;
localPush.noticeId = 1;
localPush.title = "Local Push Title";
localPush.msg = "Local Push Message";
localPush.after = 5;
localPush.groupId = "a";
Push::registerLocalPush(localPush, [=](ResultAPI result, LocalPush localPush){
if (result.isSuccess()) {
// call successful
}
});
API Reference: registerLocalPush
import com.hive.Push
import com.hive.ResultAPI
val localPush = Push.LocalPush().apply {
noticeID = 1
title = "Local Push Title"
msg = "Local Push Message"
after = 5
groupId = "a"
}
Push.registerLocalPush(localPush, object : Push.LocalPushListener {
override fun onRegisterLocalPush(result: ResultAPI, localPush: Push.LocalPush?) {
if (result.isSuccess) {
// call successful
}
}
})
API Reference: com.hive.Push.registerLocalPush
import com.hive.Push;
import com.hive.ResultAPI;
Push.LocalPush localPush = new Push.LocalPush();
localPush.setNoticeID(1);
localPush.setTitle("Local Push Title");
localPush.setMsg("Local Push Message");
localPush.setAfter(5);
localPush.setGroupId("a");
Push.INSTANCE.registerLocalPush(localPush, (result, localPushData) -> {
if (result.isSuccess()) {
// call successful
}
});
API Reference: registerLocalPush(_:handler:)
import HIVEService
let localPush = LocalPush()
localPush.noticeId = 1;
localPush.title = "Local Push Title";
localPush.msg = "Local Push Message";
localPush.after = 5;
localPush.groupId = "a";
PushInterface.registerLocalPush(localPush) { result, localPush in
if result.isSuccess() {
// call successful
}
}
API Reference: Objective-C
#import <HIVEService/HIVEService-Swift.h>
HIVELocalPush *localPush = [[HIVELocalPush alloc] init];
localPush.noticeId = 1;
localPush.title = @"Local Push Title";
localPush.msg = @"Local Push Message";
localPush.after = 5;
localPush.groupId = @"a";
[HIVEPush registerLocalPush: localPush handler: ^(HIVEResultAPI *result, HIVELocalPush *localPush) {
if ([result isSuccess]) {
// call successful
}
}];
로컬 푸시 해제하기¶
등록해 놓은 푸시를 설정해 놓은 알림 시간 전에 해제할 수 있습니다.
단일 로컬 푸시 등록 해제 아래의 API를 사용하여 등록했던 푸시 식별자를 파라미터로 설정하고 로컬 푸시를 해제하세요.
API Reference: hive .Push.unregisterLocalPush
API Reference: Push ::unregisterLocalPush
API Reference: Push.unregisterLocalPush
API Reference: com .hive.Push.unregisterLocalPush
API Reference: PushInterface .unregisterLocalPush
API Reference: HIVEPush ::unregisterLocalPush
목록상 로컬 푸시 일괄 등록 해제
아래의 API를 사용하면 등록된 로컬 푸시 식별자 목록을 작성하여 일괄 등록 취소할 수 있습니다.
API Reference: hive.Push .unregisterLocalPushes
API Reference: Push:: unregisterLocalPushes
API Reference: Push.unregisterLocalPushes
API Reference: com.hive .Push.unregisterLocalPushes
API Reference: PushInterface .unregisterLocalPushes
API Reference: HIVEPush:: unregisterLocalPushes
모든 로컬 푸시 등록 해제
아래의 API를 사용하면 Hive 로컬 푸시 뿐만 아니라 수신 대기 중인 모든 로컬 푸시의 등록을 해제할 수 있습니다.
API Reference: hive.Push .unregisterAllLocalPushes
API Reference: Push:: unregisterAllLocalPushes
API Reference: Push.unregisterAllLocalPushes
API Reference: com.hive .Push.unregisterAllLocalPushes
API Reference: PushInterface.unregisterAllLocalPushes
API Reference: HIVEPush:: unregisterAllLocalPushes
UI 커스터마이징(Android용)¶
Android에서는 로컬 푸시를 커스터마이징할 수 있습니다. 커스터마이징 하는 UI 요소에 대한 정보는 로컬 푸시를 등록하는 registerLocalPush()
메서드의 LocalPush
파라미터에 푸시 설정 정보와 함께 설정합니다.
로컬 푸시 UI 정보¶
로컬 푸시 UI 커스터마이즈 정보는 로컬 푸시 설정 정보를 정의하는 LocalPush 클래스에 함께 정의됩니다. 다음의 표는 LocalPush 클래스의 필드 중 변경할 수 있는 UI 요소들에 대한 필드를 정의합니다. 상세 정보가 제공되는 필드명은 링크가 제공됩니다. 필드명을 클릭해 상세 정보나 스크린샷을 확인해 보세요.
Name | Type | Description | Required |
---|---|---|---|
type | String | 푸시 메시지의 다이얼로그 형태:
| 선택 |
bigmsg | String | Android 알림 창에 보여주는 알림 내용. 길이 제한 없음. 주의: Android Jelly Bean 이상에서 사용 가능 | 선택 |
ticker | String | 푸시 알림 메시지 티커 | 선택 |
icon | String | 푸시 알림에 띄우는 아이콘의 파일 경로. /res/drawable 디렉토리 내에 있는 파일의 확장자를 제외한 파일 이름. 예. 파일의 경로가 res/drawable-xhdpi/hive_icon.png 일 때 `icon` 필드 값은 `"hive_icon"` 입니다. icon을 별도로 제공하지 않으면 디폴트 아이콘인 게임 아이콘이 나타납니다. | 선택 |
sound | String | 푸시 알림 발생 시 울릴 사운드 파일 경로. 사운드를 별도로 제공하지 않으면 디폴트 알림 사운드가 울립니다. | 선택 |
active | String | 유저가 푸시를 눌렀을 때의 동작 설정:
| 선택 |
broadcastAction | String | 푸시 알림이 발생했을 때 broadcasting할 액션 값 | 선택 |
buckettype | Integer | 푸시 알림 디스플레이 타입:
| 선택 |
bucketsize | Integer | 알림 창에 묶어서 보여줄 동일 푸시 ID에 대한 메시지 개수 | 선택 |
bigpicture | String | Android 알림 창에 보여주는 이미지 파일 경로 ???+ note `bigpicture`는 `msg` 필드와 사용 가능합니다. `bigpicture`와 `bigmsg`를 함께 사용할 수 없습니다. `bigpicture`와 `ticker`도 함께 사용할 수 없습니다. | 선택 |
icon_color | String | 아이콘의 배경색 형식: `{"r":[0–255],"g":[0–255],"b":[0–255]}` 예: `{"r":0,"g":128,"b":255}` 주의: Android Lollipop (5.0) 이상에서 사용 가능 | 선택 |
type 필드¶
type
필드는 푸시 메시지의 다이얼로그 형태를 의미합니다. 다이얼로그 형태는 푸시 메시지를 화면에 어떻게 나타낼 지를 정의합니다.
푸시 메시지 다이얼로그 형태로는 다음의 세 가지 선택이 가능합니다:
- 바 타입: 화면 상단에 나타나며
icon
,title
,message
로 구성됨. 단말기 화면이 꺼져 있으면 나타나지 않음 - 팝업 타입: 토스트 형식으로 화면에 나타남
- 모두: 바 타입과 팝업 타입 동시에 화면에 나타남
팝업 타입이나 바 타입과 팝업 타입 모두 제공할 때, 만약 단말기 화면이 꺼져 있는 상태라면, 위의 스크린샷에서와 같이 팝업만 제공됩니다.
bigmsg 필드와 bigpicture 필드¶
다음 그림은 빅 메시지와 빅 픽쳐가 알림창에 나타나는 모습을 보여주고 있습니다.
bigmsg
필드를 이용하면 알림 창에 많은 양의 텍스트를 노출할 수 있습니다.bigmsg
필드를 이용할 때ticker
를 함께 이용할 수 있습니다.bigpicture
필드를 이용하면, 알림 창에 큰 그림을 노출할 수 있습니다.bigpicture
를 이용할 때bigmsg
를 함께 이용할 수 없습니다.bigpicture
를 이용할 때ticker
를 함께 이용할 수 없습니다.
buckettype 필드¶
buckettype
필드 값이 1이거나 2이면 동일 푸시 ID에 여러 건의 푸시 알림이 발생했을 때, 알림 창에 알림들을 한 섹션에 누적하여 출력하게 합니다.
bucketsize
는 알림 창에 몇 개의 메시지가 보이게 노출하는 지를 의미합니다.buckettype
값이 1이면, 즉 Inboxing 타입일 때 메시지가 한 줄을 넘으면 생략 부호(...)를 넣어 화면을 넘어가는 내용은 출력하지 않습니다.buckettype
값이 2이면, 많은 양의 텍스트를 그대로 출력합니다.buckettype
이용 시ticker
를 함께 이용할 수 있습니다.
Note
Google 피처드를 위해 target=21로 설정했을 경우, Android 5.0 이상 단말기에서 푸시 아이콘이 하얗게 보이는 백화 현상이 나타납니다. 이를 방지하기 위해서는 노티피케이션 아이콘을 추가해야 합니다. /res/drawable/ 폴더에 ic_c2s_notification_small_icon.png 이름으로 파일을 추가하세요. 아이콘 dpi 사이즈는 다음과 같습니다.
- mdpi: 24x24
- hdpi: 36x36
- xhdpi: 48x48
- xxhdpi: 72x72
- xxxhdpi: 96x96
자세한 내용은 Google 디자인 가이드를 참고하세요.
Facebook Cloud Game 알림 전송하기 (Android용)¶
Facebook Cloud Game 빌드에서 Hive SDK의 로컬 푸시 기능을 통해 페이스북에서 제공하는 알림(Facebook App To User Notifications) 기능을 사용할 수 있습니다.
Note
Hive SDK v4 24.2.0 부터 더이상 Facebook Cloud Game 기능을 지원하지 않습니다. 기존에 Facebook Cloud Game을 사용하고 있던 프로젝트에선 관련 설정과 기능 호출 내용을 모두 제거 바랍니다.
페이스북 알림 기능의 경우 Android의 일반적인 Push와 다르게 전달되는 형태와 제약사항이 존재합니다. Facebook App To User Notifications 페이지에서 자세한 내용을 확인 바랍니다.
그리고 페이스북 알림 기능은 페이스북에서 지속 업데이트되고 있고 동작의 변경사항이 발생하고 있습니다. 페이스북 알림 기능이 온전히 정착하기까지 Hive SDK에서 지속 업데이트 예정입니다. (Hive v4.16.1은 Facebook App To User Notifications 의 22년 10월 반영 사항을 적용 및 검증하였습니다.)
페이스북 알림 기능에 필요한 데이터는 LocalPush 클래스에 정의해야 합니다. 다음 표는 LocalPush 클래스의 필드 중 페이스북 알림 기능에 필요한 요소를 정의합니다.
NAME | TYPE | DESCRIPTION | REQUIRED |
---|---|---|---|
title | String | - 로컬 푸시 메시지 제목 - 1~30 사이의 글자 수 필수 설정 - Hive 4.16.1 기준 title 값을 필수이나 페이스북 UI에서 사용되는 곳이 확인되지 않음 | 필수 |
msg | String | - 로컬 푸시 메시지 내용 - 10~180 사이의 글자 수 필수 설정 - 알림에서 메시지로 노출됨 | 필수 |
after | Integer | - 푸시 등록 후 몇 초 후에 푸시 이미지를 띄울 것인지를 의미(초 단위, 기본 값=0) - 최대 10일 이하의 시간 값(초) 설정 | 필수 |
bigpicture | String | - 이미지 설정 필수 - 크기 300x200 px - 용량 10MB 이하 - 웹 링크로 게시된 이미지인 경우 http 혹은 https로 시작되는 url (ex: https://hive-fn.qpyou.cn/hubweb/hive_img/U/P/122349090/20151028/82f610b6f4590863934cefb2b875c87a.jpg) - 프로젝트 리소스에 포함된 이미지 파일인 경우 /res/drawble 이하에 파일 포함 필요하며 파일 이름이 fbcloudtest.png라면 fbcloudtest만 값으로 입력(파일 이름만) | 필수 |
알림이 도착하면 Facebook 웹 페이지 및 앱에서 아래와 같이 알림 내용이 노출됩니다.
- 게이밍 페이지 중앙에 노출된 형태
- 게이밍 페이지 좌측 목록의 알림 메뉴에서 확인되는 형태
- 페이스북 앱에서 알림이 노출된 형태