我想使用Firebase云消息传递,所以我安装了kreait laravel firebase package 我在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。 帮助非常感谢!
答案 0 :(得分:2)
经过一番尝试,我找到了这个命令
php artisan优化:清除
问题在于,在Kreait库的文件“ Factory.php”中,搜索firebase .json文件的函数使用命令
Util :: getenv('FIREBASE_CREDENTIALS')
首先,我解锁了用于写入的文件,并检查了“ env('FIREBASE_CREDENTIALS')”命令是否有效,并且在我写完所有命令后都无法正常工作。