Flutter资金筹集选择插件flutter_funding_choices的使用

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

Flutter资金筹集选择插件flutter_funding_choices的使用

Flutter Funding Choices 是一个非官方的 Flutter 实现,用于 Google 的 Funding Choices 服务,该服务允许请求用户对 AdMob 中的个性化广告进行同意。

前提条件

在使用 flutter_funding_choices 插件之前,你需要将你的 FundingChoices 账户与 Admob 账户链接。可以参考 Google Support 文档

安装

Android

你的应用必须使用 Android Embedding V2。此外,你需要在 AndroidManifest.xml 文件中的 <application> 标签内添加一个应用 ID:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="fr.skyost.example">

   <application>
       <!-- 其他属性 -->
       <meta-data
           android:name="com.google.android.gms.ads.APPLICATION_ID"
           android:value="YOUR-APP-ID"/>
       <!-- 活动等 -->
   </application>

</manifest>

你可以通过遵循 这些说明 获取你的应用 ID。

iOS

你需要在 Info.plist 文件中添加一个应用 ID:

<key>GADApplicationIdentifier</key>
<string>YOUR-APP-ID</string>

你也可以通过遵循 这些说明 获取你的应用 ID。你可能还需要处理 Apple 的 App Tracking Transparency 消息,方法是在 Info.plist 中添加以下内容:

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

你可以根据需要配置消息内容。

如何使用

有三种主要方法:

  • FlutterFundingChoices.requestConsentInformation():获取当前用户的同意信息(是否需要显示同意表单、用户是否想要个性化广告等)。
  • FlutterFundingChoices.showConsentForm():加载并显示同意表单。首先需要检查是否有可用的同意表单(通过调用上一个方法返回的对象上的 isConsentFormAvailable 方法)。
  • FlutterFundingChoices.reset():重置同意信息。

典型的使用方式如下:

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) async {
    ConsentInformation consentInfo = await FlutterFundingChoices.requestConsentInformation();
    if (consentInfo.isConsentFormAvailable && consentInfo.consentStatus == ConsentStatus.required) {  
      await FlutterFundingChoices.showConsentForm();
      // 你可以通过再次调用 `FlutterFundingChoices.requestConsentInformation()` 来检查结果!
    }
  });
}

示例代码

下面是一个完整的示例 demo,展示如何在 Flutter 应用中使用 flutter_funding_choices 插件:

import 'package:flutter/material.dart';
import 'package:flutter_funding_choices/flutter_funding_choices.dart';

/// Hello world !
void main() {
  runApp(_ExampleApp());
}

/// 我们的主部件
class _ExampleApp extends StatefulWidget {
  @override
  _ExampleAppState createState() => _ExampleAppState();
}

/// 我们主部件的状态
class _ExampleAppState extends State<_ExampleApp> {
  bool consentInfoRetrieved = false;

  /// 当前的同意信息
  late ConsentInformation consentInfo;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      await refreshConsentInfo();
    });
  }

  @override
  Widget build(BuildContext context) => MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('Flutter Funding Choices'),
          ),
          body: !consentInfoRetrieved
              ? const Center(
                  child: CircularProgressIndicator(),
                )
              : Padding(
                  padding: const EdgeInsets.all(40),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: buildChildren(),
                  ),
                ),
        ),
      );

  /// 构建列子部件
  List<Widget> buildChildren() => [
        Text(
          '同意状态 : $consentStatusString.',
          textAlign: TextAlign.center,
        ),
        Text(
          '是否有同意表单可用?' + (consentInfo.isConsentFormAvailable ? '是' : '否') + '.',
          textAlign: TextAlign.center,
        ),
        if (consentInfo.isConsentFormAvailable && consentInfo.consentStatus == ConsentStatus.required)
          ElevatedButton(
            child: const Text('显示同意表单'),
            onPressed: () async {
              await FlutterFundingChoices.showConsentForm();
              await refreshConsentInfo();
            },
          ),
        ElevatedButton(
          child: const Text('重置'),
          onPressed: () async {
            await FlutterFundingChoices.reset();
            await refreshConsentInfo();
          },
        ),
      ];

  /// 刷新当前的同意信息
  Future<void> refreshConsentInfo() async {
    ConsentInformation consentInfo = await FlutterFundingChoices.requestConsentInformation();
    setState(() {
      consentInfoRetrieved = true;
      this.consentInfo = consentInfo;
    });
  }

  /// 将同意状态转换为可读字符串
  String get consentStatusString {
    if (consentInfo.consentStatus == ConsentStatus.obtained) {
      return '已获得';
    }
    if (consentInfo.consentStatus == ConsentStatus.notRequired) {
      return '不需要';
    }
    if (consentInfo.consentStatus == ConsentStatus.required) {
      return '需要';
    }
    return '未知';
  }
}

