푸시 알림 (push)
개요
push 네임스페이스는 푸시 알림 관련 기능을 제공합니다.
- 푸시 토큰을 nachocode 서버에 등록 및 삭제
- 로컬 푸시 알림을 예약 및 취소
- 푸시 토픽 구독 및 취소
- 디바이스의 구독된 토픽 조회
- 마케팅/야간 푸시 동의 관리
푸시 알림 사용법을 더 자세히 알아보려면 아래 가이드를 참고해보세요.
필수 선행 작업
nachocode SDK로 푸시 알림 기능을 사용하기 위해서는 nachocode 대시보드의
[ 앱 기능 > 푸시 알림 > 설정 ] 탭에서
푸시 알림 설정이 모두 완료된 후 빌드된 경우에만 작동합니다.
푸시 알림 설정하기
➡️ 유저 가이드를 따라 nachocode 푸시 알림 설정을 완료하세요.
타입 정의
PushTokenResult
- since : v1.6.3
export declare type PushTokenResult =
| {
status: 'success';
statusCode: 201;
message: string;
}
| {
status: 'error';
statusCode: number;
message: string;
desc: string;
code: string;
};
| 속성명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
status | 'success' | 'error' | ✅ | 푸시 토큰 요청 성공 여부 |
statusCode | number | ✅ | 푸시 토큰 결과 상태 코드 |
message | string | ✅ | 결과 상세 메시지. (에러 발생 시 사유 반환) |
desc | string | ❌ | (optional) 오류 상세 내용 (에러 발생 시) |
code | string | ❌ | (optional) 오류 코드 (에러 발생 시) |
PushTopicResult
export declare type PushTopicResult =
| {
status: 'success';
/**
* 푸시 토픽 구독 결과 상태 코드
* - `200` : 성공
* - `201` : 이미 토픽 구독 중
* - `202` : 이미 구독 취소된 토픽
* - `203` : FCM 구독 성공, nachocode 서버 저장 실패
*/
statusCode: 200 | 201 | 202 | 203;
message: string;
}
| {
status: 'error';
/**
* 푸시 토픽 구독 결과 상태 코드
* - `400` : 잘못 된 요청
* - `401` : 구독 실패
* - `402` : 구독 취소 실패
* - `500` : 내부 오류
*/
statusCode: 400 | 401 | 402 | 500;
errorCode: string; // 실패 시 에러 반환
message: string; // 실패 시 에러 상세 사유 반환
};
| 속성명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
status | 'success' | 'error' | ✅ | 푸시 토픽 구독 요청 성공 여부 |
statusCode | number | ✅ | 푸시 토픽 구독 결과 상태 코드 |
errorCode | string | ❌ | (optional) 오류 코드 (에러 발생 시) |
message | string | ✅ | 결과 상세 메시지. (에러 발생 시 사유 반환) |
LocalPushPayload
export declare type LocalPushPayload = {
title: string;
content?: string;
link?: string; // link willing to move when clicked
usingAppIcon?: boolean; // default : true
scheduledTime?: Date; // sends instantly if not set
id?: number; // generates if not set
/**
* @since 1.10.3
*/
groupId?: string; // default if not set
};
| 속성명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
title | string | ✅ | 푸시 알림의 제목 |
content | string | ❌ | (optional) 푸시 알림의 본문 메시지 (지정하지 않으면 제목만 노출) |
link | string | ❌ | (optional) 클릭 시 이동할 URL (지정하지 않으면 앱 열기) |
usingAppIcon | boolean | ❌ | (optional) 앱 아이콘을 푸시 아이콘으로 사용할지 여부 (기본값: true) |
scheduledTime | Date | ❌ | (optional) 예약된 발송 시각 (지정하지 않으면 즉시 발송됨) |
id | number | ❌ | (optional) 예약된 푸시를 식별할 ID (지정하지 않으면 자동 생성) |
groupId | string | ❌ | (optional) 로컬 푸시 알림을 그룹으로 묶기 위한 그룹 ID (v.1.10.3 이상) |
LocalPushResult
- since : v1.4.1
export declare type LocalPushResult = {
status: 'success' | 'error';
statusCode?: string; // error code when failed
message?: string; // error message when failed
id?: number; // push notification id
};
| 속성명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
status | 'success' | 'error' | ✅ | 푸시 알림 예약 성공 여부 |
statusCode | string | ❌ | (optional) 오류 발생 시 반환되는 코드 |
message | string | ❌ | (optional) 오류 발생 시 반환되는 메시지 |
id | number | ❌ | (optional) 예약된 푸시 알림의 ID (취소할 때 사용 가능) |
GetMarketingAllowedResult
export declare type GetMarketingAllowedResult = {
guest: boolean | null;
user: boolean | null;
};
| 속성명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
guest | boolean | null | ✅ | 게스트 사용자의 마케팅 푸시 동의 여부 (null: 미선택 상태) |
user | boolean | null | ✅ | 로그인 사용자의 마케팅 푸시 동의 여부 (null: 미선택 상태) |
타입명 변경
v1.10.1부터 MarketingAllowedResult에서 GetMarketingAllowedResult로 타입명이 변경되었습니다.
SetMarketingAllowedResult
- since : v1.10.1
export declare type SetMarketingAllowedResult = {
status: 'success' | 'error';
statusCode: number;
message?: string;
};
| 속성명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
status | 'success' | 'error' | ✅ | 마케팅 푸시 동의 설정 성공 여부 |
statusCode | number | ✅ | 결과 상태 코드 |
message | string | ❌ | (optional) 에러 발생 시 상세 메시지 |
GetMarketingPreferenceResult
- since : v1.10.2
export declare type GetMarketingPreferenceResult = {
guest: {
marketingAllowed: boolean | null;
nightAllowed: boolean | null;
};
user: {
marketingAllowed: boolean | null;
nightAllowed: boolean | null;
};
};
| 속성명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
guest.marketingAllowed | boolean | null | ✅ | 게스트 사용자의 마케팅 푸시 동의 여부 (null: 미선택 상태) |
guest.nightAllowed | boolean | null | ✅ | 게스트 사용자의 야간 푸시 동의 여부 (null: 미선택 상태) |
user.marketingAllowed | boolean | null | ✅ | 로그인 사용자의 마케팅 푸시 동의 여부 (null: 미선택 상태) |
user.nightAllowed | boolean | null | ✅ | 로그인 사용자의 야간 푸시 동의 여부 (null: 미선택 상태) |
메서드 목록
| 메서드 | 설명 | 추가된 버전 |
|---|---|---|
registerPushToken(userId) | nachocode 서버에 푸시 토큰을 등록합니다. | v1.0.0 |
deletePushToken(userId?) | nachocode 서버에서 푸시 토큰을 삭제합니다. | v1.0.0 |
sendLocalPush(payload, callback?) | 로컬 푸시 알림을 예약합니다. | v1.4.1 |
cancelLocalPush(id) | 예약된 로컬 푸시 알림을 취소합니다. | v1.4.1 |
subscribePushTopic(topic) | 푸시 토픽을 구독합니다. | v1.6.0 |
unsubscribePushTopic(topic) | 푸시 토픽 구독을 취소합니다. | v1.6.0 |
getSubscriptionList(callback) | 디바이스의 현재 구독 중인 푸시 토픽 목록을 조회합니다. | v1.6.0 |
setMarketingAllowed(allowed) | 마케팅 푸시 동의 여부를 설정합니다. | v1.10.0 |
getMarketingAllowed() | 마케팅 푸시 동의 상태를 조회합니다. | v1.10.0 |
setNightAllowed(allowed) | 야간 푸시 동의 여부를 설정합니다. | v1.10.0 |
getNightAllowed() | 야간 푸시 동의 상태를 조회합니다. | v1.10.0 |
setMarketingPreference(data) | 마케팅 수신 동의를 일괄 설정합니다. | v1.10.2 |
getMarketingPreference() | 마케팅 수신 동의를 일괄 조회합니다. | v1.10.2 |
메서드 상세
registerPushToken(userId)
주의
필수 선행 작업이 완료되어야 사용할 수 있습니다.
타입 정의
function registerPushToken(userId: string): Promise<PushTokenResult>;
설명
nachocode 서버에 현재 디바이스의 푸시 토큰을 등록합니다.
이때, 특정 사용자(userId)를 식별자로 사용하여 푸시 알림을 해당 사용자에게 전송할 수 있도록 설정합니다.
토큰 등록에 대한 상세 정보
재등록 시 덮어쓰기 동작
- 같은 디바이스에서
registerPushToken을 다시 호출하면 가장 마지막으로 전달된userId로 매핑이 덮어씌워집니다 - 로그아웃 후 다른 계정으로 재로그인 시 호출한다면, 새로운
userId로 자동 업데이트됩니다
userId 매개변수의 유연성
- 서비스 서버의 실제 사용자 ID가 아니어도 상관없습니다
- 구별 가능한 고유한 식별자라면 어떤 값이든 사용할 수 있습니다 (ex. 이메일, 닉네임, 커스텀 ID, UUID 등)
디바이스별 관리가 필요한 경우
- 한 사용자가 여러 디바이스를 사용하는 환경에서 디바이스별로 푸시를 관리하고 싶은 경우
- UUID로 유니크한 식별자를 생성 후 사용자와 매칭하여 저장 ( 1:N )
- 서비스 서버의
userId+ 고유한 디바이스 ID를 조합하여 유니크한 식별자를 생성 ( 1:N )- ex.
"user123_device_abc","user123_ios_main"등의 형태로 전달
- ex.
푸시 토큰이란?
푸시 토큰 가이드에서 상세 설명을 확인해보세요.
유저 설정 관련
Nachocode.user.setUserId를 호출하는 방식으로 로직 작성 시, registerPushToken을 중복해서 호출하지 않는 것을 권장 드립니다. setUserId 메서드는 기존 registerPushToken이 수행하는 모든 작업을 수행하며, 추가로 유저 정보 동기화도 수행합니다.
매개변수
| 이름 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
userId | string | ✅ | 푸시 토큰을 연결할 사용자 ID |
반환 값
| 타입 | 설명 |
|---|---|
Promise<PushTokenResult> | 푸시 토큰 등록 요청의 처리 결과 |
사용 예제
// ex. 유저의 로그인 성공 시 호출되는 콜백함수
function onLoginSuccess(userId) {
// ex. userId : "nacho123"
// "nacho123" 사용자 식별자로 푸시 토큰을 nachocode 서버에 등록합니다.
Nachocode.push.registerPushToken(userId).then(result => {
if (result.status === 'success') {
console.log('푸시 토큰이 성공적으로 등록되었습니다.');
} else {
console.error(`푸시 토큰 등록 실패: ${result.message}`);
}
});
}
deletePushToken(userId?)
주의
필수 선행 작업이 완료되어야 사용할 수 있습니다.
타입 정의
function deletePushToken(userId?: string): Promise<PushTokenResult>;
설명
nachocode 서버에서 해당 사용자(userId)와 연결된 푸시 토큰을 삭제합니다.