sevealex/laravel-fcm

Laravel 包使用 Firebase 发送通知

1.0.5 2020-12-08 11:49 UTC

This package is auto-updated.

Last update: 2024-09-08 20:27:06 UTC


README

简介

Laravel FCM 是一个易于使用的包,可用于与 Laravel 和 Lumen 配合使用,通过 Firebase Cloud Messaging (FCM) 发送推送通知。

目前它仅支持 HTTP 协议来

  • 向一个或多个设备发送下行消息
  • 创建迁移以保存用户令牌
  • 添加函数助手以获取或创建用户令牌

安装

要在您的项目中获取 Laravel FCM 的最新版本,请在 "composer" 中要求它

$ composer require prgayman/laravel-fcm

Laravel

直接在您的应用程序配置文件 config/app.php 中注册提供者 config/app.php

Laravel >= 5.5 提供了包自动发现,归功于 rasmuscnielsen 和 luiztessadri,他们帮助实现了 Laravel FCM 中的此功能,因此不再需要注册提供者和外观。

'providers' => [
	Prgayman\Fcm\FcmServiceProvider::class,
]

在相同的文件中添加外观别名

'aliases' => [

  'FCM' => Prgayman\Fcm\Facades\Fcm::class,

]

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

$ php artisan vendor:publish --provider="Prgayman\Fcm\FcmServiceProvider"

使用以下命令迁移 fcm_tokens

$ php artisan migrate

Lumen

在您的 bootstrap/app.php 应用程序启动文件中注册提供者

在文件底部的 "注册服务提供者" 部分中添加以下行。

$app->register(Prgayman\Fcm\FcmServiceProvider::class);

对于外观,在 "创建应用程序" 部分(.)中添加以下行。FCMGroup 外观仅当您想在应用程序中使用分组消息时才是必要的。

class_alias(\Prgayman\Fcm\Facades\Fcm::class, 'PFCM');

手动将配置文件 fcm.php 从目录 /vendor/prgayman/laravel-fcm/Config 复制到目录 /config(您可能需要创建此目录)。

包配置

在您的 .env 文件中,添加 Firebase Cloud Messaging 的服务器密钥和密钥

FIREBASE_SERVER_KEY=my_server_key

要获取这些密钥,您必须在 Firebase Cloud Messaging 控制台 上创建一个新应用程序。

在 Firebase 上创建您的应用程序后,您可以在 项目设置 -> 云消息 中找到密钥。

文档

有关详细的安装和使用说明,请参阅 文档

有效负载构建器

基本用法

使用 Laravel FCM 可以发送两种类型的消息

  • 通知消息,有时被称为 "显示消息"
  • 数据消息,由客户端应用程序处理

首先,将 Prgayman\Fcm\Traits\HasFcm 特性添加到您的 User 模型中

use Illuminate\Foundation\Auth\User as Authenticatable;
use Prgayman\Fcm\Traits\HasFcm; // Add this line

class User extends Authenticatable
{
    use HasFcm; // Add this line
}

$user = User::find(1);

/**
 * Get all fcm tokens this user
 * @param string $locale (optional)
 *
 * @return array
 */
$user->getFcmTokens();

/**
 * Get ios fcm tokens this user
 * @param string $locale (optional)
 *
 * @return array
 */
$user->getFcmIosTokens();

/**
 * Get android fcm tokens this user
 * @param string $locale (optional)
 *
 * @return array
 */
$user->getAndroidTokens();

/**
 * Get web fcm tokens this user
 * @param string $locale (optional)
 *
 * @return array
 */
$user->getWebTokens();

/**
 * Create Or Update user fcm Token this user
 * @param string $token
 * @param string $platform (optional)
 * @param string $locale (optional)
 *
 * @return Prgayman\Fcm\Models\FcmToken
 */
$fcmToken = $user->fcmCreateOrUpdate($token, "android", app()->getLocale()));

Prgayman\Fcm\Models\FcmToken 模型使用

use Prgayman\Fcm\Models\FcmToken;

$user = User::find(1);
/**
 * Get all fcm tokens
 * @param string $locale (optional)
 *
 * @return array
 */
$fcmToken = FcmToken::getTokens("en");

/**
 * Get Platform Ios Tokens
 * @param string $locale (optional)
 *
 * @return array
 */
$fcmToken = FcmToken::getIosTokens();

/**
 * Get Platform android Tokens
 * @param string $locale (optional)
 *
 * @return array
 */
$fcmToken = FcmToken::getAndroidTokens();

/**
 * Get Platform web Tokens
 * @param string $locale (optional)
 *
 * @return array
 */
$fcmToken = FcmToken::getWebTokens();

/**
 * Create Or Update Token
 * @param string $token
 * @param Illuminate\Database\Eloquent\Model $model_type (optional)
 * @param int $model_id (optional)
 * @param string $platform (optional)
 * @param string $locale (optional)
 *
 * @return Prgayman\Fcm\Models\FcmToken
 */
$fcmToken = FcmToken::createOrUpdate($token, get_class($user), $user->id );

下行消息

下行消息是一个通知消息、数据消息或两者的组合,您使用其 registration_Ids 将其发送到目标设备或多个目标设备。

以下示例需要以下使用语句

use Prgayman\Fcm\Support\Payload\Data\DataBuilder;
use Prgayman\Fcm\Support\Payload\Notification\NotificationBuilder;
use Prgayman\Fcm\Support\Payload\Options\OptionsBuilder;
use PFCM;

向设备发送下行消息

// Create Notification Builder
$notifyBuilder = new NotificationBuilder;
$notifyBuilder->setTitle("Notification Title");
$notifyBuilder->setBody("Notification Body");
$notifyBuilder->ios->setSubtitle("Sub title");
$notifyBuilder->setImage("image_url");
$notifyBuild = $notifyBuilder->build();

// Create Data Builder
$dataBuilder = new DataBuilder;
$dataBuilder->setData(["type" => "VIEW_PRODUCT"]);
$dataBuilder->addData(["type_id" => 1]);
$dataBuild = $dataBuilder->build();

// Create Options Builder
$optionsBuilder = new OptionsBuilder;
$optionsBuilder->setPriority("high"); // [normal|high]
$optionsBuilder->setContentAvailable(true);
$optionsBuild = $optionsBuilder->build();

// @var array|string
$tokens =[];

// Send Notification
$fcm = Fcm::sendNotification($tokens,$notifyBuild,$optionsBuild); // $optionsBuild (optional)

// Send Notification  With Data
$fcm = Fcm::sendNotificationWithData($tokens,$notifyBuild,$dataBuild,$optionsBuild); // $optionsBuild (optional)

// Send  Data
$fcm = Fcm::sendData($tokens,$dataBuild,$optionsBuild); // $optionsBuild (optional)

// return in number success send notification
$numberSuccess = $fcm->numberSuccess();

// return in number failure send notification
$numberFailure = $fcm->numberFailure();

// return in number modification send notification
$numberModification = $fcm->numberModification();

// return Array - you must remove all this tokens in your database
$tokensToDelete = $fcm->tokensToDelete();

// return Array (key : oldToken, value : new token - you must change the token in your database)
$tokensToModify = $fcm->tokensToModify();

// return Array - you should try to resend the message to the tokens in the array
$tokensToRetry= $fcm->tokensToRetry();

// return Array (key:token, value:error) - in production you should remove from your database the tokens
$tokensWithError = $fcm->tokensWithError();

许可证

此库是开源软件,根据 MIT 许可证 许可。

此文档的一些内容来自官方文档。您可以在 Firebase Cloud Messaging 网站 上找到完整的文档。