protonemedia/laravel-analytics-event-tracking

此包已废弃,不再维护。未建议替代包。

Laravel包,轻松将事件发送到Google Analytics

1.6.0 2023-02-21 20:59 UTC

README

⚠️ 此包不再维护且不支持GA4。

Laravel Analytics Event Tracking

https://twitter.com/pascalbaljet/status/1257926601339277312

Latest Version on Packagist run-tests Quality Score Total Downloads Buy us a tree

Laravel包,轻松将事件发送到 Google Analytics

赞助此包!

❤️ 我们自豪地通过开发Laravel包并免费提供来支持社区。如果这个包为您节省了时间,或者您在专业上依赖它,请考虑 赞助维护和开发。跟踪问题和拉取请求需要时间,但我们愿意提供帮助!

Laravel Splade

您听说过Laravel Splade吗? 🤩

它是Inertia.js的魔法加上Blade的简单性。Splade提供了一个极其简单的方法来使用Blade模板构建单页应用程序。除了那种SPA感觉之外,它还带有十多个组件,可以让您的应用程序闪闪发光并使其交互式,而无需离开Blade。

功能

  • 使用Laravel事件跟踪GA事件。
  • Blade指令轻松存储客户端ID。
  • 完全访问底层库
  • GA的API调用被排队。
  • 易于配置。
  • 兼容Laravel 9.0。
  • 需要PHP 8.0或更高版本。

安装

您可以通过Composer安装此包

composer require protonemedia/laravel-analytics-event-tracking

配置

发布配置和视图文件

php artisan vendor:publish --provider="ProtoneMedia\AnalyticsEventTracking\ServiceProvider"

.env文件或config/analytics-event-tracking.php文件中设置您的Google Analytics跟踪ID

GOOGLE_ANALYTICS_TRACKING_ID=UA-01234567-89

自1.2.1版本起,此包支持Google Analytics 4。如果您将新Google Analytics 4属性升级到新版本,请重新发布视图文件。

Blade指令

此包包含一个@sendAnalyticsClientId指令,它将GA前端中的客户端ID发送到您的Laravel后端并存储在会话中。

它使用了Axios HTTP 库来发送异步 POST 请求。选择 Axios 是因为它默认在 Laravel 的 resources/js/bootstrap.js 文件中提供。

在初始化/配置 GA 之后,将指令添加到某个位置。只有在 Client ID 尚未存储或刷新时,才会发送 POST 请求。

<script async src="https://#/gtag/js?id=UA-01234567-89"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-01234567-89', { 'send_page_view': false });
  gtag('event', 'page_view', { 'event_callback': function() {
      @sendAnalyticsClientId
  }});
</script>

如果您不使用 Axios,您必须自己实现这个调用。默认端点是 /gaid,但您可以在配置文件中自定义它。请求由 ProtoneMedia\AnalyticsEventTracking\Http\StoreClientIdInSession 类处理。请确保还发送 CSRF 令牌

向 Google Analytics 广播事件

ShouldBroadcastToAnalytics 接口添加到您的事件中,您就准备好了!您无需手动绑定任何监听器。

<?php

namespace App\Events;

use App\Order;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use ProtoneMedia\AnalyticsEventTracking\ShouldBroadcastToAnalytics;

class OrderWasCreated implements ShouldBroadcastToAnalytics
{
    use Dispatchable, SerializesModels;

    public $order;

    public function __construct(Order $order)
    {
        $this->order = $order;
    }
}

处理框架和第三方事件

如果您无法添加 ShouldBroadcastToAnalytics 接口来处理事件,您可以在 EventServiceProvider 中使用 DispatchAnalyticsJob 监听器手动注册它们。

<?php

namespace App\Providers;

use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use ProtoneMedia\AnalyticsEventTracking\Listeners\DispatchAnalyticsJob;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
            DispatchAnalyticsJob::class,
        ],
    ];
}

自定义广播

有两种额外的方法可以让您自定义对 Google Analytics 的调用。

使用 withAnalytics 方法,您可以与基础包交互以设置其他参数。查看 TheIconic\Tracking\GoogleAnalytics\Analytics 类以了解可用的方法。

使用 broadcastAnalyticsActionAs 方法,您可以自定义事件操作的名称。默认情况下,我们使用没有类名的类名。此方法还让您访问基础 Analytics 类。

