Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/protonemedia/laravel-analytics-event-tracking
Laravel package to easily send events to Google Analytics
https://github.com/protonemedia/laravel-analytics-event-tracking
google-analytics google-analytics-api google-analytics-php google-analytics-sdk laravel laravel-framework
Last synced: 3 months ago
JSON representation
Laravel package to easily send events to Google Analytics
- Host: GitHub
- URL: https://github.com/protonemedia/laravel-analytics-event-tracking
- Owner: protonemedia
- License: mit
- Archived: true
- Created: 2020-05-06T13:29:55.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-01-02T10:27:08.000Z (12 months ago)
- Last Synced: 2024-09-19T16:11:06.234Z (3 months ago)
- Topics: google-analytics, google-analytics-api, google-analytics-php, google-analytics-sdk, laravel, laravel-framework
- Language: PHP
- Homepage: https://protone.media/en/blog/tracking-events-with-google-analytics-and-a-new-laravel-package
- Size: 73.2 KB
- Stars: 245
- Watchers: 9
- Forks: 24
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
Awesome Lists containing this project
README
> :warning: This package is unmaintained and doesn't work with GA4.
# Laravel Analytics Event Tracking
https://twitter.com/pascalbaljet/status/1257926601339277312[![Latest Version on Packagist](https://img.shields.io/packagist/v/protonemedia/laravel-analytics-event-tracking.svg?style=flat-square)](https://packagist.org/packages/protonemedia/laravel-analytics-event-tracking)
![run-tests](https://github.com/protonemedia/laravel-analytics-event-tracking/workflows/run-tests/badge.svg)
[![Quality Score](https://img.shields.io/scrutinizer/g/protonemedia/laravel-analytics-event-tracking.svg?style=flat-square)](https://scrutinizer-ci.com/g/protonemedia/laravel-analytics-event-tracking)
[![Total Downloads](https://img.shields.io/packagist/dt/protonemedia/laravel-analytics-event-tracking.svg?style=flat-square)](https://packagist.org/packages/protonemedia/laravel-analytics-event-tracking)
[![Buy us a tree](https://img.shields.io/badge/Treeware-%F0%9F%8C%B3-lightgreen)](https://plant.treeware.earth/protonemedia/laravel-analytics-event-tracking)Laravel package to easily send events to [Google Analytics](https://analytics.google.com/)
## Sponsor this package!
❤️ We proudly support the community by developing Laravel packages and giving them away for free. If this package saves you time or if you're relying on it professionally, please consider [sponsoring the maintenance and development](https://github.com/sponsors/pascalbaljet). Keeping track of issues and pull requests takes time, but we're happy to help!
## Laravel Splade
**Did you hear about Laravel Splade? 🤩**
It's the *magic* of Inertia.js with the *simplicity* of Blade. [Splade](https://github.com/protonemedia/laravel-splade) provides a super easy way to build Single Page Applications using Blade templates. Besides that magic SPA-feeling, it comes with more than ten components to sparkle your app and make it interactive, all without ever leaving Blade.
## Features
* Use [Laravel Events](https://laravel.com/docs/7.x/events) to track events with GA.
* [Blade Directive](https://laravel.com/docs/7.x/blade#introduction) to easily store the Client ID.
* Full access to the [underlying library](https://github.com/theiconic/php-ga-measurement-protocol).
* API calls to GA are queued.
* Easy to configure.
* Compatible with Laravel 9.0.
* PHP 8.0 or higher required.## Installation
You can install the package via composer:
```bash
composer require protonemedia/laravel-analytics-event-tracking
```## Configuration
Publish the config and view files:
```bash
php artisan vendor:publish --provider="ProtoneMedia\AnalyticsEventTracking\ServiceProvider"
```Set your [Google Analytics Tracking ID](https://support.google.com/analytics/answer/1008080) in the `.env` file or in the `config/analytics-event-tracking.php` file.
```bash
GOOGLE_ANALYTICS_TRACKING_ID=UA-01234567-89
```This package supports [Google Analytics 4](https://blog.google/products/marketingplatform/analytics/new_google_analytics/) as of version 1.2.1. Please republish the view file if you're upgrading to a new Google Analytics 4 property.
## Blade Directive
This package comes with a `@sendAnalyticsClientId` directive that sends the [Client ID](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#clientId) from the GA front-end to your Laravel backend and stores it in the session.
It uses the [Axios HTTP library](https://github.com/axios/axios) the make an asynchronous POST request. Axios was choosen because it is provided by default in Laravel in the `resources/js/bootstrap.js` file.
Add the directive somewhere after initializing/configuring GA. The POST request will only be made if the `Client ID` isn't stored yet or when it's refreshed.
```php
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
}});```
If you don't use Axios, you have to implement this call by yourself. By default the endpoint is `/gaid` but you can customize it in the configuration file. The request is handled by the `ProtoneMedia\AnalyticsEventTracking\Http\StoreClientIdInSession` class. Make sure to also send the [CSRF token](https://laravel.com/docs/7.x/csrf).
## Broadcast events to Google Analytics
Add the `ShouldBroadcastToAnalytics` interface to your event and you're ready! You don't have to manually bind any listeners.
``` php
order = $order;
}
}
```## Handle framework and 3rd-party events
If you want to handle events where you can't add the `ShouldBroadcastToAnalytics` interface, you can manually register them in your `EventServiceProvider` using the `DispatchAnalyticsJob` listener.
```php
[
SendEmailVerificationNotification::class,
DispatchAnalyticsJob::class,
],
];
}
```## Customize the broadcast
There are two additional methods that lets you customize the call to Google Analytics.
With the `withAnalytics` method you can interact with the [underlying package](https://github.com/theiconic/php-ga-measurement-protocol) to set additional parameters. Take a look at the `TheIconic\Tracking\GoogleAnalytics\Analytics` class to see the available methods.
With the `broadcastAnalyticsActionAs` method you can customize the name of the [Event Action](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventAction). By default we use the class name with the class's namespace removed. This method gives you access to the underlying `Analytics` class as well.
``` php
order = $order;
}public function withAnalytics(Analytics $analytics)
{
$analytics->setEventValue($this->order->sum_in_cents / 100);
}public function broadcastAnalyticsActionAs(Analytics $analytics)
{
return 'CustomEventAction';
}
}
```## Handling the Client ID outside a HTTP Request
You might want to track an event that occurs outside of a HTTP Request, for example in a queued job or while handling a 3rd-party callback/webhook. Let's continue with the `Order` example. When the `Order` is created, you could save the `Client ID` in the database.
```php
validated();$attributes['google_analytics_client_id'] = $clientId->get();
return Order::create($attributes);
}
}
```When you receive a webhook from your payment provider and you dispatch an `OrderWasPaid` event, you can use the `withAnalytics` method in your event to reuse the `google_analytics_client_id`:
``` php
order = $order;
}public function withAnalytics(Analytics $analytics)
{
$analytics->setClientId($this->order->google_analytics_client_id);
}
}
```## Additional configuration
You can configure some additional settings in the `config/analytics-event-tracking.php` file:
* `use_ssl`: Use SSL to make calls to GA
* `is_enabled`: Set to `false` to prevent events from being sent to GA
* `anonymize_ip`: Anonymizes the last digits of the user's IP
* `send_user_id`: Send the ID of the authenticated user to GA
* `queue_name`: Specify a queue to perform the calls to GA
* `client_id_session_key`: The session key to store the Client ID
* `http_uri`: HTTP URI to post the Client ID to (from the Blade Directive)### Testing
``` bash
composer test
```### Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
## Other Laravel packages
* [`Laravel Blade On Demand`](https://github.com/protonemedia/laravel-blade-on-demand): Laravel package to compile Blade templates in memory.
* [`Laravel Cross Eloquent Search`](https://github.com/protonemedia/laravel-cross-eloquent-search): Laravel package to search through multiple Eloquent models.
* [`Laravel Eloquent Scope as Select`](https://github.com/protonemedia/laravel-eloquent-scope-as-select): Stop duplicating your Eloquent query scopes and constraints in PHP. This package lets you re-use your query scopes and constraints by adding them as a subquery.
* [`Laravel Eloquent Where Not`](https://github.com/protonemedia/laravel-eloquent-where-not): This Laravel package allows you to flip/invert an Eloquent scope, or really any query constraint.
* [`Laravel FFMpeg`](https://github.com/protonemedia/laravel-ffmpeg): This package provides an integration with FFmpeg for Laravel. The storage of the files is handled by Laravel's Filesystem.
* [`Laravel Form Components`](https://github.com/protonemedia/laravel-form-components): Blade components to rapidly build forms with Tailwind CSS Custom Forms and Bootstrap 4. Supports validation, model binding, default values, translations, includes default vendor styling and fully customizable!
* [`Laravel Mixins`](https://github.com/protonemedia/laravel-mixins): A collection of Laravel goodies.
* [`Laravel Paddle`](https://github.com/protonemedia/laravel-paddle): Paddle.com API integration for Laravel with support for webhooks/events.
* [`Laravel Verify New Email`](https://github.com/protonemedia/laravel-verify-new-email): This package adds support for verifying new email addresses: when a user updates its email address, it won't replace the old one until the new one is verified.
* [`Laravel WebDAV`](https://github.com/protonemedia/laravel-webdav): WebDAV driver for Laravel's Filesystem.### Security
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
## Credits
- [Pascal Baljet](https://github.com/pascalbaljetmedia)
- [All Contributors](../../contributors)## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
## Treeware
This package is [Treeware](https://treeware.earth). If you use it in production, then we ask that you [**buy the world a tree**](https://plant.treeware.earth/pascalbaljetmedia/laravel-analytics-event-tracking) to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.