콘텐츠로 이동

로컬 푸시 전송하기

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

using hive;    
    int noticeId = 1; // local push unique ID    
Push.unregisterLocalPush(noticeId);
#include "HivePush.h"

int32 NoticeID = 1; // 로컬 푸시 고유 ID

FHivePush::UnregisterLocalPush(NoticeID);

API Reference: Push ::unregisterLocalPush

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    int noticeId = 1; // local push unique ID    
Push::unregisterLocalPush(noticeId);

API Reference: Push.unregisterLocalPush

import com.hive.Push    
    val noticeId = 1 // local push unique ID    
Push.unregisterLocalPush(noticeId)

API Reference: com .hive.Push.unregisterLocalPush

import com.hive.Push;    
    int noticeId = 1; // local push unique ID    
Push.INSTANCE.unregisterLocalPush(noticeId);

API Reference: PushInterface .unregisterLocalPush

import HIVEService    
    let noticeId = 1 // local push unique ID    
PushInterface.unregisterLocalPush(noticeId)

API Reference: HIVEPush ::unregisterLocalPush

#import <HIVEService/HIVEService-Swift.h>    
    NSInteger noticeId = 0; // local push unique ID    
[HIVEPush unregisterLocalPush: noticeId];

목록상 로컬 푸시 일괄 등록 해제

아래의 API를 사용하면 등록된 로컬 푸시 식별자 목록을 작성하여 일괄 등록 취소할 수 있습니다.

API Reference: hive.Push .unregisterLocalPushes

using hive;    
    List noticeIds = new List { 1, 2, 3 }();    
Push.unregisterLocalPushes(noticeIds);
#include "HivePush.h"

TArray<int32> NoticeIds = { 1, 2, 3 };

FHivePush::UnregisterLocalPushes(NoticeIds);

API Reference: Push:: unregisterLocalPushes

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    vector noticeIds = { 1, 2, 3 };    
Push::unregisterLocalPushes(noticeIds);

API Reference: Push.unregisterLocalPushes

import com.hive.Push    
    val noticeIds = arrayListOf(1, 2, 3)    
Push.unregisterLocalPushes(noticeIds)

API Reference: com.hive .Push.unregisterLocalPushes

import com.hive.Push;    
    ArrayList<Integer> noticeIds = new ArrayList<>();    
    noticeIds.add(1);    
    noticeIds.add(2);    
    noticeIds.add(3);    
Push.INSTANCE.unregisterLocalPushes(noticeIds);

API Reference: PushInterface .unregisterLocalPushes

import HIVEService    
    let noticeIds = [1, 2, 3]    
PushInterface.unregisterLocalPushes(noticeids)

API Reference: HIVEPush:: unregisterLocalPushes

#import <HIVEService/HIVEService-Swift.h>    
    NSArray* noticeIds = @[ @(1), @(2), @(3) ];    
[HIVEPush unregisterLocalPushes: noticeIds];

모든 로컬 푸시 등록 해제

아래의 API를 사용하면 Hive 로컬 푸시 뿐만 아니라 수신 대기 중인 모든 로컬 푸시의 등록을 해제할 수 있습니다.

API Reference: hive.Push .unregisterAllLocalPushes

using hive;    
Push.unregisterAllLocalPushes();
#include "HivePush.h"

FHivePush::UnregisterAllLocalPushes();

API Reference: Push:: unregisterAllLocalPushes

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
Push::unregisterAllLocalPushes();

API Reference: Push.unregisterAllLocalPushes

import com.hive.Push    
Push.unregisterAllLocalPushes()

API Reference: com.hive .Push.unregisterAllLocalPushes

import com.hive.Push;    
Push.INSTANCE.unregisterAllLocalPushes();

API Reference: PushInterface.unregisterAllLocalPushes

import HIVEService    
PushInterface.unregisterAllLocalPushes()

API Reference: HIVEPush:: unregisterAllLocalPushes

#import <HIVEService/HIVEService-Swift.h>    
[HIVEPush unregisterAllLocalPushes];

UI 커스터마이징(Android용)

Android에서는 로컬 푸시를 커스터마이징할 수 있습니다. 커스터마이징 하는 UI 요소에 대한 정보는 로컬 푸시를 등록하는 registerLocalPush() 메서드의 LocalPush 파라미터에 푸시 설정 정보와 함께 설정합니다.

로컬 푸시 UI 정보

로컬 푸시 UI 커스터마이즈 정보는 로컬 푸시 설정 정보를 정의하는 LocalPush 클래스에 함께 정의됩니다. 다음의 표는 LocalPush 클래스의 필드 중 변경할 수 있는 UI 요소들에 대한 필드를 정의합니다. 상세 정보가 제공되는 필드명은 링크가 제공됩니다. 필드명을 클릭해 상세 정보나 스크린샷을 확인해 보세요.

Name Type Description Required
type String 푸시 메시지의 다이얼로그 형태:
  • `"bar"`: 노티 바에만 알림 띄우기(기본값)
  • `"toast"`: 토스트 팝업으로만 알림 띄우기
  • `"bar,toast"`: 노티 바와 토스트 팝업 두 형태 모두로 알림 띄우기
선택
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 유저가 푸시를 눌렀을 때의 동작 설정:
  • `"app"`: 게임 앱을 실행 (디폴트)
  • `"web:<이동할 URL>"`: 명시한 URL로 이동
선택
broadcastAction String 푸시 알림이 발생했을 때 broadcasting할 액션 값 선택
buckettype Integer 푸시 알림 디스플레이 타입:
  • 0: Overwrite (디폴트)
  • 1: Inboxing
  • 2: 이어쓰기
선택
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 웹 페이지 및 앱에서 아래와 같이 알림 내용이 노출됩니다.

  • 게이밍 페이지 중앙에 노출된 형태

  • 게이밍 페이지 좌측 목록의 알림 메뉴에서 확인되는 형태

  • 페이스북 앱에서 알림이 노출된 형태