웹뷰(WebView) 연동하기(작성중)
앱스킴 리스트
카드사·본인확인기관
앱스킴
export const callAppBridge = (message) => {
// payload의 경우 "2-1.공통 메세지 포맷" 참고
const payload = { type: "PARTNER_EVENT", ...message };
const jsonPayload = JSON.stringify(payload);
try {
// iOS (Native WKWebView)
if (window.webkit?.messageHandlers?.partnerBridge) {
window.webkit.messageHandlers.partnerBridge.postMessage(payload);
return;
}
// Android (Native / RN / Flutter 일부)
if (window.partnerBridge?.postMessage) {
window.partnerBridge.postMessage(jsonPayload);
return;
}
// Flutter
if (window.flutter_inappwebview?.callHandler) {
window.flutter_inappwebview.callHandler("partnerBridge", payload);
return;
}
} catch (error) {
console.error("브릿지 호출 중 오류 발생 :", error);
}
};{
"type": "STRING",
"action": "STRING"
}{
"type": "PARTNER_EVENT",
"action": "CLOSE"
}class PartnerBridge: NSObject, WKScriptMessageHandler {
func userContentController(
_ userContentController: WKUserContentController,
didReceive message: WKScriptMessage
) {
guard let body = message.body as? [String: Any] else { return }
let type = body["type"] as? String
let action = body["action"] as? String
if type == "PARTNER_EVENT" && action == "CLOSE" {
DispatchQueue.main.async {
self.closeWebView()
}
}
}
}contentController.add(PartnerBridge(), name: "partnerBridge")class PartnerBridge {
@JavascriptInterface
fun postMessage(message: String) {
val json = JSONObject(message)
val type = json.optString("type")
val action = json.optString("action")
if (type == "PARTNER_EVENT" && action == "CLOSE") {
closeWebView()
}
}
}webView.addJavascriptInterface(
PartnerBridge(),
"partnerBridge"
)InAppWebView(
onWebViewCreated: (controller) {
controller.addJavaScriptHandler(
handlerName: 'partnerBridge',
callback: (args) {
final data = args.first;
if (data['type'] == 'PARTNER_EVENT' &&
data['action'] == 'CLOSE') {
closeWebView();
}
},
);
},
)import { WebView } from 'react-native-webview';
function PartnerWebView() {
return (
<WebView
source={{ uri: 'https://manager.payssam.kr/partner_v2/short_url/...' }}
onMessage={(event) => {
const data = JSON.parse(event.nativeEvent.data);
if (
data.type === 'PARTNER_EVENT' &&
data.action === 'CLOSE'
) {
closeWebView();
}
}}
/>
);
}