Flutter网页视图归因插件flutter_turbolink_attribution的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter网页视图归因插件flutter_turbolink_attribution的使用

TurboLink的官方Flutter SDK用于应用归因与活动管理。

支持Android、iOS和Web平台。

开始使用

配置TurboLink仪表板

  1. 注册您的应用程序。
  2. TurboLink仪表板完成基础集成。

帮助中心

https://help.turbolink.cc/

完整示例代码

import 'dart:ffi';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_turbolink_attribution/flutter_turbolink_attribution.dart';
import 'package:flutter_turbolink_attribution/turbolink_custom_properties.dart';
import 'package:flutter_turbolink_attribution_example/login.dart';
// import 'package:share_plus/share_plus.dart';

final navigatorKey = GlobalKey<NavigatorState>();

void main() {
  print("main");
  runApp(const MyApp());
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  bool isDark = false;

  void _showDialog() {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      showDialog(
        context: navigatorKey.currentContext!,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('标题'),
            content: Text('这是一个弹窗示例。'),
            actions: <Widget>[
              TextButton(
                child: Text('关闭'),
                onPressed: () {
                  Navigator.of(context).pop();
                },
              ),
            ],
          );
        },
      );
    });
  }

  Future<void> _share() async {
    // Share.share("Url Test:https://jeffapp.allapp.link/crpajb0gpf6gtqi95itg");
    // final shareResult = await Share.shareUri(Uri.parse("https://jeffapp.allapp.link/crpajb0gpf6gtqi95itg"));
  }

  [@override](/user/override)
  void initState() {
    print("initState");
    super.initState();
    initTurbolinkSDK();

    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
    ]);
  }

  void initTurbolinkSDK() async {
    TurbolinkSdk.enableLogger();

    TurbolinkSdk.setAppUser("jeff", "");
    TurbolinkSdk.setLang('jp');

    TurbolinkSdk.withCampaignCreateCallback((result) {
      print("TurboLinkSDK, withCampaignCreateCallback:" + result);
    });
    TurbolinkSdk.withCampaignDestroyCallback((result) {
      print("TurboLinkSDK, withCampaignDestroyCallback:" + result);
    });

    TurbolinkSdk.withLoginListenerCallback(() {
      print("TurboLinkSDK, withLoginListenerCallback:");
      // navigatorKey.currentState?.push(MaterialPageRoute(builder: (context) => LoginWidget()));
    });
    TurbolinkSdk.withRegListenerCallback(() {
      print("TurboLinkSDK, withRegListenerCallback");
      navigatorKey.currentState?.push(MaterialPageRoute(builder: (context) => LoginWidget()));
    });
    TurbolinkSdk.withEventListenerCallback((args) {
      print("TurboLinkSDK, withEventListenerCallback:${args.arguments}:${args.scheme}:${args.campaignUrl}:${args.additionalParam}");
      // TurbolinkSdk.loadUrl("https://jeffapp.c.allapp.link/c?l=crpaebp0b4mknpkano20&c=cM");
      TurbolinkSdk.closeCampaignPage();
    });
    // TurbolinkSdk.withEventCallback((args) {
    //   print(args.deviceStatus);
    // });
    TurbolinkSdk.withEventCallback((args) {
      print("TurboLinkSDK, withEventCallback:${args.linkHashId}:${args.blackBox}:${args.deviceStatus}:linkData:${args.linkData}:${args.campaignData}:${args.fromUserData['userId']}:${args.fromUserData['inviteCode']}");
    });
    TurbolinkSdk.withPointListenerCallback((args) {
      print("TurboLinkSDK, withPointListenerCallback: ${args.campaignTitle}:${args.campaignLang}:${args.campaignUrl}:${args.user}:${args.position}");
    });
    // TurbolinkSdk.withShareListenerCallback((args) {
    //   print("TurboLinkSDK, withShareListenerCallback: ${args.sharingText}: ${args.shareText}: ${args.shareLink} :${args.noInstallPrompt}: ${args.targetScheme}: ${args.campaignId}");
    // });

    TurbolinkSdk.withRedirectListenerCallback((args) {
      TurbolinkSdk.closeCampaignPage();
      print("TurboLinkSDK, withRedirectListenerCallback: ${args.campaignId}_${args.campaignTitle}_${args.campaignLang}_${args.campaignUrl}_${args.user}_${args.type}_${args.appUrl}_${args.rewardTitle}_${args.kvData.values}");
    });

    bool isInclude = TurbolinkSdk.isUrlBelongTurboLink("https://jeffapp.c.allapp.link/c?l=crbaic10b4mp5b9bi7p0&c=sO");
    print("TurboLinkSDK, ${isInclude}");
    // TurbolinkSdk.setAppUser("ben", "v1");
    TurbolinkSdk.setScreenOrientationAll();
    // TurbolinkSdk.setLaunchCampaignDelay(-1);
    // TurbolinkSdk.setNightMode(true);
    TurbolinkSdk.setInitTitle("加入中");
    TurbolinkSdk.setTitleSize(16);
    TurbolinkSdk.setIdSimpleMode();
    TurbolinkSdk.setSimpleParameterMode();
    TurbolinkSdk.setAppUserInfo("jeff", "", "", ["ok", "jeff"], "3982");
    TurbolinkSdk.setAppUser("jeff123", "ok");

    // TurbolinkSdk.loadUrl("");

    // TurbolinkSdk.withEventCallback((args) {
    //   print("TurboLinkSDK, withEventCallback:${args.linkHashId}:${args.blackBox}:${args.deviceStatus}:${args.linkData}:${args.campaignData}:${args.fromUserData['userId']}:${args.fromUserData['inviteCode']}");
    // });
    TurbolinkSdk.autoInstance('coae59progtocgji0vug', '6fbbbbe1f68712212c895522d66c241e', '6f3c7c7c24d2ba6f0d53256968e56ea4b7b4bee8');

    // TurbolinkSdk.setNightMode(true);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        appBarTheme: AppBarTheme.of(context).copyWith(
          // backgroundColor: Colors.green,
          iconTheme: IconThemeData(color: Colors.black),
          color: Colors.deepPurpleAccent,
          foregroundColor: Colors.black,
          systemOverlayStyle: SystemUiOverlayStyle(
            statusBarColor: Colors.green,
            statusBarIconBrightness: Brightness.dark,
            statusBarBrightness: Brightness.light,
          ),
          // foregroundColor: Colors.white
        ),
      ),
      navigatorKey: navigatorKey,
      debugShowCheckedModeBanner: false,
      // home: MainWidget(_platformVersion),
      home: Builder(
        builder: (context) => Scaffold(
            appBar: AppBar(
              title: const Text('Plugin example app'),
              // systemOverlayStyle: SystemUiOverlayStyle(
              //   statusBarBrightness: Brightness.dark,
              // ),
            ),
            body: Column(
              children: [
                Container(
                  child: Text('Running on: $_platformVersion\n'),
                ),
                Container(
                  child: TextButton(
                    onPressed: () {
                      print("onPressed");
                      TurbolinkSdk.loadUrl("https://jeffapp.c.allapp.link/c?l=cslj4m0gpf6nfdde71ng&c=Yo");
                      // Navigator.push(context, MaterialPageRoute(builder: (context) => LoginWidget()));
                    },
                    child: Text("活动New"),
                  ),
                ),
                TextButton(
                  onPressed: () {
                    Navigator.push(context, MaterialPageRoute(builder: (context) => LoginWidget()));
                  },
                  child: Text("Login Widget"),
                ),
                TextButton(
                  onPressed: () {
                    TurbolinkSdk.logout();
                  },
                  child: Text("Logout"),
                ),
                TextButton(
                  onPressed: () {
                    TurboLinkCustomProperties customData = TurboLinkCustomProperties()
                        .addKeyValue("name", "ben")
                        .addKeyValue("age", "22");
                    TurbolinkSdk.customEvent("pay", customData);
                  },
                  child: Text("自定义事件"),
                ),
                TextButton(
                  onPressed: () {
                    TurbolinkSdk.register("jeff", "jeff register", "https://www.turbolink.ai", ["ben", "jeff"], "33399");
                  },
                  child: Text("register"),
                ),
                TextButton(
                  onPressed: () {
                    TurbolinkSdk.codeSearch("143.42¥8QJXKXOTv2¥");
                  },
                  child: Text("codeSearch"),
                ),
                TextButton(
                  onPressed: () {
                    TurbolinkSdk.loadDelayRedirectUrl();
                  },
                  child: Text("打开延迟活动"),
                ),
                TextButton(
                  onPressed: () {
                    _showDialog();
                  },
                  child: Text("打开弹窗"),
                ),
                TextButton(
                  onPressed: () {
                    this.isDark = !this.isDark;
                    TurbolinkSdk.setNightMode(this.isDark);
                  },
                  child: Text("黑夜/白天模式"),
                ),
                TextButton(
                  onPressed: () {
                    _share();
                  }, 
                  child: Text("分享"),
                ),
              ],
            )
        ),
      )
    );
  }
}

