tagworks_sdk_flutter 1.1.3 copy "tagworks_sdk_flutter: ^1.1.3" to clipboard
tagworks_sdk_flutter: ^1.1.3 copied to clipboard

Official Flutter SDK for TagWorks, providing deep linking, event tracking, and user engagement features for Android and iOS.

example/lib/main.dart

import 'dart:developer';

import 'package:app_links/app_links.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:tagworks_sdk_v1_flutter/tagworks_sdk_v1_flutter.dart';
import 'package:webview_flutter/webview_flutter.dart';

// late final GoRouter router;
final DeepLinkHandler deepLinkHandler = DeepLinkHandler();

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  deepLinkHandler.start();
  runApp(const MyApp());
}

class DeepLinkHandler {
  final _appLinks = AppLinks();
  StreamSubscription<Uri>? _sub;
  StreamSubscription? _deeplinkSub;
  String initialLocation = '/';

  void start() {
    // 앱 실행 중 들어오는 링크 처리
    _sub = _appLinks.uriLinkStream.listen((uri) async {
      print('deeplink : ${uri}');
      if (defaultTargetPlatform == TargetPlatform.android) {
        await _handle(uri);
      }
    });

    // cold start (앱이 완전히 꺼진 상태에서 링크로 실행될 때)
    _appLinks.getInitialLink().then((uri) async {
      print('deeplink1 : ${uri}');
      if (defaultTargetPlatform == TargetPlatform.android) {
        if (uri != null) {
          await _handle(uri);
        } else {
          final deferred = await TagWorksDeeplinkPlugin.handleDeferredDeeplink();
          if (deferred.isTagWorksDeeplink && deferred.deeplinkURL != null) {
            initialLocation = deferred.deeplinkURL!;
            print('deeplink deferred : ${initialLocation}');
          }
        }
      }
    }).catchError((_) {});

    // 딥링크 처리 후 TagWorks로부터 랜딩페이지 파라미터 전달
    // iOS에서 랜딩페이지 이동 처리.
    _deeplinkSub = TagWorksDeeplinkEvents.stream.listen((event) {
      debugPrint("HomePage에서만 딥링크 처리: $event");
    });
  }

  Future<void> _handle(Uri uri) async {
    try {
      final result = await TagWorksDeeplinkPlugin.handleDeeplinkWithUri(uri.toString());
      if (result.isTagWorksDeeplink && result.deeplinkURL != null) {
        print('deeplink final: ${result.deeplinkURL}');
      }
    } catch (e) {
      // 예외 발생 시 처리
      print('딥링크 처리 중 오류 발생: $e');
    }
  }

  void dispose() {
    _sub?.cancel();
    _deeplinkSub?.cancel();
  }
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  String? bannerUrl;
  late final WebViewController _controller;
  String _messageFromWeb = "";

  // StreamSubscription? _sub;
  // String? _latestLink;

  @override
  void initState() {
    super.initState();

    // 웹뷰 테스트

    _controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      // ..runJavaScript("""
      //   window.__TAGWORKS_SDK_READY = true;
      // """)
      ..addJavaScriptChannel(
        "TagWorksFT_JSInterfaces",
        onMessageReceived: (JavaScriptMessage message) {
          setState(() {
            _messageFromWeb = message.message;
          });
          print("웹뷰 인터페이스 받은 메시지: ${_messageFromWeb}");
          TagWorksPlugin.webInterfaceDidReceive(_messageFromWeb);
        },
      )
      ..setNavigationDelegate(
        NavigationDelegate(
          onPageFinished: (String url) async {
            debugPrint("✅ 페이지 로딩 완료: $url");
            await _controller.runJavaScript("""
              window.__TAGWORKS_SDK_READY = true;
              console.log('TAGWORKS SDK Ready');
            """);
          },
        ),
      )
      // ..loadRequest(Uri.parse("https://dxlab.obzen.com/html/bnk/BNK_Main.html"));
      // ..loadRequest(Uri.parse("http://192.168.20.53/g5/shop/"));
      ..loadRequest(Uri.parse("http://192.168.24.185/rshop"));
  }

  // Flutter로 메시지 보내기
  // TagWorksJSInterface.postMessage("Hello from WebView!");

  @override
  void dispose() {
    // _sub?.cancel();
    deepLinkHandler.dispose();
    super.dispose();
  }

