Flutter应用内网页视图跟踪插件datadog_inappwebview_tracking的使用
Flutter应用内网页视图跟踪插件datadog_inappwebview_tracking的使用
Overview
此包是datadog_flutter_plugin
扩展。它允许Real User Monitoring(RUM监控由flutter_inappwebview
包创建的网页视图,从而消除您的混合Flutter应用程序中的盲点。
Warning
此插件目前不支持Flutter Web。
Instrumenting your web views
Rum Flutter SDK 提供了API来控制在使用flutter_inappwebview
包时的网页视图跟踪。
添加datadog_inappwebview_tracking
和flutter_inappwebview
两个包到您的pubspec.yaml
文件中:
dependencies:
flutter_inappwebview: ^6.1.5
datadog_flutter_plugin: ^2.8.0
datadog_inappwebview_tracking: ^1.0.0
InAppWebView
要对InAppWebView
进行仪表化,请将DatadogInAppWebViewUserScript
添加到initialUserScripts
中,并在onWebViewCreated
回调期间调用trackDatadogEvents
扩展方法:
InAppWebView(
// 其他设置...
initialUserScripts: UnmodifiableListView([
DatadogInAppWebViewUserScript(
datadog: DatadogSdk.instance,
allowedHosts: {'shopist.io'},
),
]),
onWebViewCreated: (controller) async {
controller.trackDatadogEvents(DatadogSdk.instance);
},
)
InAppBrowser
对于InAppBrowser
,由于Android 33+存在一个bug(参见此处,该bug将在依赖于flutter_inappwebview 6.2.0
的插件版本中修复。在此期间,您需要手动处理InAppBrowser
的跟踪。
要对InAppBrowser
进行仪表化,请覆盖onBrowserCreated
并调用trackDatadogEvents
扩展方法在webViewController
上,然后在创建自定义InAppBrowser
时添加一个DatadogInAppWebViewUserScript
到initialUserScripts
中:
class MyInAppBrowser extends InAppBrowser {
MyInAppBrowser({super.windowId, super.initialUserScripts});
@override
void onBrowserCreated() {
webViewController?.trackDatadogEvents(DatadogSdk.instance);
super.onBrowserCreated();
}
}
// 浏览器创建
_browser = MyInAppBrowser(
initialUserScripts: UnmodifiableListView(
[
DatadogInAppWebViewUserScript(
datadog: DatadogSdk.instance,
allowedHosts: {'shopist.io'},
),
],
),
);
示例代码
示例代码如下:
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2024-Present Datadog, Inc.
import 'dart:io';
import 'package:datadog_flutter_plugin/datadog_flutter_plugin.dart';
import 'package:datadog_inappwebview_tracking_example/app.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
String? customEndpoint;
Future<void> main() async {
await dotenv.load(mergeWith: Platform.environment);
var clientToken = dotenv.get('DD_CLIENT_TOKEN', fallback: '');
var applicationId = dotenv.maybeGet('DD_APPLICATION_ID');
customEndpoint ??= dotenv.maybeGet('DD_CUSTOM_ENDPOINT');
DatadogSdk.instance.sdkVerbosity = CoreLoggerLevel.debug;
final configuration = DatadogConfiguration(
clientToken: clientToken,
env: dotenv.get('DD_ENV', fallback: ''),
site: DatadogSite.us1,
uploadFrequency: UploadFrequency.frequent,
batchSize: BatchSize.small,
nativeCrashReportEnabled: true,
firstPartyHosts: [],
loggingConfiguration: DatadogLoggingConfiguration(
customEndpoint: customEndpoint,
),
rumConfiguration: applicationId != null
? DatadogRumConfiguration(
detectLongTasks: false,
applicationId: applicationId,
traceSampleRate: 100,
customEndpoint: customEndpoint,
)
: null,
);
// 这个只用于迭代测试,因为模拟服务器不支持HTTPS
if (customEndpoint != null) {
configuration.additionalConfig['_dd.needsClearTextHttp'] = true;
}
await DatadogSdk.runApp(configuration, TrackingConsent.granted, () async {
runApp(MyApp());
});
}
更多关于Flutter应用内网页视图跟踪插件datadog_inappwebview_tracking的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用内网页视图跟踪插件datadog_inappwebview_tracking的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用datadog_inappwebview_tracking
插件来跟踪应用内网页视图的示例代码。这个插件结合了flutter_inappwebview
和Datadog的SDK,以便实现对网页视图的跟踪。
首先,确保你的Flutter项目已经配置好flutter_inappwebview
和datadog_flutter_plugin
依赖。你需要在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
flutter_inappwebview: ^5.3.2 # 请根据最新版本进行调整
datadog_flutter_plugin: ^0.6.0 # 请根据最新版本进行调整
datadog_inappwebview_tracking: ^0.1.0 # 假设存在这样的包,版本号请根据实际情况调整
然后运行flutter pub get
来安装这些依赖。
接下来,在你的Flutter应用中配置和使用这些插件。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:datadog_flutter_plugin/datadog_flutter_plugin.dart';
import 'package:datadog_inappwebview_tracking/datadog_inappwebview_tracking.dart';
void main() {
// 初始化Datadog SDK
DatadogFlutterPlugin.initialize(
configuration: DatadogConfiguration(
clientToken: 'YOUR_DATADOG_CLIENT_TOKEN', // 替换为你的Datadog客户端令牌
environment: 'production', // 或 'staging', 'development' 等
service: 'your_service_name', // 替换为你的服务名称
version: '1.0.0', // 你的应用版本
),
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter InAppWebView Tracking Example'),
),
body: WebViewPage(),
),
);
}
}
class WebViewPage extends StatefulWidget {
@override
_WebViewPageState createState() => _WebViewPageState();
}
class _WebViewPageState extends State<WebViewPage> {
InAppWebViewController? _webViewController;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Expanded(
child: InAppWebView(
initialUrl: "https://www.example.com",
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
debuggingEnabled: true,
),
),
onWebViewCreated: (InAppWebViewController controller) {
_webViewController = controller;
// 设置Datadog跟踪
controller.addJavascriptInterface(
name: 'DatadogInterface',
class: DatadogInAppWebViewTracking(
controller: controller,
datadog: DatadogFlutterPlugin.instance,
),
);
},
onLoadStart: (InAppWebViewController controller, String url) {
print("Started loading URL: $url");
},
onLoadStop: (InAppWebViewController controller, String url) async {
print("Finished loading URL: $url");
// 可以在这里添加额外的逻辑,比如发送页面视图事件到Datadog
},
),
),
],
);
}
@override
void dispose() {
_webViewController?.dispose();
super.dispose();
}
}
注意事项:
- Datadog Client Token:确保你已经替换了
YOUR_DATADOG_CLIENT_TOKEN
为你的实际Datadog客户端令牌。 - 依赖版本:上述代码中的版本号(如
^5.3.2
和^0.6.0
)可能需要根据实际发布的最新版本进行调整。 - JavaScript接口:
DatadogInAppWebViewTracking
类是一个假设的类,用于演示如何添加JavaScript接口。实际使用时,你可能需要根据datadog_inappwebview_tracking
插件的文档进行具体实现。 - 权限:确保你的应用具有访问网络的权限,特别是在Android的
AndroidManifest.xml
和iOS的Info.plist
中。
由于datadog_inappwebview_tracking
插件可能是一个假设的包,具体实现细节可能会有所不同。建议查阅该插件的官方文档和示例代码以获取更准确的实现方式。