- google/auth 패키지 추가 (OAuth2 Service Account 인증) - FcmSender: FCM HTTP v1 API 발송 서비스 - FcmResponse: 응답 DTO (성공/실패, 토큰 유효성 체크) - FcmException: FCM 전용 예외 클래스 - fcm:test artisan 명령어 (테스트 발송) - PushNotificationService에 FcmSender 연동 - config/fcm.php 설정 파일 추가 - 알림 유형별 채널 분리 (push_default, push_urgent)
76 lines
1.8 KiB
PHP
76 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Fcm;
|
|
|
|
class FcmResponse
|
|
{
|
|
public function __construct(
|
|
public readonly bool $success,
|
|
public readonly ?string $messageId,
|
|
public readonly ?string $error,
|
|
public readonly int $statusCode,
|
|
public readonly array $rawResponse
|
|
) {}
|
|
|
|
/**
|
|
* 성공 응답 생성
|
|
*/
|
|
public static function success(?string $messageId, int $statusCode, array $rawResponse): self
|
|
{
|
|
return new self(
|
|
success: true,
|
|
messageId: $messageId,
|
|
error: null,
|
|
statusCode: $statusCode,
|
|
rawResponse: $rawResponse
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 실패 응답 생성
|
|
*/
|
|
public static function failure(string $error, int $statusCode, array $rawResponse): self
|
|
{
|
|
return new self(
|
|
success: false,
|
|
messageId: null,
|
|
error: $error,
|
|
statusCode: $statusCode,
|
|
rawResponse: $rawResponse
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 토큰이 유효하지 않은지 확인 (삭제 필요)
|
|
*/
|
|
public function isInvalidToken(): bool
|
|
{
|
|
if ($this->success) {
|
|
return false;
|
|
}
|
|
|
|
// FCM에서 반환하는 무효 토큰 에러 코드들
|
|
$invalidTokenErrors = [
|
|
'UNREGISTERED',
|
|
'INVALID_ARGUMENT',
|
|
'NOT_FOUND',
|
|
];
|
|
|
|
$errorCode = $this->rawResponse['error']['details'][0]['errorCode'] ?? null;
|
|
|
|
return in_array($errorCode, $invalidTokenErrors, true);
|
|
}
|
|
|
|
/**
|
|
* 배열로 변환
|
|
*/
|
|
public function toArray(): array
|
|
{
|
|
return [
|
|
'success' => $this->success,
|
|
'message_id' => $this->messageId,
|
|
'error' => $this->error,
|
|
'status_code' => $this->statusCode,
|
|
];
|
|
}
|
|
} |