  // Platform messages are asynchronous, so we initialize in an async method.

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              Row(children: [
                Expanded(
                    child: ElevatedButton(
                  onPressed: () async {
                    try {
                      // await TagWorksPlugin.initializeTagWorks(
                      //   siteId: "165,b1VTZzuL",
                      //   baseUrl: "https://dxlab.obzen.com/tagworks/obzen",
                      //   isUseIntervals: false,
                      //   dispatchInterval: 5,
                      //   sessionTimeOut: 5,
                      //   isManualDispatch: false,
                      //   // "dispatchRetryCount": 3,
                      //   appVersion: "1.5",
                      //   appName: "testapp",
                      //   isUseDynamicParameter: true,
                      //   deeplinkServerUrl: "https://dxlab.obzen.com/ozsmlinkg"
                      // );
                      //print('초기화$result');
                      await TagWorksPlugin.setLogLevel(3);
                      await TagWorksPlugin.setOptOut(false);
                      await TagWorksPlugin.setUserId('ny2060');
                      final visitorId = await TagWorksPlugin.getVisitorId();
                      print('visitorId : ${visitorId}');
                      // final siteId = await TagWorksPlugin().getSiteId();
                      // print('siteId:${siteId}');
                      if (await TagWorksPlugin.isInitialize() == false) {
                        // 초기화가 정상적으로 이루어지지 않은 상태
                        // 예외 처리 코드 추가
                        print('isInitialize : false');
                      }

                      // await TagWorksPlugin.setCommonDimensionWithString(3, '설정정보01');
                      // await TagWorksPlugin.setCommonDimensionWithString(4, '설정정보02');
                      // await TagWorksPlugin.setCommonDimensionWithDouble(1, 00.9);
                      // await TagWorksPlugin.setCommonDimensionWithDouble(11, 3.8888);

                      await TagWorksPlugin.setDynamicCommonDimensionWithString("사용자행동01", '설정정보01');
                      await TagWorksPlugin.setDynamicCommonDimensionWithDouble("사용자행동02", 10000.0);
                      await TagWorksPlugin.setDynamicCommonDimensionWithString("사용자행동03", '설정정보02');
                      await TagWorksPlugin.setDynamicCommonDimensionWithDouble("사용자행동04", 20000.0);

                      // final dimensionStrValue = await TagWorksPlugin.getCommonDimensionWithString(3);
                      // final dimensionNumValue = await TagWorksPlugin.getCommonDimensionWithDouble(11);
                      // final dim01 = await TagWorksPlugin.getCommonDimensionWithString(3);
                      // print('공용 General : $dim01');
                      //
                      // final dim02 = await TagWorksPlugin.getCommonDimensionWithDouble(11);
                      // print('공용 Fact : $dim02');

                      final commonDimensions = await TagWorksPlugin.getCommonDimensions();
                      print('공용 디멘젼 : $commonDimensions');

                      final dynamicCommonDimensions = await TagWorksPlugin.getDynamicCommonDimensions();
                      print('공용 동적 디멘젼 : $dynamicCommonDimensions');

                      final commonDimensionsOfArray = await TagWorksPlugin.getCommonDimensionsOfArrayIndex();
                      print('공용 dimensionsOfArray : ${commonDimensionsOfArray}');

                      final dynamicCommonDimensionsOfArray = await TagWorksPlugin.getDynamicCommonDimensionsOfArrayIndex();
                      print('공용 동적 dimensionsOfArray : ${dynamicCommonDimensionsOfArray}');

                      final dim03 = await TagWorksPlugin.getDynamicCommonDimension("사용자행동01");
                      print('공용 동적 General : $dim03');

                      await TagWorksPlugin.removeCommonDimensionInGeneralType(3);
                      await TagWorksPlugin.removeCommonDimensionInFactType(1);
                      await TagWorksPlugin.removeCommonDimensionWithArrayIndex(1);

                      print('공통 디멘젼 : ${await TagWorksPlugin.getCommonDimensions()}');

                      // await TagWorksPlugin.removeAllCommonDimension();
                      // print('공통:${await TagWorksPlugin.getCommonDimensions()}');

                      await TagWorksPlugin.setCommonDimensionWithString(4, '통장');
                      await TagWorksPlugin.setCommonDimensionWithDouble(1, 3333.9);
                      await TagWorksPlugin.setCommonDimensionWithDouble(11, 99.00);

                      await TagWorksPlugin.sendReferrerEventWithOpenUrlString("https://www.naver.com");

                      /**
                       * dataBundle
                       */

                      await DataBundlePlugin.initialize();
                      // print(DataBundlePlugin.EVENT_TAG_NAME);
                      await DataBundlePlugin.putString(DataBundlePlugin.EVENT_TAG_NAME, StandardEvent.PAGE_VIEW);
                      await DataBundlePlugin.putString(DataBundlePlugin.EVENT_TAG_PARAM_PAGE_PATH, '/페이지경로');
                      await DataBundlePlugin.putString(DataBundlePlugin.EVENT_TAG_PARAM_TITLE, '페이지타이틀');
                      await DataBundlePlugin.putString(DataBundlePlugin.EVENT_TAG_PARAM_KEYWORD, '검색어');
                      await DataBundlePlugin.putString(DataBundlePlugin.EVENT_TAG_PARAM_CUSTOM_PATH, '/커스텀경로');

                      await DataBundlePlugin.putDimensionWithString(1, "계좌신청");
                      await DataBundlePlugin.putDimensionWithDouble(2, 0.999);

                      await DataBundlePlugin.putDynamicDimensionWithString("사용자행동11", "계좌조회");
                      await DataBundlePlugin.putDynamicDimensionWithDouble("사용자행동22", 998877);

                      final dimensions = await DataBundlePlugin.getDimensions();
                      print('개별 : $dimensions ');

                      final dynamicDimensions = await DataBundlePlugin.getDynamicDimensions();
                      print('개별 동적 : $dynamicDimensions ');

                      final arrayDimensions = await DataBundlePlugin.getDimensionsOfArrayIndex();
                      print('개별 arrayIndex : $arrayDimensions ');

                      final arrayDynamicDimensions = await DataBundlePlugin.getDynamicDimensionsOfArrayIndex();
                      print('개별 동적 arrayIndex : $arrayDynamicDimensions ');

                      final dataBundle = await DataBundlePlugin.getDataBundle();
                      print('getDataBundle: $dataBundle ');

                      await DataBundlePlugin.initDataBundle(dataBundle);
                      final dataBundle2 = await DataBundlePlugin.getDataBundle();
                      print('getDataBundle2: $dataBundle2 ');

                      /**
                       * logEvent
                       */
                      await TagWorksPlugin.logEvent(TagWorksPlugin.EVENT_TYPE_PAGE, dataBundle);
                      await TagWorksPlugin.logEvent(TagWorksPlugin.EVENT_TYPE_USER_EVENT, dataBundle);

                      await TagWorksPlugin.saveErrorReport("errorType", "errorMessage");

                    } catch (e) {
                      print('Failed to initialize TagWorks: $e');
                    }
                  },
                  child: Text('Initialize TagWorks'),
                )),
                const SizedBox(height: 16),

                // === 새로 추가한 onCMS Popup 버튼 ===
                Expanded(
                    child: ElevatedButton(
                  onPressed: () async {
                    try {
                      await TagWorksPopupPlugin.onCMSPopup(
                        onCmsUrl: 'https://dxlab.obzen.com/oncms',
                        rcmdAreaCd: 'POPUP_TEST_AREA',
                        custId: '',
                      );
                      print('onCMS Popup 호출 성공');
                    } catch (e) {
                      print('onCMS Popup 호출 실패: $e');
                    }
                  },
                  child: const Text('Show CMS Popup'),
                )),
                Expanded(
                    child: ElevatedButton(
                  onPressed: () async {
                    // JavaScript 실행
                    await _controller.runJavaScript("""
                      if (window.__TAGWORKS_SDK_READY) {
                        window.TagWorksFT_JSInterfaces.postMessage("ABV");
                      }
                     """);
                  },
                  child: const Text('JSInterface Test'),
                )),
              ]),