这个示例展示了如何初始化、刷新和显示用户同意信息,并提供了相应的按钮来显示同意表单或重置同意信息。

贡献

你有很多选项可以为该项目做出贡献!你可以:

  • 在 GitHub 上 Fork 项目。
  • 提交功能请求或错误报告 提交
  • 通过 PayPal 捐赠给开发者。

更多关于Flutter资金筹集选择插件flutter_funding_choices的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter资金筹集选择插件flutter_funding_choices的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_funding_choices插件的一个基本示例。这个插件允许你在应用中展示一个资金筹集选择界面,用户可以选择不同的资助选项,如一次性捐赠、每月捐赠等。

首先,确保你的Flutter项目已经设置好,并且你的pubspec.yaml文件中已经添加了flutter_funding_choices依赖。如果还没有添加,可以按照以下步骤操作:

  1. 打开你的pubspec.yaml文件。
  2. dependencies部分添加flutter_funding_choices
dependencies:
  flutter:
    sdk: flutter
  flutter_funding_choices: ^最新版本号  # 替换为实际的最新版本号
  1. 运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter应用中使用flutter_funding_choices插件。以下是一个简单的示例代码,展示如何集成和使用该插件:

import 'package:flutter/material.dart';
import 'package:flutter_funding_choices/flutter_funding_choices.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Funding Choices Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FundingChoicesScreen(),
    );
  }
}

class FundingChoicesScreen extends StatefulWidget {
  @override
  _FundingChoicesScreenState createState() => _FundingChoicesScreenState();
}

class _FundingChoicesScreenState extends State<FundingChoicesScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Funding Choices Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 显示资金筹集选择界面
            showFundingChoices(
              context: context,
              configuration: FundingChoicesConfiguration(
                // 配置你的资金筹集选项
                apiKey: '你的API_KEY',  // 替换为你的实际API_KEY
                projectId: '你的PROJECT_ID',  // 替换为你的实际PROJECT_ID
                platform: FundingChoicesPlatform.googlePlay,  // 或者 FundingChoicesPlatform.appleAppStore
                customDonationAmountEnabled: true,
                presets: [
                  FundingChoicesPreset.oneTime(amount: 5.0),
                  FundingChoicesPreset.oneTime(amount: 10.0),
                  FundingChoicesPreset.monthly(amount: 3.0),
                ],
              ),
            ).then((result) {
              // 处理用户选择的结果
              if (result != null) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text('用户选择了: ${result.userChoice.description}'),
                  ),
                );
              }
            });
          },
          child: Text('显示资金筹集选择'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,将显示一个资金筹集选择界面。你需要替换apiKeyprojectId为你的实际值。这些值通常是由你选择的资金筹集平台(如Google Play或Apple App Store)提供的。

FundingChoicesConfiguration类允许你配置各种选项,如是否启用自定义捐赠金额、预设的捐赠选项等。用户完成选择后,结果将通过then回调返回,你可以根据需要对结果进行处理。

请注意,为了使用flutter_funding_choices插件,你可能需要在Google Play Console或App Store Connect中设置相关的资金筹集选项,并获取相应的API密钥和项目ID。

此外,确保你已经阅读并遵守了相关平台的条款和政策,以确保你的应用符合其要求。

回到顶部