使用Firebase控制台的分析(Analytics)功能可以帮助我们了解用户是如何使用Flutter应用程序。我们将启用捕获预定义的事件,调整应用程序以收集登录事件和发送消息的指标。数据捕获后,我们将通过Firebase控制台在仪表板中查看。

要使用Firebase Analytics收集用户的数据,我们需要firebase_analytics插件。在main.dart文件中,确保导入相应的包。

import 'package:firebase_analytics/firebase_analytics.dart';

现在添加一个名为analytics的私有成员变量,使用一个新的FirebaseAnalytics实例初始化它,我们可以通过此变量进行访问。将以下代码添加到main.dart中。

final analytics = new FirebaseAnalytics();

接下来,我们可以在应用程序中记录一些事件,以便稍后跟踪和分析。对于这个项目,我们将跟踪用户使用其Google帐户登录的次数。我们将通过在ChatScreenState中的私有_ensureLoggedIn()方法中记录登录事件来进行此操作,当用户发送聊天消息时,该事件被调用。

class ChatScreenState extends State<ChatScreen> with TickerProviderStateMixin {
  //...
  Future<Null> _ensureLoggedIn() async {
    GoogleSignInAccount user = googleSignIn.currentUser;
    if (user == null)
      user = await googleSignIn.signInSilently();
    if (user == null) {
      await googleSignIn.signIn();
      analytics.logLogin();
    }
  }
  //...
}

调用logLogin()方法,该方法由应用程序中包含的Flutter Firebase Analytics插件定义。此方法不带参数,记录名为login的Firebase Analytics事件。

我们还可以跟踪应用程序中用户发送的消息数量,作为使用和受欢迎程度的度量标准。用户安装我们的应用程序后,重要的是要知道他们是否觉得它很有用和有吸引力。我们将通过在ChatScreenState中的私有_sendMessage()方法中记录发送的消息事件来执行此操作。

class ChatScreenState extends State<ChatScreen> with TickerProviderStateMixin {
  //...
  void _sendMessage({ String text }) {
    ChatMessage message = new ChatMessage(
      text: text,
      animationController: new AnimationController(
        duration: new Duration(milliseconds: 300),
        vsync: this
      )
    );
    setState((){
      _messages.insert(0, message);
    });
    message.animationController.forward();
    analytics.logEvent(name: 'send_message');
  }
  //...
}

调用由Firebase Analytics API定义的logEvent()方法,访问此API由Flutter Firebase Analytics插件提供,该插件是我们之前导入的。logEvent()方法记录了名为send_message的Firebase Analytics事件。

现在当用户登录应用程序或发送消息时,事件将记录在Firebase实时数据库中。在Firebase控制台中,选择“Analytics > 事件”查看仪表板。

这里写图片描述

在事件列表中,我们将看到刚刚添加的loginsend_message事件以及默认的first_openscreen_viewsession_start事件。我们登录到Firebase Analytics的任何事件将被汇总、匿名化,并在24小时内在Firebase控制台中报告。要立即查看事件,可以启用调试模式。

Firebase认证允许我们要求应用程序的用户拥有Google帐户。当用户登录时,Firebase身份验证将验证Google登录中的凭据,并返回应用程序的响应。登录和验证的用户可以连接到Firebase实时数据库,并与其他用户交流聊天消息。我们可以应用身份验证,以确保用户只能看到他们可以访问的消息。

要使用Firebase认证来验证应用程序的用户,我们需要使用firebase_auth插件。在我们的main.dart文件中,确保导入相应的包。

import 'package:firebase_auth/firebase_auth.dart';

现在添加一个名为auth的私有成员变量,使用一个新的FirebaseAuth实例初始化它,我们可以通过此变量进行访问。将以下代码添加到main.dart中。

final auth = FirebaseAuth.instance;

将Google登录连接到Firebase,要求仅登录的Google用户可以更改数据库,需要在ChatScreenState中的_ensureLoggedIn()方法中添加验证逻辑,如下面代码所示。

class ChatScreenState extends State<ChatScreen> with TickerProviderStateMixin {
  //...
  Future<Null> _ensureLoggedIn() async {
    GoogleSignInAccount user = googleSignIn.currentUser;
    if (user == null)
      user = await googleSignIn.signInSilently();
    if (user == null) {
      await googleSignIn.signIn();
      analytics.logLogin();
    }
    if (auth.currentUser == null) {
      GoogleSignInAuthentication credentials = await googleSignIn.currentUser.authentication;
      await auth.signInWithGoogle(
        idToken: credentials.idToken,
        accessToken: credentials.accessToken,
      );
    }
  }
  //...
}

检查currentUser是否设置为nullauthentication属性是用户的凭据。signInWithGoogle()方法将idTokenaccessToken作为参数。此方法由我们之前导入的Flutter Firebase Authentication插件提供。它返回一个名为currentUser的新的Firebase用户对象。

这里写图片描述

我们现在可以在Firebase控制台的Authentication中看到自己的帐户信息。现在,我们可以要求用户使用Google帐户登录,然后才能发送消息。

Logo

致力于链接即构和开发者,提供实时互动和元宇宙领域的前沿洞察、技术分享和丰富的开发者活动,共建实时互动世界。

更多推荐