              const SizedBox(height: 24),
              Text('CMS Banner', style: TextStyle(fontWeight: FontWeight.bold)),
              SizedBox(
                height: 200, // ★ 꼭 사이즈를 주세요(없으면 0으로 안 보임)
                width: double.infinity,
                child: OnCmsBannerWidget(
                  onCmsUrl: 'https://dxlab.obzen.com/oncms',
                  rcmdAreaCd: 'BANNER_OBZ_AREA',
                  custId: '', // 필요 없으면 null
                  //defaultImage: 'ic_banner_placeholder', // drawable에 넣어둔 이름
                  defaultImage: 'default_image',
                ),
              ),

              // webview 테스트
              const SizedBox(height: 4),
              // WebView
              const Text('WebView', style: TextStyle(fontWeight: FontWeight.bold)),
              SizedBox(
                height: 500, // 웹뷰 화면 높이 지정
                child: WebViewWidget(controller: _controller),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
0
likes
135
points
2
downloads

Publisher

unverified uploader

Weekly Downloads

Official Flutter SDK for TagWorks, providing deep linking, event tracking, and user engagement features for Android and iOS.

Homepage
Repository

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface, webview_flutter

More

Packages that depend on tagworks_sdk_flutter

Packages that implement tagworks_sdk_flutter