Skip to main content
SDK 에서 알림을 발송할 때마다 Broadcast 를 통해 정보를 받아볼 수 있습니다.

Step 1) receiver 설정하기

AndroidManifest.xml 파일에 receiver 를 추가합니다.
<application
	...>	
	<receiver
	  android:name="..."
	  android:enabled="true"
	  android:exported="false"
	>
	  <intent-filter>
	    <action android:name="ai.fairytech.moment.action.NOTIFICATION_SENT" />
	  </intent-filter>
	</receiver>
</application>

Step 2) 수신된 값 확인 및 처리

/**
 * Moment SDK가 알림을 표시했을 때 호출되는 브로드캐스트입니다.
 *
 * 수신 Action:
 * ai.fairytech.moment.action.NOTIFICATION_SENT
 *
 * notification_type 값에 따라 알림의 종류를 구분할 수 있습니다.
 *
 * DEVICE:
 * - 사용자가 특정 앱 또는 페이지에 진입/이탈했을 때 표시되는 일반 알림입니다.
 * - campaign_id, business_id, activity_match_type, page_name 값이 포함될 수 있습니다.
 *
 * FGS:
 * - 포그라운드 인식 서비스에서 표시되는 상주 알림입니다.
 * - campaign_id, business_id, activity_match_type, page_name 값은 전달되지 않을 수 있습니다.
 */
class NotificationSentReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action != "ai.fairytech.moment.action.NOTIFICATION_SENT") return

        // 알림 종류
        // 예: "DEVICE", "FGS"
        val notificationType = intent.getStringExtra("notification_type")

        // 알림 고유 ID
        // 예: "64f1a2b3c4d5e6f7890abc12"
        val notificationId = intent.getStringExtra("notification_id")

        // 알림 제목
        // 예: "테스트 알림"
        val title = intent.getStringExtra("title")

        // 알림 본문
        // 예: "앱 진입 알림입니다. 클릭 시 네이버로 이동합니다."
        val body = intent.getStringExtra("body")

        // 알림 이미지 URL
        // 값이 없으면 null일 수 있습니다.
        // 예: "<https://storage.googleapis.com/fairy-image/kurly.png>"
        val imageUrl = intent.getStringExtra("image_url")

        // 알림 클릭 시 이동할 URL
        // 값이 없으면 null일 수 있습니다.
        // 예: "<https://naver.com>"
        val clickUrl = intent.getStringExtra("click_url")

        // 캠페인 고유 ID
        // DEVICE 알림에서만 전달될 수 있습니다.
        // 예: "64f1a2b3c4d5e6f7890abc12"
        val campaignId = intent.getStringExtra("campaign_id")

        // 인식된 앱 또는 서비스의 ID
        // DEVICE 알림에서만 전달될 수 있습니다.
        // 예: "kurly"
        val businessId = intent.getStringExtra("business_id")

        // 앱 인식 시점
        // DEVICE 알림에서만 전달될 수 있습니다.
        // 예: "ENTER", "EXIT"
        val activityMatchType = intent.getStringExtra("activity_match_type")

        // 인식된 페이지 이름
        // 인식된 앱에 따라 값이 없을 수 있습니다.
        // 예: "CART", "ORDER_COMPLETE"
        val pageName = intent.getStringExtra("page_name")

        // SDK가 알림을 표시한 시각입니다. Unix timestamp milliseconds 값입니다.
        // 예: 1782978887405
        val timestampMillis = intent.getLongExtra("timestamp_millis", 0L)
        
        // 사용자에게 노출된 알림 형태가 버블 알림인 경우 true
        val isBubble = intent.getBooleanExtra("is_bubble", false)
    }
}