我已將 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粉3015232982023-12-14 14:09:21
根據Laravel 文件 < code>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(); }
最後,如果您像這樣建立程式碼,您將擁有一般關係,並利用這種關係使您的程式碼更加靈活。