与 FCM 集成时,Laravel 通知显示'注册令牌不是有效的 FCM 注册令牌”
P粉985686557
P粉985686557 2023-12-13 15:19:09
0
1
556

我已将 FCM(Firebase 云消息传递)通知与我的 Laravel 项目集成。 我在 User 模型中添加了方法 routeNotificationForFcm 。 当直接在方法中指定 firebase 设备令牌时,通知系统工作正常,但当从数据库访问令牌时,通知系统无法工作。

添加的工作代码如下。

public function routeNotificationForFcm()
{
    return ['dJQqgKlETpqCB3uxHtfUbL:APA91bFdrcXZMNH0iMjkXMoop_b_nI3xF92DU0P1nrHVQsTDK4w-OH5QR6BsnWIV-wSxSV7avzuBmLVizNyrRcKfAQz6H66JEP9rWKUeIi7m7wEZwRiuW_WdCW_LaZajdFZlxfCUonCL'];
}

不起作用的代码如下(数据库查询)

public function routeNotificationForFcm()
{
    return $this->from('fcm_tokens')->where('user_id', $user->id)->pluck('device_token');
}

显示的错误消息是注册令牌不是有效的 FCM 注册令牌

P粉985686557
P粉985686557

全部回复(1)
P粉301523298

根据 Laravel 文档 pluck return Collection - 所以你只需要在查询/集合上调用 pluck 后调用 toArray() 即可返回数组,就像您之前对模拟令牌所做的那样。

public function routeNotificationForFcm()
{
    return $this->from('fcm_tokens')->where('user_id', $user->id)->pluck('device_token')->toArray();
}

您还调用了$user->id,但在此范围内没有。 解决方案很简单,您需要传递值或从 $this 获取值。

public function routeNotificationForFcm()
{
    return $this->from('fcm_tokens')->where('user_id', $this->id)->pluck('device_token')->toArray();
}

但我个人建议您为此定义单独的关系

public function fcmTokens()
{
    return $this->hasMany(FcmToken::class);
}

FcmToken - 只是猜测您如何命名模型。 然后您可以像这样重用它来返回特定User模型的相关令牌的array

public function routeNotificationForFcm()
{
    return $this->fcmTokens()->pluck('device_token')->toArray();
}

最后,如果您像这样构建代码,您将拥有一般关系,并利用这种关系使您的代码更加灵活。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板