octohk / laravel-segment
Laravel Segment 是一种将 Segment 集成到 Laravel 应用程序中的有观点的方法。
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.2
- illuminate/contracts: ^9.0|^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.10
- mockery/mockery: ^1.4
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^7.25|^8.5|^9.0
- pestphp/pest: ^2.0
- vimeo/psalm: ^5.24
README
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)。请参阅许可证文件获取更多信息。