<?php

namespace App\Events;

use App\Order;
use TheIconic\Tracking\GoogleAnalytics\Analytics;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use ProtoneMedia\AnalyticsEventTracking\ShouldBroadcastToAnalytics;

class OrderWasCreated implements ShouldBroadcastToAnalytics
{
    use Dispatchable, SerializesModels;

    public $order;

    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    public function withAnalytics(Analytics $analytics)
    {
        $analytics->setEventValue($this->order->sum_in_cents / 100);
    }

    public function broadcastAnalyticsActionAs(Analytics $analytics)
    {
        return 'CustomEventAction';
    }
}

在 HTTP 请求外处理 Client ID

您可能想要跟踪在 HTTP 请求之外发生的事件,例如在队列作业或处理第三方回调/钩子时。让我们继续使用 Order 例子。当 Order 被创建时,您可以将 Client ID 保存到数据库中。

<?php

namespace App\Http\Controllers;

use App\Order;
use App\Http\Requests\CreateOrderRequest;
use ProtoneMedia\AnalyticsEventTracking\Http\ClientIdRepository;

class CreateOrderController
{
    public function __invoke(CreateOrderRequest $request, ClientIdRepository $clientId)
    {
        $attributes = $request->validated();

        $attributes['google_analytics_client_id'] = $clientId->get();

        return Order::create($attributes);
    }
}

当您收到支付提供者的 webhook 并分派 OrderWasPaid 事件时,您可以在事件中使用 withAnalytics 方法来重用 google_analytics_client_id

<?php

namespace App\Events;

use App\Order;
use TheIconic\Tracking\GoogleAnalytics\Analytics;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use ProtoneMedia\AnalyticsEventTracking\ShouldBroadcastToAnalytics;

class OrderWasPaid implements ShouldBroadcastToAnalytics
{
    use Dispatchable, SerializesModels;

    public $order;

    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    public function withAnalytics(Analytics $analytics)
    {
        $analytics->setClientId($this->order->google_analytics_client_id);
    }
}

其他配置

您可以在 config/analytics-event-tracking.php 文件中配置一些其他设置

  • use_ssl:使用 SSL 来调用 GA
  • is_enabled:将其设置为 false 以防止事件发送到 GA
  • anonymize_ip:匿名化用户的 IP 地址的最后几位
  • send_user_id:将认证用户的 ID 发送到 GA
  • queue_name:指定一个队列来执行对 GA 的调用
  • client_id_session_key:存储 Client ID 的会话密钥
  • http_uri:HTTP URI 将 Client ID 发布到(来自 Blade 指令)

测试

composer test

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

其他Laravel包

  • Laravel Blade On Demand:Laravel包,用于在内存中编译Blade模板。
  • Laravel Cross Eloquent Search:Laravel包,用于在多个Eloquent模型中进行搜索。
  • Laravel Eloquent Scope as Select:停止在PHP中重复Eloquent查询作用域和约束。此包允许您通过将它们作为子查询添加来重用查询作用域和约束。
  • Laravel Eloquent Where Not:此Laravel包允许您翻转/反转Eloquent作用域,或实际上任何查询约束。
  • Laravel FFMpeg:此包为Laravel提供FFmpeg集成。文件的存储由Laravel的文件系统处理。
  • Laravel Form Components:Blade组件,可用于使用Tailwind CSS自定义表单和Bootstrap 4快速构建表单。支持验证、模型绑定、默认值、翻译,包括默认供应商样式和完全可定制!
  • Laravel Mixins:一组Laravel实用工具。
  • Laravel Paddle:支持webhooks/events的Paddle.com API集成,针对Laravel。
  • Laravel Verify New Email:此包增加了对新电子邮件地址验证的支持:当用户更新其电子邮件地址时,新地址在被验证之前不会替换旧地址。
  • Laravel WebDAV:Laravel文件系统的WebDAV驱动程序。

安全

如果您发现任何安全相关的问题,请通过电子邮件pascal@protone.media联系,而不是使用问题跟踪器。

致谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。

TreeWare

此包是TreeWare。如果您在生产中使用它,那么我们要求您为世界买一棵树以感谢我们的工作。通过为TreeWare森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。