Flutter隐私管理插件didomi_sdk的使用

Flutter隐私管理插件didomi_sdk的使用

Didomi Flutter Plugin

Didomi 是一个领先的合规管理平台,允许公司在 GDPR、CCPA 等数据隐私法规下收集、存储和利用用户同意。 本插件使 Flutter 开发者能够满足合规要求,并优化其在原生移动应用中的同意率和 monetization。

此仓库包含该插件的源代码和示例应用。 该插件使 Flutter 开发者能够在 Android 和 iOS 应用中轻松使用 Didomi 的合规管理平台。

安装

  1. 下载

    • 查看我们的 releases 页面获取最新官方版本的插件。
  2. 文档

  3. 示例应用

    • 克隆此仓库并打开 example/ 文件夹。
  4. 集成测试

    • 所有测试场景位于 example/integration_test/
  5. 使用 Flutter Mobile

    cd ./example
    
    // 单个测试
    flutter test "integration_test/<FILENAME>.dart"
    
    // 批量测试
    flutter test integration_test
    
  6. 使用 Espresso (Android)

    cd ./example/android/
    
    // 单个测试
    ./gradlew app:connectedAndroidTest -Ptarget=`pwd`/../integration_test/<FILENAME>.dart
    
    // 批量测试
    ./gradlew bulk
    
  7. 使用 XCTest (iOS)

    cd ./example/
    
    xcodebuild -workspace ios/Runner.xcworkspace -scheme "RunnerTests" -enableCodeCoverage YES -destination "platform=iOS Simulator,name=iPhone 8,OS=14.5" test
    

提出改进建议

许可证

此插件 发布在 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

1 回复

更多关于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的官方文档以获取更多详细信息和高级用法。

回到顶部