Push API 문서
Push API 문서
웹 푸시 알림 발송을 위한 REST API 문서
📖 API 개요
Push API를 사용하여 웹 브라우저로 실시간 푸시 알림을 발송할 수 있습니다. 이 API는 RESTful 방식으로 설계되었으며, JSON 형식의 데이터를 사용합니다.
기본 URL
https://api.pushmanager.kr
인증 방식
모든 API 요청에는 다음 헤더가 필요합니다:
Content-Type: application/jsonX-API-Key: {your-api-key}
POST 단일 푸시 발송
하나의 구독자에게 푸시 알림을 발송합니다.
https://api.pushmanager.kr/api/push/single
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
subscription |
object | 필수 | 푸시 구독 정보 |
├── endpoint |
string | 필수 | 푸시 서비스 엔드포인트 URL |
└── keys |
object | 필수 | 암호화 키 정보 |
├── p256dh |
string | 필수 | P256DH 공개키 |
└── auth |
string | 필수 | 인증 비밀키 |
payload |
object | 필수 | 푸시 알림 내용 |
├── title |
string | 필수 | 알림 제목 (최대 100자) |
├── body |
string | 필수 | 알림 본문 (최대 300자) |
├── icon |
string | 선택 | 알림 아이콘 URL |
└── url |
string | 선택 | 클릭 시 이동할 URL |
options |
object | 선택 | 푸시 옵션 |
└── TTL |
integer | 선택 | 생존 시간(초), 최대 2419200(4주) |
PHP cURL 사용 예제
<?php
function sendSinglePush($subscription, $payload, $options = []) {
$api_url = 'https://api.pushmanager.kr';
$api_key = 'your-api-key-here';
$data = [
'subscription' => $subscription,
'payload' => $payload,
'options' => $options
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $api_url . '/api/push/single',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $api_key
]
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
return json_decode($response, true);
} else {
throw new Exception('Push notification failed: ' . $response);
}
}
// 사용 예제
$subscription = [
'endpoint' => 'https://fcm.googleapis.com/fcm/send/abc123...',
'keys' => [
'p256dh' => 'BFYEOn4vQKKXYCGHnt9wCwPpvR7XJm8...',
'auth' => 'tBHItJh5u9CqcyWMcJQPwQ=='
]
];
$payload = [
'title' => '새로운 메시지',
'body' => '김철수님이 메시지를 보냈습니다.',
'icon' => '/icon-192x192.png',
'url' => 'https://example.com/messages'
];
try {
$result = sendSinglePush($subscription, $payload);
echo 'Push sent successfully: ' . json_encode($result);
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}
?>>
응답 예제
성공 응답 (200 OK)
{
"success": true,
"message": "Push notification sent successfully",
"data": {
"sent": 1,
"failed": 0,
"statusCode": 201,
"payloadSize": 256
}
}
POST 다중 푸시 발송
여러 구독자에게 동시에 푸시 알림을 발송합니다. 최대 1,000명까지 한 번에 발송할 수 있습니다.
https://api.pushmanager.kr/api/push/multiple
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
subscriptions |
array | 필수 | 푸시 구독 정보 배열 (1-1000개) |
payload |
object | 필수 | 모든 사용자에게 동일하게 발송할 푸시 내용 |
options |
object | 선택 | 푸시 옵션 |
PHP cURL 사용 예제
<?php
function sendMultiplePush($subscriptions, $payload, $options = []) {
$api_url = 'https://api.pushmanager.kr';
$api_key = 'your-api-key-here';
$data = [
'subscriptions' => $subscriptions,
'payload' => $payload,
'options' => $options
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $api_url . '/api/push/multiple',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $api_key
]
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
return json_decode($response, true);
} else {
throw new Exception('Multiple push notification failed: ' . $response);
}
}
// 사용 예제
$subscriptions = [
[
'endpoint' => 'https://fcm.googleapis.com/fcm/send/user1...',
'keys' => [
'p256dh' => 'BFYEOn4vQKKXYCGHnt9wCwPpvR7XJm8...',
'auth' => 'tBHItJh5u9CqcyWMcJQPwQ=='
]
],
[
'endpoint' => 'https://fcm.googleapis.com/fcm/send/user2...',
'keys' => [
'p256dh' => 'BAbCdEfGhIjKlMnOpQrStUvWxYz123...',
'auth' => 'xYz123AbC456DeF789GhI=='
]
]
// ... 최대 1000개까지
];
$payload = [
'title' => '공지사항',
'body' => '새로운 업데이트가 출시되었습니다.',
'icon' => '/icon-192x192.png',
'url' => 'https://example.com/updates'
];
try {
$result = sendMultiplePush($subscriptions, $payload);
echo 'Multiple push sent successfully: ' . json_encode($result);
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}
?>>
응답 예제
성공 응답 (200 OK)
{
"success": true,
"message": "Multiple push notifications processed",
"data": {
"total": 100,
"sent": 95,
"failed": 5,
"successRate": 95.0,
"errorStats": {
"expired": 3,
"client_error": 2
},
"processingTime": 1250
}
}
⚠️ 오류 코드
API 호출 시 발생할 수 있는 오류 코드와 해결 방법입니다.
| 상태 코드 | 설명 | 해결 방법 |
|---|---|---|
| 200 | 성공 | 요청이 정상적으로 처리됨 |
| 400 | 잘못된 요청 | 요청 데이터 형식을 확인하세요 |
| 401 | 인증 실패 | API 키를 확인하세요 |
| 403 | 접근 권한 없음 | 서비스가 비활성화되었거나 Origin이 일치하지 않음 |
| 429 | 요청 제한 초과 | 시간당 요청 제한을 초과했습니다. 잠시 후 다시 시도하세요 |
| 500 | 서버 오류 | 서버에 일시적인 문제가 발생했습니다 |
오류 응답 예제
인증 실패 (401)
{
"success": false,
"message": "Invalid API key",
"code": "API_KEY_INVALID",
"timestamp": "2025-06-30T12:00:00Z"
}
오류 처리 예제
<?php
function handlePushResponse($response, $httpCode) {
$data = json_decode($response, true);
switch ($httpCode) {
case 200:
return [
'success' => true,
'data' => $data
];
case 400:
return [
'success' => false,
'error' => '잘못된 요청: ' . $data['message'],
'code' => 'BAD_REQUEST'
];
case 401:
return [
'success' => false,
'error' => 'API 키가 유효하지 않습니다.',
'code' => 'UNAUTHORIZED'
];
case 429:
return [
'success' => false,
'error' => '요청 제한을 초과했습니다. 잠시 후 다시 시도하세요.',
'code' => 'RATE_LIMIT'
];
default:
return [
'success' => false,
'error' => '알 수 없는 오류: ' . $response,
'code' => 'UNKNOWN_ERROR'
];
}
}
?>>
📋 제한사항 및 정책
| 제한 항목 | 제한값 | 설명 |
|---|---|---|
| 푸시 발송 | 1분당 100회 | API 키별 푸시 발송 제한 |
| 제목 길이 | 최대 100자 | 푸시 알림 제목 |
| 내용 길이 | 최대 300자 | 푸시 알림 본문 |
| 다중 발송 | 최대 1000명 | 한 번에 발송 가능한 최대 구독자 수 |