Laravel kreait 包无法在没有项目 ID 的情况下创建消息服务

问题描述 投票:0回答:2

我想使用 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 laravel firebase
2个回答
2
投票

经过一番尝试,我找到了这个命令

php artisan 优化:清晰

问题是在 Kreait 库的“Factory.php”文件中搜索 firebase .json 文件的函数使用命令

Util::getenv('FIREBASE_CREDENTIALS')

首先我解锁这个文件进行写入,并检查命令“env('FIREBASE_CREDENTIALS')”是否有效,在我编写的命令完美运行之后,它不起作用。


0
投票

如果您正在寻找一种在 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"
        ]
    ]
]);

本指南对您有帮助吗?请支持我的工作,留下👏鼓掌以表谢意。

© www.soinside.com 2019 - 2024. All rights reserved.