Flutter元数据管理插件flutter_meta_sdk的使用

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

Flutter元数据管理插件flutter_meta_sdk的使用

Flutter Meta SDK

GitHub code size GitHub followers GitHub contributors Linkedin LinkedIn GitHub GitHub

flutter_meta_sdk 插件允许Flutter与原生Meta SDK集成。该插件是使用最新的SDK创建,以支持iOS 14,并且目前支持iOS和Android的应用事件和深度链接。

设置环境

首先,如果您还没有,请先在Facebook开发者平台创建一个应用:Facebook Developers

  1. 获取您的应用ID(下文称为 [APP_ID]
  2. 获取您的客户端令牌(下文称为 [CLIENT_TOKEN])。请参阅 Facebook Doc: Client Tokens 了解更多信息及获取方法。

iOS设置

更多详细信息请参见 Facebook SDK官方文档 阅读 Getting Started with App Events for iOS 教程,特别是按照 step 5 的指导,在 info.plist 中添加以下内容:

如果代码中没有 CFBundleURLTypes,请在最后一个 </dict> 元素之前添加以下内容:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>fb[APP_ID]</string>
    </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>[APP_ID]</string>
<key>FacebookClientToken</key>
<string>[CLIENT_TOKEN]</string>
<key>FacebookDisplayName</key>
<string>[APP_NAME]</string>

如果代码中已经包含 CFBundleURLTypes,则插入以下内容:

<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>fb[APP_ID]</string>
    </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>[APP_ID]</string>
<key>FacebookClientToken</key>
<string>[CLIENT_TOKEN]</string>
<key>FacebookDisplayName</key>
<string>[APP_NAME]</string>

Android设置

更多详细信息请参见 Facebook SDK官方文档 阅读 Getting Started with App Events for Android 教程,特别是按照 step 3 的指导,在 /app/res/values/strings.xml(或相应的 debugrelease 构建变体)中添加以下内容:

<string name="facebook_app_id">[APP_ID]</string>
<string name="facebook_client_token">[CLIENT_TOKEN]</string>

之后,在主 AndroidManifest.xml 文件中的 <application> 标签下直接添加这些字符串资源引用。

<application android:label="@string/app_name" ...>
    ...
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
    ...
</application>

关于Flutter Meta SDK

请参考官方SDK文档,了解更多关于Facebook App Events的行为:

如果您发现任何不符合官方文档的行为,请 报告问题

参与其中

感谢您考虑参与本项目。您是一个真正的超级明星 ⭐ ,我们 ❤️ 您!

报告错误和问题

使用配置好的 Github issue report template 报告问题。确保客观、详尽地陈述您的观察和期望,以便我们能够理解您的需求并进行故障排除。

讨论和想法

我们很高兴在 repository discussions 和/或在 StackOverflow 上讨论和交流想法。如果您有关于如何使用Facebook SDK作为报告工具本身或如何使用此插件的问题,请随时开启一个讨论线程。

示例代码

下面是一个简单的示例,展示了如何在Flutter应用中使用 flutter_meta_sdk 插件。

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  static final metaSdk = FlutterMetaSdk();

  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              FutureBuilder(
                future: metaSdk.getAnonymousId(),
                builder: (context, snapshot) {
                  final id = snapshot.data ?? '???';
                  return Text('Anonymous ID: $id');
                },
              ),
              MaterialButton(
                child: const Text("Click me!"),
                onPressed: () {
                  metaSdk.logEvent(
                    name: 'button_clicked',
                    parameters: {
                      'button_id': 'the_clickme_button',
                    },
                  );
                },
              ),
              MaterialButton(
                child: const Text("Set user data"),
                onPressed: () {
                  metaSdk.setUserData(
                    email: 'opensource@oddbit.id',
                    firstName: 'Oddbit',
                    dateOfBirth: '2019-10-19',
                    city: 'Denpasar',
                    country: 'Indonesia',
                  );
                },
              ),
              MaterialButton(
                child: const Text("Test logAddToCart"),
                onPressed: () {
                  metaSdk.logAddToCart(
                    id: '1',
                    type: 'product',
                    price: 99.0,
                    currency: 'TRY',
                  );
                },
              ),
              MaterialButton(
                child: const Text("Test purchase!"),
                onPressed: () {
                  metaSdk.logPurchase(amount: 1, currency: "USD");
                },
              ),
              MaterialButton(
                child: const Text("Enable advertise tracking!"),
                onPressed: () {
                  metaSdk.setAdvertiserTracking(enabled: true);
                },
              ),
              MaterialButton(
                child: const Text("Disabled advertise tracking!"),
                onPressed: () {
                  metaSdk.setAdvertiserTracking(enabled: false);
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

这个示例展示了如何在Flutter应用中集成 flutter_meta_sdk 插件,包括记录匿名ID、自定义事件、用户数据、购物车事件以及广告跟踪等功能。希望这对您有所帮助!


更多关于Flutter元数据管理插件flutter_meta_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter元数据管理插件flutter_meta_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用flutter_meta_sdk插件进行元数据管理的示例代码。请注意,由于flutter_meta_sdk并非一个广泛认知的标准Flutter插件(可能是某个特定项目或组织内部的插件),我将提供一个假设性的实现示例,以展示如何在Flutter中管理元数据。

假设flutter_meta_sdk提供了以下功能:

  1. 读取元数据
  2. 保存元数据
  3. 更新元数据

首先,确保你已经在pubspec.yaml文件中添加了flutter_meta_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_meta_sdk: ^x.y.z  # 替换为实际版本号

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

接下来,在你的Flutter项目中,你可以这样使用flutter_meta_sdk

import 'package:flutter/material.dart';
import 'package:flutter_meta_sdk/flutter_meta_sdk.dart';  // 假设的导入路径

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

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

class MetaDataManager extends StatefulWidget {
  @override
  _MetaDataManagerState createState() => _MetaDataManagerState();
}

class _MetaDataManagerState extends State<MetaDataManager> {
  final MetaDataService _metaDataService = MetaDataService();
  String? _metaData;

  @override
  void initState() {
    super.initState();
    _loadMetaData();
  }

  Future<void> _loadMetaData() async {
    try {
      String metaData = await _metaDataService.readMetaData();
      setState(() {
        _metaData = metaData;
      });
    } catch (e) {
      print('Error loading meta data: $e');
    }
  }

  Future<void> _saveMetaData(String metaData) async {
    try {
      await _metaDataService.saveMetaData(metaData);
      setState(() {
        _metaData = metaData;
      });
      print('Meta data saved successfully');
    } catch (e) {
      print('Error saving meta data: $e');
    }
  }

  Future<void> _updateMetaData(String metaData) async {
    try {
      await _metaDataService.updateMetaData(metaData);
      setState(() {
        _metaData = metaData;
      });
      print('Meta data updated successfully');
    } catch (e) {
      print('Error updating meta data: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Meta Data Manager'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Current Meta Data:', style: TextStyle(fontSize: 18)),
            SizedBox(height: 8),
            TextField(
              value: _metaData ?? '',
              onChanged: (value) {
                // Handle text changes if needed
              },
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Enter Meta Data',
              ),
            ),
            SizedBox(height: 24),
            ElevatedButton(
              onPressed: () async {
                if (_metaData != null) {
                  await _updateMetaData(_metaData!);
                } else {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Meta data cannot be empty')),
                  );
                }
              },
              child: Text('Update Meta Data'),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                final TextEditingController controller = TextEditingController();
                final TextFormField textField = TextFormField(
                  controller: controller,
                  decoration: InputDecoration(labelText: 'Enter new Meta Data'),
                );

                // Show a dialog to enter new meta data
                await showDialog(
                  context: context,
                  builder: (context) {
                    return AlertDialog(
                      title: Text('Save New Meta Data'),
                      content: textField,
                      actions: <Widget>[
                        TextButton(
                          onPressed: () => Navigator.of(context).pop(),
                          child: Text('Cancel'),
                        ),
                        TextButton(
                          onPressed: async () async {
                            String newData = controller.text;
                            await _saveMetaData(newData);
                            Navigator.of(context).pop();
                          },
                          child: Text('Save'),
                        ),
                      ],
                    );
                  },
                );
              },
              child: Text('Save New Meta Data'),
            ),
          ],
        ),
      ),
    );
  }
}

