與 FCM 整合時,Laravel 通知顯示'註冊令牌不是有效的 FCM 註冊令牌”
P粉985686557
P粉985686557 2023-12-13 15:19:09
0
1
571

我已將 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();
}

最後,如果您像這樣建立程式碼,您將擁有一般關係,並利用這種關係使您的程式碼更加靈活。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板