【问题标题】:Implementing visitor counter in flutter for web在 Flutter for Web 中实现访客计数器
【发布时间】:2020-03-11 19:10:51
【问题描述】:

我正在尝试在完全使用 flutter-web 构建的网站上实现 visitor-counter,并且我试图仅使用简单的 dart 代码和来自 pub.dev 的一些包来完成此操作。

但是一直困扰我的问题是,我需要找到一种方法来根据用户的浏览器或设备来唯一地识别用户,这样我就不会一次又一次地为同一个人增加计数器重温。

到目前为止,我认为我可以使用firestore 来跟踪访问者的总数并在启动时在网页上显示相同的内容,并使用一些缓存包,如dcachelocalstorage (就像描述的here) 来跟踪重新访问同一网页的用户。

有没有更好的方法来解决这个问题?任何帮助将不胜感激????

(ps:我之前没有网络开发经验)

【问题讨论】:

    标签: flutter dart google-cloud-firestore counter flutter-web


    【解决方案1】:

    既然你谈到了用户,我立刻想到了使用 Firebase 身份验证。

    您可以在这里使用两种方式:

    1. 通过匿名身份验证,您可以为每个用户创建一个唯一 ID,而无需他们输入凭据。

    2. 如果您希望能够在不同的浏览器/设备上识别同一用户,他们必须使用受支持的提供商之一(电子邮件/密码、电话号码、电子邮件链接、facebook、google、等)。

    无论您选择哪一个,每个用户现在都将拥有一个唯一 ID(在 Firebase 术语中称为 UID),您可以使用它在数据库中识别他们。例如,您可以为数据库中的每个用户创建一个文档,并将其 UID 作为该文档的 ID。这样您就可以保证每个用户只有一个文档。

    您仍然需要对文档进行计数,为此我建议您查看distributed counter extension


    还请考虑您是否要在此处使用 Firebase 实时数据库而不是 Firestore,因为它可能会为您提供更简单的定价模型,并且具有内置的 presence system。您仍会像以前一样使用 Firebase 身份验证,但只需交换数据库即可。

    【讨论】:

    • 非常感谢您的回复!除了使用匿名身份验证之外,您认为使用localstorage 来记录已经访问过的用户是否是一个不错的选择?
    【解决方案2】:

    如果您只想在您的 web 应用上捕获访问者数量,则有一种简短的方法。 我在 firestore 中创建了一个名为“Visits”的集合并生成了自动 ID,在其中添加了一个名为“count”的字段。而已! 现在您只需在第一个屏幕的 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));
    

    }

    【讨论】:

    • 但是这种方法不会将每次刷新都算作另一个用户吗?
    • 是的,但它背后的想法是每次页面加载时,访问者都会增加,并且十分之一的用户可能会重新加载页面
    • 但是如果同一个人碰巧再次访问该网站,它不会增加计数吗?
    • 是的,它独立于用户,它只会计算对您的 webapp 的访问次数。如果计算用户是您所需要的,那么 Frank van Puffelen 的答案就是应该是什么样子 :)
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多