μ›Ήμ•± 연동

πŸ“˜

지원 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";
import 'package:hackle_platform_interface/model/hackle_app_mode.dart';

HackleConfig config = HackleConfigBuilder()
  .hackleAppMode(HackleAppMode.webViewWrappe)
  .build();

await HackleApp.initialize(YOUT_APP_SDK_KEY, hackleConfig: config);