์น์ฑ ์ฐ๋
์ง์ SDK ๋ฒ์
Flutter SDK 2.13.0 ์ด์ ๋ฒ์ ์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
JavaScript SDK 11.24.1 ์ด์ ๋ฒ์ ์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
WebView
๋ฅผ ํตํด ์์ฌ ์น์ฌ์ดํธ๋ฅผ ๋๋๋งํ๋ ๊ฒฝ์ฐ, ๋ค์ ๊ฐ์ ์ค์ ์ ํตํด ์น์ฌ์ดํธ์ ํฌํจ๋ ํตํด JavaScript SDK๋ฅผ ์น์ฌ์ดํธ ์ฝ๋ ๋ณ๊ฒฝ์์ด ํตํด Flutter SDK ๊ธฐ๋ฅ๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ๋ชจ๋ ํตํด ์ด๋ฒคํธ๋ Futter SDK๋ฅผ ํตํด ์์ง๋ฉ๋๋ค.
import 'dart:collection';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:hackle/hackle.dart';
InAppWebView(
initialSettings: InAppWebViewSettings(
javaScriptEnabled: true,
),
initialUserScripts: UnmodifiableListView<UserScript>([
UserScript(
source: HackleApp.getWebBridgeScript(),
injectionTime: UserScriptInjectionTime.AT_DOCUMENT_START,
forMainFrameOnly: true
)]),
onWebViewCreated: (controller) {
controller.loadUrl(urlRequest: URLRequest(url: WebUri('YOUR_WEB_URL')));
},
onJsPrompt: (controller, jsPromptRequest) async {
if(HackleApp.isInvocableCommandInWebView(jsPromptRequest.message)) {
var result = await HackleApp.handleWebInterfaceCommand(jsPromptRequest.message);
return JsPromptResponse(action: JsPromptResponseAction.CONFIRM, handledByClient: true, value: result);
} else {
return JsPromptResponse(handledByClient: false);
}
},
);
ํตํด Flutter ์น๋ทฐ ์ค์ ์ ์๋๋ก์ด๋
Javascript Userscript
๋ฑ์ ์ด์ฉํ์ฌ ํตํด JavaScript SDK์ ์ํธ์์ฉํ๊ฒ ๋ฉ๋๋ค.
initialUserScripts
์ ๊ฒฝ์ฐ ์๋๋ก์ด๋ ํ๊ฒฝ์์ ์นํ์ด์ง ๋ก๋ ์ ์ ํธ์ถ๋จ์ ๋ณด์ฅ๋์ง ์์ ๋ฐ๋์onWebViewCreated
์์ ๋ฐํ๋controller
์์ ํ์ด์ง๋ฅผ ๋ก๋ํด์ฃผ์ธ์.
ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JavaScript ์นํ์ด์ง์์ ๋์ผํ App SDK ํค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
(Optional) Webview Wrapper App ์ฐ๋
๋ง์ฝ ํตํด ์ด๋ฒคํธ๋ฅผ Flutter SDK๊ฐ ์๋ JavaScript SDK๋ฅผ ํตํด ์์งํ๊ณ ์ถ๋ค๋ฉด ํตํด SDK๋ฅผ ์ด๊ธฐํ ํ ๋ HackleAppMode๋ฅผ webViewWrapper
๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
import "package:hackle/hackle.dart";
HackleConfig config = HackleConfigBuilder()
.hackleAppMode(HackleAppMode.webViewWrappe)
.build();
await HackleApp.initialize(YOUT_APP_SDK_KEY, hackleConfig: config);
Updated 13 days ago