Flutter GDPR合规广告插件gdpr_admob的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter GDPR合规广告插件 gdpr_admob 的使用

本指南提供了如何在Flutter应用程序中使用gdpr_admob包的基本理解。

介绍

gdpr_admob包帮助你在欧洲经济区(EEA)内的用户显示GDPR同意表单,并根据用户的同意初始化Google Mobile Ads。本指南解释了如何在你的Flutter应用中设置它。

First release of gdpr_admob package

步骤指南

1. 添加依赖项

将以下依赖项添加到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  google_mobile_ads: ^5.2.0
  gdpr_admob: ^1.0.3

2. 导入包

在你的Dart文件中导入所需的包:

import 'package:flutter/material.dart';
import 'package:gdpr_admob/gdpr_admob.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

3. 初始化GDPR

在你的StatefulWidget中,创建一个GdprAdmob实例并定义一个方法来初始化它。此方法将为用户设置GDPR同意状态。

final GdprAdmob gdprAdmob = GdprAdmob();
bool _isLoading = false;
String? _errorMessage;
String? _consentStatus;

Future<void> _initializeGdpr() async {
  setState(() {
    _isLoading = true;
  });

  final error = await gdprAdmob.initialize(
    mode: DebugGeography.debugGeographyEea,
    testIdentifiers: ["WRITE_YOUR_TEST_DEVICE_IDENTIFIERS"],
  );

  if (error != null) {
    setState(() {
      _errorMessage = error.message;
    });
  }

  setState(() {
    getStatus();
    _isLoading = false;
  });
}

4. 获取同意状态

定义另一个方法来获取当前用户的同意状态。

getStatus() async {
  final status = await gdprAdmob.getConsentStatus();
  setState(() {
    _consentStatus = status;
  });
}

5. 显示GDPR对话框

现在你可以在你的小部件树中使用这些方法来显示GDPR对话框并获取同意状态。你也可以使用resetConsentStatus方法重置同意状态。

ElevatedButton(
  onPressed: _initializeGdpr,
  child: const Text("Show GDPR dialog"),
),
ElevatedButton(
  onPressed: () async {
    await gdprAdmob.resetConsentStatus();
    getStatus();
  },
  child: const Text("Reset the consent state"),
),
if (_consentStatus != null)
  Text('Consent Status: $_consentStatus'),
if (_errorMessage != null) Text('Error: $_errorMessage'),

完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中集成gdpr_admob包。

import 'package:flutter/material.dart';
import 'package:gdpr_admob/gdpr_admob.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter GDPR dialog',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GdprAdmob gdprAdmob = GdprAdmob();
  bool _isLoading = false;
  String? _errorMessage;
  String? _consentStatus;

  Future<void> _initializeGdpr() async {
    setState(() {
      _isLoading = true;
    });

    final error = await gdprAdmob.initialize(
      mode: DebugGeography.debugGeographyEea,
      testIdentifiers: ["WRITE_YOUR_TEST_DEVICE_IDENTIFIERS"],
    );

    if (error != null) {
      setState(() {
        _errorMessage = error.message;
      });
    }

    setState(() {
      getStatus();
      _isLoading = false;
    });
  }

  getStatus() async {
    final status = await gdprAdmob.getConsentStatus();
    setState(() {
      _consentStatus = status;
    });
  }

  [@override](/user/override)
  void initState() {
    getStatus();
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text("Flutter GDPR dialog"),
      ),
      body: Center(
        child: _isLoading
            ? const CircularProgressIndicator()
            : Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  if (_consentStatus != "obtained")
                    ElevatedButton(
                      onPressed: _initializeGdpr,
                      child: const Text("Show GDPR dialog"),
                    ),
                  ElevatedButton(
                    onPressed: () async {
                      await gdprAdmob.resetConsentStatus();
                      getStatus();
                    },
                    child: const Text("Reset the consent state"),
                  ),
                  if (_consentStatus != null)
                    Text('Consent Status: $_consentStatus'),
                  if (_errorMessage != null) Text('Error: $_errorMessage'),
                ],
              ),
      ),
    );
  }
}

更多关于Flutter GDPR合规广告插件gdpr_admob的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GDPR合规广告插件gdpr_admob的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中集成和使用gdpr_admob插件以实现GDPR合规性广告的一个示例。这个插件允许你根据用户的GDPR同意状态来控制AdMob广告的显示。

首先,确保你的Flutter环境已经设置好,并且你的项目已经创建。然后,按照以下步骤操作:

1. 添加依赖

在你的pubspec.yaml文件中添加gdpr_admobfirebase_admob依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_admob: ^x.y.z  # 请替换为最新版本号
  gdpr_admob: ^a.b.c      # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 配置Firebase AdMob

前往Firebase控制台,创建一个新的AdMob应用,并获取你的app_id和广告单元ID(例如banner_ad_unit_id)。

3. 在android/app/build.gradle中添加配置

确保你的Android项目配置中包含Firebase AdMob所需的配置:

android {
    ...
    defaultConfig {
        ...
        applicationId "com.example.yourapp" // 替换为你的应用ID
        manifestPlaceholders = [
                'manifest.applicationId': applicationId,
                'admob_app_id': "ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx" // 替换为你的app_id
        ]
    }
}

4. 在ios/Runner/Info.plist中添加配置

对于iOS,你需要在Info.plist中添加AdMob的GADApplicationIdentifier

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx</string> <!-- 替换为你的app_id -->

5. 初始化Firebase AdMob和GDPR合规性

在你的Flutter应用的main.dart文件中,初始化Firebase AdMob和gdpr_admob插件:

import 'package:flutter/material.dart';
import 'package:firebase_admob/firebase_admob.dart';
import 'package:gdpr_admob/gdpr_admob.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化Firebase AdMob
  MobileAds.instance.initialize();

  // 创建BannerAd实例
  final BannerAd myBanner = BannerAd(
    adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx', // 替换为你的banner_ad_unit_id
    size: AdSize.banner,
    listener: (MobileAdEvent event) {
      print("BannerAd event is $event");
    },
  );

  // 创建GDPRAdMob实例
  final GDPRAdMob gdprAdMob = GDPRAdMob();

  runApp(MyApp(myBanner, gdprAdMob));
}

class MyApp extends StatefulWidget {
  final BannerAd bannerAd;
  final GDPRAdMob gdprAdMob;

  MyApp(this.bannerAd, this.gdprAdMob);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isGDPRAccepted = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GDPR AdMob Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () {
                  setState(() {
                    isGDPRAccepted = !isGDPRAccepted;

                    // 根据GDPR同意状态显示或隐藏广告
                    if (isGDPRAccepted) {
                      widget.bannerAd.load();
                      widget.bannerAd.show(
                        anchorType: AnchorType.bottom,
                      );
                    } else {
                      widget.bannerAd.dispose();
                    }

                    // 更新GDPR状态
                    widget.gdprAdMob.setGDPRConsent(isGDPRAccepted);
                  });
                },
                child: Text('Accept GDPR: $isGDPRAccepted'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    widget.bannerAd.dispose();
    super.dispose();
  }
}

6. 运行应用

现在你可以运行你的Flutter应用,并通过点击按钮来接受或拒绝GDPR同意。根据用户的同意状态,广告将显示或隐藏。

这个示例展示了如何使用gdpr_admob插件来根据用户的GDPR同意状态控制AdMob广告的显示。确保在实际应用中处理更多的边缘情况和错误处理,以提高用户体验和应用的稳定性。

回到顶部