DariInterceptor API
브릿지 메시지 캡처를 위한 인터페이스 및 기본 구현체
이 페이지는 기본 방식인 직접 호출을 다룹니다. 브릿지 코드에 Dari 호출 없이 캡처하려면, 의존성은 그대로 두고 Gradle 플러그인을 추가하세요. 플러그인이 같은 호출을 대신 넣어 줍니다.
인터페이스
interface DariInterceptor {
val tag: String? get() = null
fun onWebToAppRequest(
handlerName: String,
requestId: String?,
requestData: String?,
fireAndForget: Boolean? = null,
)
fun onWebToAppRequest(
handlerName: String,
displayName: String?,
requestId: String?,
requestData: String?,
fireAndForget: Boolean? = null,
)
fun onWebToAppResponse(
handlerName: String,
requestId: String?,
responseData: String?,
isSuccess: Boolean,
)
fun onAppToWebRequest(
handlerName: String,
requestId: String?,
data: String?,
fireAndForget: Boolean? = null,
)
fun onAppToWebRequest(
handlerName: String,
displayName: String?,
requestId: String?,
data: String?,
fireAndForget: Boolean? = null,
)
fun onAppToWebResponse(
requestId: String?,
isSuccess: Boolean,
responseData: String?,
)
}DefaultDariInterceptor
DefaultDariInterceptor는 디버그 구현체입니다. 메시지를 Dari의 Room 데이터베이스에 저장하고 알림을 표시합니다.
val interceptor = Dari.createInterceptor(tag = "PaymentBridge")앱 코드에서는 Dari.createInterceptor()를 사용해야 릴리즈 빌드가 dari-noop과 함께 컴파일됩니다. 선택적 tag를 사용하면 앱에 여러 인터셉터가 활성화된 경우 브릿지 소스별로 메시지를 구분할 수 있습니다.
Protocol Buffers (선택 사항)
protobuf 검사에는 별도 feature flag가 없으며 기존 String/JSON API를 대체하지 않습니다. 활성화 조건, decoder 설정, 브릿지 전송 방식 및 모든 요청/응답 메서드는 Protocol Buffers 가이드를 참고하세요.
메서드
onWebToAppRequest
JavaScript가 네이티브 앱으로 메시지를 보낼 때 호출합니다. 모든 요청이 들어오는 진입점에서 핸들러로 넘기기 전에 한 번 호출합니다.
| 파라미터 | 타입 | 설명 |
|---|---|---|
handlerName | String | 브릿지 핸들러 이름 |
requestId | String? | 요청-응답 쌍을 식별하는 고유 ID. null = 단독 메시지 |
requestData | String? | 요청 페이로드 |
fireAndForget | Boolean? | null = 전역 설정 사용, true = 즉시 완료, false = 응답 대기 |
onWebToAppResponse
네이티브 앱이 JavaScript로 응답을 보낼 때 호출합니다. 모든 응답을 보내는 함수 한 곳에서 호출하면 핸들러마다 호출할 필요가 없습니다.
| 파라미터 | 타입 | 설명 |
|---|---|---|
handlerName | String | 요청과 일치해야 함 |
requestId | String? | 요청의 requestId와 일치해야 함 |
responseData | String? | 응답 페이로드 |
isSuccess | Boolean | true → SUCCESS, false → ERROR |
onAppToWebRequest
네이티브 앱이 JavaScript로 메시지를 푸시할 때 호출합니다. 웹으로 메시지를 보내는 함수에서 호출합니다.
onAppToWebResponse
JavaScript가 네이티브 앱의 요청에 응답할 때 호출합니다. 웹의 응답이 도착하는 지점에서 호출합니다.
선택적 표시 이름
안정적인 핸들러 식별자에 읽기 쉬운 이름을 함께 표시하려면 displayName이 있는 요청 overload를 사용합니다:
interceptor?.onWebToAppRequest(
handlerName = "N:4-1",
displayName = "오늘의 건강목표",
requestId = requestId,
requestData = payload,
)Dari는 두 값을 분리하여 저장·내보내고 검색 시 두 값 모두를 확인합니다. 목록과 알림에는 N:4-1(오늘의 건강목표)로 표시됩니다. 공백 표시 이름은 null처럼 처리합니다. App-to-Web 및 protobuf 요청에도 같은 overload를 사용할 수 있으며 기존 시그니처도 계속 지원합니다.
페이지 URL과 origin
페이지를 전달하면 각 메시지에 어느 웹 배포에서 왔는지 기록됩니다. SPA 히스토리 변경에도 호출되는 doUpdateVisitedHistory를 WebView가 이미 쓰는 WebViewClient에 추가하세요. 새 client를 지정하면 기존 내비게이션·인증 콜백이 사라집니다:
override fun doUpdateVisitedHistory(view: WebView, url: String?, isReload: Boolean) {
super.doUpdateVisitedHistory(view, url, isReload)
interceptor?.onPageUrlChanged(url)
}이후 캡처되는 요청에는 자격 증명이나 토큰이 담길 수 있는 user info, query, fragment를 뺀 URL이 저장됩니다. 두 인스펙터 모두 상세 화면에 표시하고, origin이 둘 이상이면 origin 필터를 보여주며, Response Time 통계도 선택한 origin 기준으로 계산합니다. export에는 page_url로 포함됩니다. 페이지끼리 덮어쓰지 않도록 WebView마다 인터셉터를 하나씩 쓰세요.
Fire-and-Forget (단방향 호출)
응답을 받지 않는 단방향 호출은 즉시 SUCCESS로 처리되도록 설정할 수 있습니다:
// 개별 호출
interceptor?.onWebToAppRequest(
handlerName = "logEvent",
requestId = null,
requestData = """{"event": "button_click"}""",
fireAndForget = true,
)
// 전역 설정: 모든 호출에 적용
DariConfig(fireAndForget = true)