Flutter隐私合规插件onetrust_publishers_native_cmp的使用
Flutter隐私合规插件onetrust_publishers_native_cmp的使用
简介
onetrust_publishers_native_cmp
是一个Flutter插件,用于将OneTrust的原生CMP(Consent Management Platform)平台集成到您的Flutter项目中。通过该插件,您可以轻松管理用户的隐私偏好和同意状态,确保您的应用符合GDPR、CCPA等隐私法规。
安装与配置
为了安装和配置 onetrust_publishers_native_cmp
插件,请按照以下步骤操作:
-
添加依赖:在
pubspec.yaml
文件中添加onetrust_publishers_native_cmp
作为依赖项。dependencies: onetrust_publishers_native_cmp: ^最新版本号
-
配置iOS和Android项目:
- iOS:确保在
ios/Runner/Info.plist
中添加必要的权限请求。 - Android:确保在
android/app/build.gradle
中配置正确的SDK版本,并在AndroidManifest.xml
中添加必要的权限。
- iOS:确保在
-
初始化SDK:在Flutter代码中初始化OneTrust SDK,并根据需要显示横幅或用户偏好中心。
示例代码
以下是一个完整的示例代码,展示了如何使用 onetrust_publishers_native_cmp
插件来初始化SDK、监听用户同意变化、显示横幅和用户偏好中心等。
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:io' show Platform;
import 'package:flutter/services.dart';
import 'package:onetrust_publishers_native_cmp/onetrust_publishers_native_cmp.dart';
void main() {
runApp(const MaterialApp(title: "OneTrust Flutter Demo", home: HomePage()));
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
[@override](/user/override)
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String _cmpDownloadStatus = 'Waiting'; // CMP下载状态
int _c0003Status = -1; // C0003类别的同意状态
int _c0004Status = -1; // C0004类别的同意状态
OTATTrackingAuthorizationStatus _attStatus = OTATTrackingAuthorizationStatus.notDetermined; // ATT授权状态
String _dataSubjectId = "Unknown"; // 数据主体标识符
[@override](/user/override)
void initState() {
super.initState();
initOneTrust(); // 初始化OneTrust SDK
startListening(); // 开始监听用户同意变化
}
Future<void> initOneTrust() async {
bool? status;
String appId;
bool? shouldShowBanner;
String? id;
OTATTrackingAuthorizationStatus startupATTStatus;
// 根据平台设置App ID
if (Platform.isAndroid) {
appId = "d572dec8-4990-4452-bcdd-ad94a2f0d827";
} else if (Platform.isIOS) {
appId = "d572dec8-4990-4452-bcdd-ad94a2f0d827";
} else {
throw Exception("Platform not found!");
return;
}
// 加载Android UX参数(可选)
String AndroidUXParams = await DefaultAssetBundle.of(context)
.loadString("assets/AndroidUXParams.json");
// 设置启动参数
Map<String, String> params = {
"countryCode": "US",
"regionCode": "GA"
// "androidUXParams": AndroidUXParams
};
try {
// 启动SDK
status = await OTPublishersNativeSDK.startSDK("qa", appId, "en", params);
shouldShowBanner = await OTPublishersNativeSDK.shouldShowBanner();
id = await OTPublishersNativeSDK.getCurrentActiveProfile();
} on PlatformException {
print("Error communicating with platform code");
}
// 获取ATT授权状态
startupATTStatus = await OTPublishersNativeSDK.getATTrackingAuthorizationStatus();
// 如果SDK启动成功且需要显示横幅,则显示横幅
if (status! && shouldShowBanner!) {
OTPublishersNativeSDK.showBannerUI();
}
if (!mounted) return;
// 更新UI状态
setState(() {
_cmpDownloadStatus = status ? 'Success!' : 'Error';
_dataSubjectId = id!;
_attStatus = startupATTStatus;
});
}
void startListening() {
// 监听特定类别的同意变化
var consentListener = OTPublishersNativeSDK.listenForConsentChanges(["C0003", "C0004"])
.listen((event) {
setCategoryState(event['categoryId'], event['consentStatus']);
print("New status for ${event['categoryId']} is ${event['consentStatus']}");
});
// 监听UI交互事件
var interactionListener = OTPublishersNativeSDK.listenForUIInteractions().listen((event) {
print(event);
});
// consentListener.cancel(); // 取消事件流前打开新的事件流
}
void setCategoryState(String category, int status) {
setState(() {
switch (category) {
case "C0003":
_c0003Status = status;
break;
case "C0004":
_c0004Status = status;
break;
default:
break;
}
});
}
void loadATTPrompt() async {
int? status;
// 显示ATT授权提示
status = await OTPublishersNativeSDK.showConsentUI(OTDevicePermission.idfa);
if (status != null) {
setState(() {
_attStatus = OTATTrackingAuthorizationStatus.values[status!];
});
}
}
void loadAgeGatePrompt() async {
// 显示年龄门提示
int? status = await OTPublishersNativeSDK.showConsentUI(OTDevicePermission.ageGate);
print("Age Gate Status is $status");
}
Column getATTColumn() {
return Column(
children: [
ElevatedButton(
onPressed: () {
loadATTPrompt();
},
child: Text("Load ATT Prompt")),
Text("ATT Status = $_attStatus\n")
],
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Home'),
),
body: Center(
child: Column(
children: [
Text('OneTrust Download Status: $_cmpDownloadStatus\n'),
ElevatedButton(
onPressed: () {
OTPublishersNativeSDK.showBannerUI();
},
child: Text("Load Banner")),
ElevatedButton(
onPressed: () {
OTPublishersNativeSDK.showPreferenceCenterUI();
},
child: Text("Load Preference Center")),
ElevatedButton(
onPressed: () {
OTPublishersNativeSDK.clearOTSDKData();
},
child: Text("Clear OneTrust SDK Data")),
ElevatedButton(
onPressed: () {
OTPublishersNativeSDK.showUCPurposesUI();
},
child: Text("Load UC Purposes")),
ElevatedButton(
onPressed: () {
loadAgeGatePrompt();
},
child: Text("Load Age Gate")),
Platform.isIOS // 条件渲染ATT预提示按钮
? getATTColumn()
: Container(),
Text('Category C0003 Status: $_c0003Status\n'),
Text('Category C0004 Status: $_c0004Status\n'),
Text('Data Subject Identifier is'),
Text(_dataSubjectId, style: TextStyle(fontWeight: FontWeight.bold)),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const EvenMore()),
);
},
child: Text("More")),
],
),
),
);
}
}
更多关于Flutter隐私合规插件onetrust_publishers_native_cmp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter隐私合规插件onetrust_publishers_native_cmp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成OneTrust的隐私合规插件onetrust_publishers_native_cmp
可以帮助你实现对用户隐私的合规管理。以下是一个基本的代码案例,展示了如何集成和使用这个插件。
1. 添加依赖
首先,你需要在你的pubspec.yaml
文件中添加onetrust_publishers_native_cmp
依赖。
dependencies:
flutter:
sdk: flutter
onetrust_publishers_native_cmp: ^最新版本号 # 替换为实际的最新版本号
2. 导入插件
在你的Flutter项目的Dart文件中,导入onetrust_publishers_native_cmp
插件。
import 'package:onetrust_publishers_native_cmp/onetrust_publishers_native_cmp.dart';
3. 初始化插件
在应用的入口文件(通常是main.dart
)中初始化插件。
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化OneTrust插件
OneTrustPublishersNativeCmp.initialize(
configuration: OneTrustConfiguration(
cmpAppId: '你的CMP App ID', // 替换为你的CMP App ID
cmpHostUrl: '你的CMP Host URL', // 替换为你的CMP Host URL
// 其他可选配置参数
),
listener: (OneTrustEvent event) {
// 处理OneTrust事件,比如用户同意或拒绝隐私政策
if (event is OneTrustUserAction) {
OneTrustUserAction userAction = event;
print('用户操作: ${userAction.action}, 同意状态: ${userAction.consents.toString()}');
}
},
);
runApp(MyApp());
}
4. 显示隐私合规界面
在你的UI中,可以添加一个按钮来触发显示隐私合规界面。
import 'package:flutter/material.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('OneTrust 隐私合规示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 显示隐私合规界面
OneTrustPublishersNativeCmp.showCMP();
},
child: Text('显示隐私合规界面'),
),
),
),
);
}
}
5. 处理用户同意状态
你可以通过监听插件的事件来获取用户的同意状态,并在应用中进行相应的处理。例如,在初始化插件时,我们已经添加了一个事件监听器来处理OneTrustUserAction
事件。
6. 清理资源(可选)
如果你的应用在后台运行一段时间后会被系统回收,你可以在适当的时机调用清理方法(如果插件提供了这样的方法)。不过,对于大多数情况,这个步骤是可选的。
注意事项
- 确保你已经在OneTrust平台上配置了你的应用,并获取了
CMP App ID
和CMP Host URL
。 - 根据你的具体需求,你可能需要调整插件的配置参数和事件处理逻辑。
- 插件的具体API和配置可能会随着版本更新而发生变化,请参考官方文档以获取最新信息。
以上代码提供了一个基本的集成和使用onetrust_publishers_native_cmp
插件的示例。根据你的实际需求,你可能需要进行进一步的定制和扩展。