使用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 > 事件”查看仪表板。
在事件列表中,我们将看到刚刚添加的login
和send_message
事件以及默认的first_open
、screen_view
和session_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
是否设置为null
。authentication
属性是用户的凭据。signInWithGoogle()
方法将idToken
和accessToken
作为参数。此方法由我们之前导入的Flutter Firebase Authentication插件提供。它返回一个名为currentUser
的新的Firebase用户对象。
我们现在可以在Firebase控制台的Authentication中看到自己的帐户信息。现在,我们可以要求用户使用Google帐户登录,然后才能发送消息。