Flutter网页视图归因插件flutter_turbolink_attribution的使用
Flutter网页视图归因插件flutter_turbolink_attribution的使用
TurboLink的官方Flutter SDK用于应用归因与活动管理。
支持Android、iOS和Web平台。
- Android - TurboLink SDK版本 >= 1.0.20 Android帮助中心
- iOS - TurboLink SDK版本 >= 1.0.22 iOS帮助中心
开始使用
配置TurboLink仪表板
- 注册您的应用程序。
- 在TurboLink仪表板完成基础集成。
帮助中心
完整示例代码
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
插件并配置归因参数。这样可以帮助你更好地追踪用户来源和行为。