// 假设的 MetaDataService 类,用于与 flutter_meta_sdk 交互
class MetaDataService {
  // 读取元数据
  Future<String> readMetaData() async {
    // 这里应该是调用 flutter_meta_sdk 提供的读取方法
    // 例如:return await FlutterMetaSdk.instance.readMetaData();
    return "Sample MetaData";  // 示例返回值
  }

  // 保存元数据
  Future<void> saveMetaData(String metaData) async {
    // 这里应该是调用 flutter_meta_sdk 提供的保存方法
    // 例如:await FlutterMetaSdk.instance.saveMetaData(metaData);
    print('Pretending to save: $metaData');  // 示例打印
  }

  // 更新元数据
  Future<void> updateMetaData(String metaData) async {
    // 这里应该是调用 flutter_meta_sdk 提供的更新方法
    // 例如:await FlutterMetaSdk.instance.updateMetaData(metaData);
    print('Pretending to update: $metaData');  // 示例打印
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它展示了如何使用一个假设的MetaDataService类(该类应该与flutter_meta_sdk的实际API进行交互)来读取、保存和更新元数据。由于flutter_meta_sdk的具体API未知,我使用了占位符方法和打印语句来模拟这些操作。你需要根据flutter_meta_sdk的实际文档和API来调整这些方法的实现。

回到顶部