搜尋

首頁  >  問答  >  主體

與 FCM 整合時,Laravel 通知顯示“註冊令牌不是有效的 FCM 註冊令牌”

我已將 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粉985686557P粉985686557336 天前542

全部回覆(1)我來回復

  • P粉301523298

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

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

    回覆
    0
  • 取消回覆