Flutter Firebase应用安装跟踪插件firebase_app_installations的使用

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

Flutter Firebase应用安装跟踪插件firebase_app_installations的使用

Firebase Installations Plugin for Flutter

这是一个用于Flutter的插件,它允许你使用Firebase Installations API。该插件当前版本可以在pub.dev上查看。

Getting Started

开始使用Firebase Installations for Flutter,请参考官方文档进行设置。

Usage 示例

下面是一个完整的示例demo,演示了如何使用firebase_app_installations插件来获取和管理Firebase Installation ID和Auth Token。

代码实现

// Copyright 2023, the Chromium project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:developer';

import 'package:firebase_app_installations/firebase_app_installations.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

import 'firebase_options.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );

  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(primarySwatch: Colors.amber),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Firebase Installations'),
        ),
        body: const InstallationsCard(),
      ),
    );
  }
}

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

  @override
  State<InstallationsCard> createState() => _InstallationsCardState();
}

class _InstallationsCardState extends State<InstallationsCard> {
  String id = 'None';
  String authToken = 'None';

  @override
  void initState() {
    super.initState();
    init();

    // 监听ID变化
    FirebaseInstallations.instance.onIdChange.listen((event) {
      setState(() {
        id = event;
      });

      // 确保在Installation Id更新后刷新Auth Token
      getAuthToken();

      // 忽略:同步使用build_context
      ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
        content: Text('New Firebase Installations Id generated 🎉'),
        backgroundColor: Colors.green,
      ));
    }).onError((error) {
      log("$error");
    });
  }

  Future<void> init() async {
    await getId();
    await getAuthToken();
  }

  Future<void> deleteId() async {
    try {
      await FirebaseInstallations.instance.delete();

      setState(() {
        id = 'None';
      });
    } catch (e) {
      log('$e');
    }
  }

  Future<void> getId() async {
    try {
      final newId = await FirebaseInstallations.instance.getId();

      setState(() {
        id = newId;
      });
    } catch (e) {
      log('$e');
    }
  }

  Future<void> getAuthToken([forceRefresh = false]) async {
    try {
      final token = await FirebaseInstallations.instance.getToken(forceRefresh);
      setState(() {
        authToken = token;
      });
    } catch (e) {
      log('$e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Center(
        child: ConstrainedBox(
          constraints: const BoxConstraints(maxWidth: 500),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              SizedBox(
                width: double.infinity,
                child: Card(
                  margin: EdgeInsets.zero,
                  child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Column(
                      children: [
                        Row(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            const Expanded(
                              child: Text("Installation Id: "),
                            ),
                            Expanded(
                              flex: 2,
                              child: Text(id),
                            ),
                          ],
                        ),
                        Row(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            const Expanded(
                              child: Text("Auth Token: "),
                            ),
                            Expanded(
                              flex: 2,
                              child: Text(authToken),
                            ),
                          ],
                        ),
                      ],
                    ),
                  ),
                ),
              ),
              const SizedBox(height: 20),
              SizedBox(
                width: double.infinity,
                child: ElevatedButton(
                  onPressed: () => getAuthToken(true),
                  child: const Text("Force update token"),
                ),
              ),
              const SizedBox(height: 20),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  Expanded(
                    child: ElevatedButton(
                      onPressed: deleteId,
                      child: const Text("Delete ID"),
                    ),
                  ),
                  const SizedBox(width: 20),
                  Expanded(
                    child: ElevatedButton(
                      onPressed: getId,
                      child: const Text("Get ID"),
                    ),
                  )
                ],
              )
            ],
          ),
        ),
      ),
    );
  }
}

Issues and feedback

如果你遇到了与FlutterFire相关的问题、错误或有功能请求,请在我们的issue tracker中提交。

对于非FlutterFire特定的插件问题,可以在Flutter issue tracker中提交。

如果你想为这个插件贡献代码,请查看我们的contribution guide,并打开一个pull request

希望这个帖子能帮助你了解如何在Flutter项目中使用firebase_app_installations插件。如果有任何问题或需要进一步的帮助,请随时提问!


更多关于Flutter Firebase应用安装跟踪插件firebase_app_installations的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Firebase应用安装跟踪插件firebase_app_installations的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用firebase_app_installations插件来跟踪应用安装的示例代码。firebase_app_installations插件允许你获取Firebase应用安装的唯一标识符,这对于安装跟踪和用户行为分析非常有用。

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

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^x.y.z  # 请替换为最新版本号
  firebase_app_installations: ^x.y.z  # 请替换为最新版本号

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

接下来,你需要配置Firebase项目。确保你的Flutter应用已经在Firebase控制台中注册,并下载了google-services.json文件(对于Android)和GoogleService-Info.plist文件(对于iOS),并将它们放置在项目的android/app/ios/Runner/目录下。

在你的Flutter应用中,你可以使用以下代码来获取Firebase应用安装标识符:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_app_installations/firebase_app_installations.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化Firebase应用
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String installationId = '';

  @override
  void initState() {
    super.initState();
    // 获取Firebase应用安装标识符
    _getInstallationId();
  }

  Future<void> _getInstallationId() async {
    try {
      final Installation installation = await FirebaseAppInstallations.instance.getId();
      setState(() {
        installationId = installation.id;
      });
      print('Firebase Installation ID: ${installation.id}');
    } catch (e) {
      print('Error getting Firebase Installation ID: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase App Installations Example'),
        ),
        body: Center(
          child: Text('Firebase Installation ID: $installationId'),
        ),
      ),
    );
  }
}

在上面的代码中,我们首先初始化了Firebase应用,然后在_MyAppState类的initState方法中调用_getInstallationId函数来获取Firebase应用安装标识符。获取到的标识符会被保存在installationId变量中,并在UI中显示。

注意:

  1. FirebaseAppInstallations.instance.getId()方法返回一个包含安装ID的Installation对象。
  2. 在实际使用中,你可能会希望将这个安装ID发送到你的后端服务器进行进一步的处理和分析。
  3. 请确保你的Firebase项目配置正确,并且Flutter应用具有访问Firebase服务的权限。

这样,你就可以在Flutter应用中使用firebase_app_installations插件来跟踪应用安装了。

回到顶部