octohk/laravel-segment

该软件包已被废弃,不再维护。作者建议使用slashequip/laravel-segment软件包。

Laravel Segment 是一种将 Segment 集成到 Laravel 应用程序中的有观点的方法。

v1.5.1 2024-09-02 11:06 UTC

This package is auto-updated.

Last update: 2024-09-02 11:08:53 UTC


README

Latest Version on Packagist tests code style psalm Total Downloads

Laravel Segment Logo Banner

Laravel Segment 是一种将 Segment 集成到 Laravel 应用程序中的有观点的方法。

安装

您可以通过 composer 安装此软件包

composer require slashequip/laravel-segment

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="SlashEquip\LaravelSegment\LaravelSegmentServiceProvider"

这是已发布的配置文件的内容,应位于 config/segment.php

return [
    'enabled' => env('SEGMENT_ENABLED', true),

    /**
     * This is your Segment API write key. It can be
     * found under Source > Settings > Api Keys
     */
    'write_key' => env('SEGMENT_WRITE_KEY', null),

    /**
     * Should the Segment service defer all tracking
     * api calls until after the response, sending
     * everything using the bulk/batch api?
     */
    'defer' => env('SEGMENT_DEFER', false),

    /**
     * Should the Segment service be run in safe mode.
     * Safe mode will only report errors in sending
     * when safe mode is off exceptions are thrown
     */
    'safe_mode' => env('SEGMENT_SAFE_MODE', true),
];

设置您的写入密钥

您的写入密钥是 Segment 给您的 API 密钥,可以在您的 PHP 源设置下找到;在 Segment UI 中为 https://app.segment.com/{your-workspace-name}/sources/{your-source-name}/settings/keys

什么是 Segment 用户

当我们在这个软件包的上下文中谈论“用户”时,我们指的是任何实现了软件包提供的 SlashEquip\LaravelSegment\Contracts\CanBeIdentifiedForSegment 协议的对象。该软件包包含一个特质(以及接口),您可以将其附加到您的默认用户模型上;

use Illuminate\Database\Eloquent\Model;
use SlashEquip\LaravelSegment\Traits\HasSegmentIdentityByKey;
use SlashEquip\LaravelSegment\Contracts\CanBeIdentifiedForSegment;

class User extends Model implements CanBeIdentifiedForSegment
{
    use HasSegmentIdentityByKey;
}

使用这个特质将自动使用您用户的唯一键作为发送到 Segment 的标识符。或者,您可以在您的用户模型上实现自己的 public function getSegmentIdentifier(): string; 方法实例,而不使用这个特质。

全局识别用户

如果您正在通过应用程序中的多个位置以及在请求过程中发送 Segment 事件,那么全局识别一个用户可能会使跟踪调用更加方便。

use SlashEquip\LaravelSegment\Facades\Segment;

Segment::setGlobalUser($user);

全局设置上下文

Segment 允许您将 上下文 与您的跟踪事件一起发送,您可以为所有跟踪事件设置一个全局上下文。

use SlashEquip\LaravelSegment\Facades\Segment;

Segment::setGlobalContext([
    'ip' => '127.0.0.1',
    'locale' => 'en-US',
    'screen' => [
        'height' => 1080,
        'width' => 1920,
    ],
]);

这里有一些便利之处

Laravel Segment 随带一个中间件,您可以在您的 HTTP Kernal 中应用它,它将处理全局用户的设置和一些合理的全局上下文。如果您想添加到默认上下文提供的功能,可以轻松扩展此中间件并调整以满足您的需求。

    'api' => [
        // ... other middleware
        SlashEquip\LaravelSegment\Middleware\ApplySegmentGlobals::class
    ],

用法

用于跟踪事件

use SlashEquip\LaravelSegment\Facades\Segment;

Segment::forUser($user)->track('User Signed Up', [
    'source' => 'Product Hunt',
]);

// If you have set a global user you can
// use the simpler provided syntax.
Segment::track('User Signed Up', [
    'source' => 'Product Hunt',
]);

// If you have defer enabled in the config
// you can still track an event immediately using trackNow.
Segment::trackNow('User Signed Up', [
    'source' => 'Product Hunt',
]);

用于识别用户

use SlashEquip\LaravelSegment\Facades\Segment;

Segment::forUser($user)->identify([
    'last_logged_in' => '2021-03-24 20:05:30',
    'latest_subscription_amount' => '$24.60',
]);

// If you have set a global user you can
// use the simpler provided syntax.
Segment::identify([
    'last_logged_in' => '2021-03-24 20:05:30',
    'latest_subscription_amount' => '$24.60',
]);

// If you have defer enabled in the config
// you can still identify a user immediately using identifyNow.
Segment::identifyNow('User Signed Up', [
    'source' => 'Product Hunt',
]);

Laravel 通知

此软件包包括一个开箱即用的通知通道,允许您使用 Laravel 的内置通知功能。要将 Segment 事件发送给用户作为通知,按正常方式生成您的通知;

php artisan make:notification UserSubscribed

您必须确保您的通知实现了 CanNotifyViaSegment 接口,并添加所需的 toSegment 方法。然后您可以将 via 方法配置为包含 SegmentChannel 类。

然后您可以根据需要调整 toSegment 方法以返回您想要的事件。

use Illuminate\Notifications\Notification;
use SlashEquip\LaravelSegment\Contracts\CanBeIdentifiedForSegment;
use SlashEquip\LaravelSegment\Contracts\CanBeSentToSegment;
use SlashEquip\LaravelSegment\Contracts\CanNotifyViaSegment;
use SlashEquip\LaravelSegment\Notifications\SegmentChannel;
use SlashEquip\LaravelSegment\SimpleSegmentEvent;

class UserSubscribed extends Notification implements CanNotifyViaSegment
{
    public function __construct(
    ) {
    }

    public function via(object $notifiable): array
    {
        return [SegmentChannel::class];
    }

    public function toSegment(CanBeIdentifiedForSegment $notifiable): CanBeSentToSegment
    {
        return new SimpleSegmentEvent(
            $notifiable,
            'User Subscribed',
            [
                'plan' => 'basic',
                'team_name' => 'Funky chickens',
            ],
        );
    }
}

杂项

延迟

当您开始在应用程序中触发大量事件时,即使每次请求是 2-3 个,启用延迟(请参阅配置)可以非常有益。当延迟启用时,服务将存储在整个请求或过程中触发的所有跟踪事件,然后在您的应用程序响应用户后批量发送它们。这发生在 Laravel 终止期间。

安全模式

默认情况下,安全模式是开启的。当安全模式激活时,它将吞没在向 Segmenta 发送 HTTP 请求时抛出的任何异常,并自动将它们报告给异常处理器,允许您的应用程序继续运行。当禁用时,异常将被抛出。

测试

./vendor/bin/pest

更新日志

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

贡献

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

安全漏洞

请查看我们的安全策略了解如何报告安全漏洞。

鸣谢

许可证

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