我正试图在一个完全使用flutter-web
构建的网站上实现visitor-counter
,我正试图只使用普通的dart代码和pub.dev.中的一些包来实现这一点
但一直困扰我的问题是,我需要找到一种方法,根据用户的浏览器或设备来唯一地识别用户,这样我就不会在再次访问时一次又一次地增加同一个人的计数器。
到目前为止,我的想法是,我可以使用firestore来跟踪访客总数,并在启动时在网页上显示相同的访客总数,还可以使用一些缓存包,如dcache或localstorage(如本文所述(来跟踪重新访问同一网页的用户。
有没有更好的方法来解决这个问题?任何帮助都将不胜感激😁
(ps:我之前没有网络开发经验(
既然谈到用户,我马上想到使用Firebase身份验证。
有两种方法可以在这里使用:
-
使用匿名身份验证,您可以为每个用户创建一个唯一的ID,而不需要他们输入凭据。
-
如果你想在不同的浏览器/设备上识别同一用户,他们必须登录其中一个受支持的提供商(电子邮件/密码、电话号码、电子邮件链接、脸书、谷歌等(。
无论您选择哪一个,每个用户现在都将拥有一个唯一的ID(在Firebase术语中称为UID(,您可以使用该ID在数据库中识别他们。例如,您可以为数据库中的每个用户创建一个文档,并将他们的UID作为该文档的ID。这样就可以保证每个用户只拥有一个文档。
您仍然需要对文档进行计数,我建议您查看分布式计数器扩展。
此外,请考虑是否要在此处使用Firebase实时数据库而不是Firestore,因为它可能会为您提供更简单的定价模型,并且具有内置的呈现系统。您仍然可以像以前一样使用Firebase身份验证,但只需交换数据库即可。
如果你只想在你的网络应用程序上捕捉访客数量,有一个很短的方法。我创建了一个名为";访问";在firestore中并生成了auto-id,我在其中添加了一个名为"的字段;计数";。就是这样!现在您只需要在第一个屏幕的init方法中调用这个方法:
updateCounter() async {
final cRef = FirebaseFirestore.instance.collection('VISITS');
await cRef
.doc("mS9fCXjvkpREt8LvanSb") //Paste the id which was generated automatically
.set({"count": FieldValue.increment(1)}, SetOptions(merge: true));
}