我想使用 Firebase 云消息传递,所以我安装了 kreait laravel firebase 包 我在 firebase 控制台中创建了一个服务帐户,将下载的 .json 文件包含在 laravel 的根文件夹中并使用
FIREBASE_CREDENTIALS=app-XXXXX-firebase-adminsdk-XXXX-XXXXXXX.json
在.env中
还创建了一个用于向设备发送推送通知的控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Kreait\Firebase\Messaging\CloudMessage;
use Kreait\Firebase\Messaging\Notification;
class PushNotifactionController extends Controller
{
public function sendPush(){
$messaging = app('firebase.messaging');
$deviceTokens = Auth::user()->deviceTokens()->pluck('device_token')->toArray();
$message = CloudMessage::new();
$message->withNotification(Notification::create('Title', 'Body'));
$sendReport = $messaging->sendMulticast($message, $deviceTokens);
return response()->json([
'Successful' => $sendReport->successes()->count(),
'Failed' => $sendReport->failures()->count()
]);
}
}
如果我启动 Flutter 应用程序,firebase 包会创建一个设备令牌,并将其存储在数据库中。 但如果我想用邮递员触发
sendPush()
,我会收到此错误:
"message": "Unable to create the messaging service without a project ID",
"exception": "Kreait\\Firebase\\Exception\\RuntimeException",
从 Firebase 控制台,我可以向我的手机发送通知。
包应自动发现服务帐户和项目 ID。 非常感谢帮助!
经过一番尝试,我找到了这个命令
php artisan 优化:清晰
问题是在 Kreait 库的“Factory.php”文件中搜索 firebase .json 文件的函数使用命令
Util::getenv('FIREBASE_CREDENTIALS')
首先我解锁这个文件进行写入,并检查命令“env('FIREBASE_CREDENTIALS')”是否有效,在我编写的命令完美运行之后,它不起作用。
如果您正在寻找一种在 Laravel 中发送 Firebase Cloud Messaging (FCM) 推送通知的简单方法,我开发了一个名为 heyharpreetsingh/fcm 的包,可以简化该过程。它允许您高效地向移动设备(Android、iOS)和网络平台发送通知。
如何使用: 通过 Composer 安装软件包:
composer require heyharpreetsingh/fcm
在 bootstrap/providers.php (Laravel 11) 或 config/app.php (Laravel 10 及以下版本) 中注册服务提供者:
Heyharpreetsingh\FCM\Providers\FCMServiceProvider::class,
通过在 Firebase 控制台中生成私钥并在 .env 文件中添加 JSON 文件的路径来设置 Firebase 凭证:
FCM_GOOGLE_APPLICATION_CREDENTIALS=storage/ServiceAccount.json
向各个设备发送通知,如下所示:
use Heyharpreetsingh\FCM\Facades\FCMFacade;
FCMFacade::send([
"message" => [
"token" => "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // Device token
"notification" => [
"body" => "This is an FCM notification message!",
"title" => "FCM Message"
]
]
]);
本指南对您有帮助吗?请支持我的工作,留下👏鼓掌以表谢意。