Flutter Firebase应用内消息插件firebase_in_app_messaging的使用

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

Flutter Firebase应用内消息插件firebase_in_app_messaging的使用

Firebase In-App Messaging Plugin for Flutter

这是一个用于Flutter项目的插件,它允许你使用Firebase In-App Messaging API。要了解更多关于Firebase应用内消息的信息,请访问Firebase官网

pub package

Getting Started

想要开始使用Flutter的Firebase In-App Messaging,请参考官方文档

Usage

为了使用这个插件,你需要遵循Firebase In-App Messaging 使用文档中的步骤。

Issues and feedback

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

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

如果你想为这个插件做出贡献,请查看我们的贡献指南,并打开一个pull request

示例代码

下面是一个完整的示例demo,展示了如何使用firebase_in_app_messaging插件:

// ignore_for_file: require_trailing_commas
// Copyright 2019 The Chromium Authors. 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:async';

import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_in_app_messaging/firebase_in_app_messaging.dart';
import 'package:flutter/material.dart';

import 'firebase_options.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
  static FirebaseInAppMessaging fiam = FirebaseInAppMessaging.instance;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('In-App Messaging example'),
        ),
        body: Builder(
          builder: (BuildContext context) {
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  AnalyticsEventExample(),
                  ProgrammaticTriggersExample(),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

class ProgrammaticTriggersExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(24),
        child: Column(
          children: <Widget>[
            const Text(
              'Programmatic Trigger',
              style: TextStyle(
                fontStyle: FontStyle.italic,
                fontSize: 18,
              ),
            ),
            const SizedBox(height: 8),
            const Text('Manually trigger events programmatically '),
            const SizedBox(height: 8),
            ElevatedButton(
              onPressed: () async {
                await MyApp.fiam.triggerEvent('awesome_event');
                ScaffoldMessenger.of(context).showSnackBar(
                  const SnackBar(
                    content: Text('Triggering event: awesome_event'),
                  ),
                );
              },
              style: ElevatedButton.styleFrom(backgroundColor: Colors.blue),
              child: Text(
                'Programmatic Triggers'.toUpperCase(),
                style: const TextStyle(color: Colors.white),
              ),
            )
          ],
        ),
      ),
    );
  }
}

class AnalyticsEventExample extends StatelessWidget {
  Future<void> _sendAnalyticsEvent() async {
    await MyApp.analytics.logEvent(
      name: 'awesome_event',
      parameters: <String, Object>{
        //'id': 1, // not required?
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(24),
        child: Column(
          children: <Widget>[
            const Text(
              'Log an analytics event',
              style: TextStyle(
                fontStyle: FontStyle.italic,
                fontSize: 18,
              ),
            ),
            const SizedBox(height: 8),
            const Text('Trigger an analytics event'),
            const SizedBox(height: 8),
            ElevatedButton(
              onPressed: () {
                _sendAnalyticsEvent();
                ScaffoldMessenger.of(context).showSnackBar(
                  const SnackBar(
                    content: Text('Firing analytics event: awesome_event'),
                  ),
                );
              },
              style: ElevatedButton.styleFrom(backgroundColor: Colors.blue),
              child: Text(
                'Log event'.toUpperCase(),
                style: const TextStyle(color: Colors.white),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

关键点解释

  1. 初始化Firebase:在main()函数中调用await Firebase.initializeApp()来初始化Firebase。
  2. 创建实例:通过FirebaseAnalytics.instanceFirebaseInAppMessaging.instance分别创建analyticsfiam的实例。
  3. 触发事件:在ProgrammaticTriggersExample类中,有一个按钮,当点击时会触发名为awesome_event的应用内消息事件。
  4. 记录分析事件:在AnalyticsEventExample类中,有一个按钮,当点击时会记录一个名为awesome_event的分析事件。

以上代码展示了如何在Flutter项目中集成和使用firebase_in_app_messaging插件,并提供了一个简单的界面来测试其功能。


更多关于Flutter Firebase应用内消息插件firebase_in_app_messaging的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Firebase应用内消息插件firebase_in_app_messaging的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用firebase_in_app_messaging插件的示例代码。这个插件允许你在应用中集成Firebase应用内消息(In-App Messaging)。

步骤 1:安装依赖

首先,你需要在你的pubspec.yaml文件中添加firebase_in_app_messaging依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.10.0  # 确保安装firebase_core
  firebase_in_app_messaging: ^0.5.0  # 请注意版本号,使用最新的稳定版本

然后运行以下命令来安装依赖:

flutter pub get

步骤 2:配置Firebase

确保你的Firebase项目已经配置好应用内消息功能,并且在Firebase控制台中启用了该功能。然后,将生成的google-services.json文件放置在android/app/目录下。

步骤 3:初始化Firebase

在你的main.dart文件中,初始化Firebase服务。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  await FirebaseInAppMessaging.instance.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase In-App Messaging Example'),
        ),
        body: Center(
          child: Text('Check for In-App Messages!'),
        ),
      ),
    );
  }
}

步骤 4:监听和应用内消息

你可以使用FirebaseInAppMessaging.instance.addMessageListener来监听应用内消息。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  await FirebaseInAppMessaging.instance.initialize();

  FirebaseInAppMessaging.instance.addMessageListener((message) {
    // 在这里处理接收到的消息
    print('Received In-App Message: $message');

    // 你可以根据消息内容更新UI或者执行其他操作
    // 例如,显示一个对话框
    showDialog(
      context: _globalContext!,  // 注意:需要有一个全局的BuildContext变量
      builder: (context) => AlertDialog(
        title: Text('In-App Message'),
        content: Text(message.campaign?.messageBody ?? 'No message body'),
        actions: <Widget>[
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: Text('Close'),
          ),
        ],
      ),
    );
  });

  _globalContext = _createGlobalContext();
  runApp(MyApp());
}

late BuildContext? _globalContext;

BuildContext _createGlobalContext() {
  final widget = ValueKey<String>('global_context_widget');
  return widgetsBinding.rootWidget!.buildScope(widget, (_) => Container());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase In-App Messaging Example'),
        ),
        body: Center(
          child: Text('Check for In-App Messages!'),
        ),
      ),
    );
  }
}

注意事项

  1. 全局上下文:在上面的示例中,我们创建了一个全局的BuildContext变量_globalContext,用于在Firebase回调中显示对话框。这是一种不太优雅的方法,但在Flutter中处理全局上下文时通常是必要的。

  2. Firebase配置:确保你的Firebase项目已经正确配置了应用内消息功能,并且在Firebase控制台中启用了该功能。

  3. 错误处理:在生产环境中,请添加适当的错误处理逻辑,以确保应用的稳定性。

通过上述步骤,你就可以在Flutter应用中集成并使用Firebase应用内消息功能了。

回到顶部