更多关于Flutter网页视图归因插件flutter_turbolink_attribution的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网页视图归因插件flutter_turbolink_attribution的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用flutter_turbolink_attribution插件的示例代码。这个插件允许你在Flutter应用中嵌入并管理网页视图,同时收集归因数据。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加flutter_turbolink_attribution依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_turbolink_attribution: ^最新版本号  # 请替换为实际最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入插件:

import 'package:flutter/material.dart';
import 'package:flutter_turbolink_attribution/flutter_turbolink_attribution.dart';

3. 配置和使用

以下是一个简单的示例,展示如何在Flutter应用中嵌入一个网页视图并配置归因参数:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter TurboLink Attribution Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TurboLinkAttributionController? _controller;

  @override
  void initState() {
    super.initState();
    // 初始化控制器并设置归因参数
    _controller = TurboLinkAttributionController(
      attributionParameters: {
        'campaign_source': 'source',
        'campaign_medium': 'medium',
        'campaign_term': 'term',
        'campaign_content': 'content',
        'campaign_name': 'name',
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter TurboLink Attribution Demo'),
      ),
      body: Center(
        child: TurboLinkAttributionView(
          controller: _controller!,
          url: 'https://www.example.com', // 替换为你的目标URL
          onPageFinished: (url) {
            print('Page finished loading: $url');
          },
          onLoadError: (url, errorCode, description) {
            print('Failed to load page $url: $errorCode, $description');
          },
        ),
      ),
    );
  }

  @override
  void dispose() {
    _controller?.dispose();
    super.dispose();
  }
}

4. 运行应用

保存所有文件并在你的开发环境中运行Flutter应用。你应该能够看到一个带有网页视图的界面,并且归因参数已经配置完成。

注意事项

  • 确保你已经在你的项目中正确配置了互联网权限,以便能够加载网页。
  • 根据你的具体需求,你可能需要调整归因参数的名称和值。
  • 插件的版本号可能会更新,因此请确保使用最新的版本号。

通过上述代码示例,你可以在Flutter应用中集成flutter_turbolink_attribution插件并配置归因参数。这样可以帮助你更好地追踪用户来源和行为。

回到顶部