JavaScript Bridge
SDK의 오퍼월은 WebView로 작동하며, WebView와 네이티브 앱 간 통신을 위해 JavaScript Bridge를 사용합니다.
개요
일반적으로는 JavaScript Bridge를 직접 다룰 필요가 없습니다. SDK가 자동으로 처리합니다. 하지만 고급 사용자나 커스터마이징이 필요한 경우 알아두면 유용합니다.
지원하는 메시지 타입
WebView에서 네이티브로 보낼 수 있는 메시지 타입:
openWebView: 서브 WebView 열기close: WebView 닫기trackEvent: 이벤트 추적customEvent: 커스텀 이벤트 (v1.0.24+)dataRequest: 데이터 요청 (v1.0.24+)missionCompleted: 미션 완료 알림missionProgressed: 미션 진행 알림quizCompleted: 퀴즈 완료 알림
커스텀 메시지 처리
WebView에서 특정 메시지를 보냈을 때 앱에서 처리하려면:
Android:
val offerwallView = findViewById<AdchainOfferwallView>(R.id.offerwallView)
offerwallView.setJavaScriptBridgeListener(object : JavaScriptBridgeListener {
override fun onMessage(type: String, data: Map<String, Any>) {
when (type) {
"customEvent" -> {
// 커스텀 이벤트 처리
val eventName = data["eventName"] as? String
println("커스텀 이벤트: $eventName")
}
"dataRequest" -> {
// 데이터 요청 처리
val requestId = data["requestId"] as? String
// 데이터 응답
offerwallView.sendDataResponse(requestId, mapOf(
"result" to "success",
"data" to myData
))
}
}
}
})iOS:
offerwallView.setJavaScriptBridgeDelegate(self)
extension ViewController: JavaScriptBridgeDelegate {
func onMessage(type: String, data: [String: Any]) {
switch type {
case "customEvent":
let eventName = data["eventName"] as? String
print("커스텀 이벤트: \(eventName ?? "")")
case "dataRequest":
let requestId = data["requestId"] as? String
// 데이터 응답
offerwallView.sendDataResponse(requestId: requestId, data: [
"result": "success",
"data": myData
])
default:
break
}
}
}보안 고려사항
JavaScript Bridge는 WebView와 앱 간 통신을 가능하게 하지만, 보안에 주의해야 합니다:
민감한 데이터(토큰, 비밀번호 등)를 전달하지 마세요
사용자 입력을 검증하세요
HTTPS만 사용하세요
SDK는 기본적으로 안전하게 설정되어 있습니다.
디버깅
JavaScript Bridge 메시지를 로그로 보려면:
Android:
AdchainSdk.setLogLevel(LogLevel.DEBUG)iOS:
AdchainSdk.shared.setLogLevel(.debug)그러면 Logcat/Console에 모든 Bridge 메시지가 출력됩니다.
React Native에서의 사용
React Native 앱에서는 JavaScript Bridge를 직접 구현할 필요가 없습니다.
자동 처리
React Native SDK가 WebView ↔ Native 통신을 자동으로 처리합니다:
// React Native에서는 다음과 같이 구현합니다
import { AdchainSdk } from '@1selfworld/adchain-sdk-react-native';
await AdchainSdk.openOfferwall('main_offerwall');내부적으로 React Native 브릿지를 통해 Android/iOS의 네이티브 JavaScript Bridge가 작동합니다.
커스텀 이벤트 처리
WebView에서 보내는 커스텀 이벤트를 처리하려면:
import { AdchainOfferwallView } from '@1selfworld/adchain-sdk-react-native';
<AdchainOfferwallView
style={{ flex: 1 }}
placementId="custom_offerwall"
onCustomEvent={(eventType, payload) => {
console.log('커스텀 이벤트:', eventType, payload);
// 예: 결제 이벤트, 인증 이벤트 등
}}
onDataRequest={(requestId, requestType, params) => {
console.log('데이터 요청:', requestType);
// 네이티브 데이터를 WebView로 전달
return { result: 'success', data: myData };
}}
/>네이티브 커스터마이징
더 복잡한 커스터마이징이 필요하면 네이티브 레벨에서 구현하세요:
Android: 위의 Android 예시 참고 (
JavaScriptBridgeListener)iOS: 위의 iOS 예시 참고 (
JavaScriptBridgeDelegate)
React Native에서 네이티브 모듈을 통해 접근할 수 있습니다.
다음 단계
Last updated