我已將 FCM(Firebase 云消息傳遞)通知與我的 Laravel 項(xiàng)目集成。
我在 User
模型中添加了方法 routeNotificationForFcm
。
當(dāng)直接在方法中指定 firebase 設(shè)備令牌時(shí),通知系統(tǒng)工作正常,但當(dāng)從數(shù)據(jù)庫(kù)訪問(wèn)令牌時(shí),通知系統(tǒng)無(wú)法工作。
添加的工作代碼如下。
public function routeNotificationForFcm() { return ['dJQqgKlETpqCB3uxHtfUbL:APA91bFdrcXZMNH0iMjkXMoop_b_nI3xF92DU0P1nrHVQsTDK4w-OH5QR6BsnWIV-wSxSV7avzuBmLVizNyrRcKfAQz6H66JEP9rWKUeIi7m7wEZwRiuW_WdCW_LaZajdFZlxfCUonCL']; }
不起作用的代碼如下(數(shù)據(jù)庫(kù)查詢)
public function routeNotificationForFcm() { return $this->from('fcm_tokens')->where('user_id', $user->id)->pluck('device_token'); }
顯示的錯(cuò)誤消息是注冊(cè)令牌不是有效的 FCM 注冊(cè)令牌
根據(jù) Laravel 文檔 pluck return Collection
- 所以你只需要在查詢/集合上調(diào)用 pluck
后調(diào)用 toArray()
即可返回數(shù)組
,就像您之前對(duì)模擬令牌所做的那樣。
public function routeNotificationForFcm() { return $this->from('fcm_tokens')->where('user_id', $user->id)->pluck('device_token')->toArray(); }
您還調(diào)用了$user->id
,但在此范圍內(nèi)沒(méi)有。
解決方案很簡(jiǎn)單,您需要傳遞值或從 $this
獲取值。
public function routeNotificationForFcm() { return $this->from('fcm_tokens')->where('user_id', $this->id)->pluck('device_token')->toArray(); }
但我個(gè)人建議您為此定義單獨(dú)的關(guān)系
public function fcmTokens() { return $this->hasMany(FcmToken::class); }
FcmToken
- 只是猜測(cè)您如何命名模型。
然后您可以像這樣重用它來(lái)返回特定User
模型的相關(guān)令牌的array
public function routeNotificationForFcm() { return $this->fcmTokens()->pluck('device_token')->toArray(); }
最后,如果您像這樣構(gòu)建代碼,您將擁有一般關(guān)系,并利用這種關(guān)系使您的代碼更加靈活。