Flutter隐私管理插件didomi_sdk的使用
Flutter隐私管理插件didomi_sdk的使用
Didomi Flutter Plugin
Didomi 是一个领先的合规管理平台,允许公司在 GDPR、CCPA 等数据隐私法规下收集、存储和利用用户同意。 本插件使 Flutter 开发者能够满足合规要求,并优化其在原生移动应用中的同意率和 monetization。
此仓库包含该插件的源代码和示例应用。 该插件使 Flutter 开发者能够在 Android 和 iOS 应用中轻松使用 Didomi 的合规管理平台。
安装
-
下载
- 查看我们的 releases 页面获取最新官方版本的插件。
-
文档
- 有关安装和使用插件的说明,请阅读我们的文档:
-
示例应用
- 克隆此仓库并打开
example/
文件夹。
- 克隆此仓库并打开
-
集成测试
- 所有测试场景位于
example/integration_test/
- 所有测试场景位于
-
使用 Flutter Mobile
cd ./example // 单个测试 flutter test "integration_test/<FILENAME>.dart" // 批量测试 flutter test integration_test
-
使用 Espresso (Android)
cd ./example/android/ // 单个测试 ./gradlew app:connectedAndroidTest -Ptarget=`pwd`/../integration_test/<FILENAME>.dart // 批量测试 ./gradlew bulk
-
使用 XCTest (iOS)
cd ./example/ xcodebuild -workspace ios/Runner.xcworkspace -scheme "RunnerTests" -enableCodeCoverage YES -destination "platform=iOS Simulator,name=iPhone 8,OS=14.5" test
提出改进建议
- 要报告错误、提出功能请求或建议其他改进,请使用 GitHub的问题追踪器。
许可证
此插件 发布在 LGPL 3.0 许可证下。
示例代码
import 'package:didomi_sdk/didomi_sdk.dart';
import 'package:didomi_sdk/events/event_listener.dart';
import 'package:didomi_sdk/log_level.dart';
import 'package:didomi_sdk_example/events_helper.dart';
import 'package:didomi_sdk_example/widgets/get_applicable_regulation.dart';
import 'package:didomi_sdk_example/widgets/get_vendor_count.dart';
import 'package:didomi_sdk_example/widgets/transactions/disable_purpose_transaction.dart';
import 'package:didomi_sdk_example/widgets/transactions/disable_purposes_transaction.dart';
import 'package:didomi_sdk_example/widgets/transactions/enable_purpose_transaction.dart';
import 'package:didomi_sdk_example/widgets/transactions/enable_purposes_transaction.dart';
import 'package:didomi_sdk_example/widgets/get_current_user_status_other_info.dart';
import 'package:didomi_sdk_example/widgets/get_current_user_status_purposes.dart';
import 'package:didomi_sdk_example/widgets/get_current_user_status_vendors.dart';
import 'package:didomi_sdk_example/widgets/get_purpose.dart';
import 'package:didomi_sdk_example/widgets/get_required_purposes.dart';
import 'package:didomi_sdk_example/widgets/get_required_vendors.dart';
import 'package:didomi_sdk_example/widgets/get_text.dart';
import 'package:didomi_sdk_example/widgets/get_translated_text.dart';
import 'package:didomi_sdk_example/widgets/get_user_status_other_info.dart';
import 'package:didomi_sdk_example/widgets/get_user_status_purposes.dart';
import 'package:didomi_sdk_example/widgets/get_vendor.dart';
import 'package:didomi_sdk_example/widgets/set_user.dart';
import 'package:didomi_sdk_example/widgets/set_user_status_globally.dart';
import 'package:didomi_sdk_example/widgets/update_selected_language.dart';
import 'package:flutter/material.dart';
import 'widgets/check_consent.dart';
import 'widgets/get_required_purpose_ids.dart';
import 'widgets/get_required_vendor_ids.dart';
import 'widgets/get_user_status_vendors.dart';
import 'widgets/initialize.dart';
import 'widgets/is_ready.dart';
import 'widgets/on_error.dart';
import 'widgets/on_ready.dart';
import 'widgets/reset.dart';
import 'widgets/sdk_events_logger.dart';
import 'widgets/set_log_level.dart';
import 'widgets/set_user_agree_to_all.dart';
import 'widgets/set_user_disagree_to_all.dart';
import 'widgets/set_user_status.dart';
import 'widgets/setup_ui.dart';
import 'widgets/show_hide_notice.dart';
import 'widgets/show_hide_preferences.dart';
import 'widgets/webview_strings.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
[@override](/user/override)
Widget build(BuildContext context) => MaterialApp(
title: "Didomi Flutter Demo",
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: "Flutter Demo Home Page"),
);
}
class MyHomePage extends StatefulWidget {
MyHomePage({required this.title}) : super();
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _sdkEvents = "";
EventsHelper eventsHelper = EventsHelper();
EventListener noticeListener = EventListener();
// Keep track if notice is visible or not
bool didomiNoticeVisible = false;
ScrollController scrollController = ScrollController();
[@override](/user/override)
void initState() {
super.initState();
DidomiSdk.setLogLevel(LogLevel.verbose);
noticeListener.onShowNotice = () => setState(() {
didomiNoticeVisible = true;
});
noticeListener.onHideNotice = () => setState(() {
didomiNoticeVisible = false;
});
DidomiSdk.addEventListener(noticeListener);
eventsHelper.uiCallback = (eventDescription) => onEvent(eventDescription);
}
void onEvent(String eventDescription) {
final snackBar = SnackBar(content: Text(eventDescription));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
setState(() {
_sdkEvents += "\n- $eventDescription";
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Didomi Flutter Demo"),
),
body: AbsorbPointer(
// When notice is visible, prevent user from interacting with the rest of the application (iOS bug)
absorbing: didomiNoticeVisible,
child: Material(
child: Center(
child: ListView(
padding: const EdgeInsets.only(left: 20.0, right: 20.0),
key: Key("components_list"),
controller: scrollController,
children: [
// SDK setup
Text("Setup:"),
IsReady(),
OnReady(),
OnError(),
SetLogLevel(),
Initialize(),
SetUser(),
// UI related features
Text("UI:"),
SetupUI(),
ShowHideNotice(),
ShowHidePreferences(),
// Consents
Text("Consents:"),
CheckConsent(),
Reset(),
SetUserAgreeToAll(),
SetUserDisagreeToAll(),
SetUserStatus(),
SetUserStatusGlobally(),
// Get user status
GetUserStatusPurposes(),
GetUserStatusVendors(),
GetUserStatusOtherInfo(),
// Get current user status
GetCurrentUserStatusPurposes(),
GetCurrentUserStatusVendors(),
GetCurrentUserStatusOtherInfo(),
// Applicable regulation
GetApplicableRegulation(),
// Purposes
Text("Purposes:"),
GetRequiredPurposeIds(),
GetRequiredPurposes(),
GetPurpose(),
// Vendors
Text("Vendors:"),
GetRequiredVendorIds(),
GetRequiredVendors(),
GetVendor(),
GetVendorCount(),
// Languages,
Text("Languages:"),
UpdateSelectedLanguage(),
GetText(),
GetTranslatedText(),
// Webviews
Text("Webviews:"),
WebviewStrings(),
// Events
SdkEventsLogger(_sdkEvents, eventsHelper),
// Transactions
Text("Transactions:"),
EnablePurposeTransaction(),
DisablePurposeTransaction(),
EnablePurposesTransaction(),
DisablePurposesTransaction()
],
),
),
),
)
);
}
}
更多关于Flutter隐私管理插件didomi_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter隐私管理插件didomi_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用didomi_sdk
插件进行隐私管理的代码案例。这个插件允许你集成Didomi的CMP(Consent Management Platform)来管理用户的隐私同意。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加didomi_sdk
的依赖:
dependencies:
flutter:
sdk: flutter
didomi_sdk: ^最新版本号 # 请替换为最新的版本号
然后运行flutter pub get
来安装依赖。
2. 配置插件
在Flutter项目的main.dart
文件中,进行必要的初始化配置。这里假设你已经有了Didomi平台的SDK Key和Host。
import 'package:flutter/material.dart';
import 'package:didomi_sdk/didomi_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
// 初始化Didomi SDK
initDidomiSDK();
}
void initDidomiSDK() async {
// 替换为你在Didomi平台上获取的SDK Key和Host
final String sdkKey = 'your_sdk_key';
final String host = 'your_host';
// 初始化Didomi SDK
await DidomiSdk.init(
sdkKey: sdkKey,
host: host,
listener: (DidomiEvent event) {
// 处理事件回调,例如用户同意状态改变
if (event.type == DidomiEventType.consentChanged) {
print('User consent has changed: ${event.data}');
}
},
);
// 显示CMP界面
DidomiSdk.showNotice();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Didomi SDK Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 获取用户同意状态
DidomiSdk.getConsents().then((consents) {
print('User consents: $consents');
});
// 显示CMP界面
DidomiSdk.showCmp();
},
child: Text('Show CMP and Get Consents'),
),
),
),
);
}
}
3. 处理用户同意状态
在上面的代码中,我们通过DidomiSdk.getConsents()
方法来获取用户的同意状态,并在用户同意状态改变时通过监听器进行处理。
4. 显示CMP界面
你可以通过调用DidomiSdk.showCmp()
方法来显示CMP界面,让用户能够管理他们的隐私偏好。
5. 运行项目
确保你已经正确配置了Didomi的SDK Key和Host,然后运行你的Flutter项目。你应该能够看到一个按钮,点击后显示CMP界面,并可以在控制台中看到用户同意状态的改变。
这个代码案例提供了一个基本的集成流程,实际应用中你可能需要根据具体需求进行更多的配置和处理。例如,处理特定目的的同意状态、根据用户同意状态调整应用功能等。请参考Didomi的官方文档以获取更多详细信息和高级用法。