谷歌更新后,如何用Kreait FCM工具包生成浏览器设备令牌?
解决Kreait FCM浏览器设备令牌生成问题
你当前的代码存在核心误解:Kreait Firebase PHP SDK是服务端工具,它无法直接生成浏览器的设备令牌——浏览器令牌必须在前端通过Firebase Web SDK获取,再传递到后端存储和使用。Bard生成的代码里$messaging->getToken()方法并不存在,这是导致代码无法运行的直接原因。
正确的实现流程
前端(浏览器)获取设备令牌
使用Firebase Web SDK在用户浏览器中生成FCM令牌,代码示例:// 初始化Firebase(替换为你的项目配置) const firebaseConfig = { apiKey: "YOUR_API_KEY", authDomain: "YOUR_AUTH_DOMAIN", projectId: "YOUR_PROJECT_ID", storageBucket: "YOUR_STORAGE_BUCKET", messagingSenderId: "YOUR_SENDER_ID", appId: "YOUR_APP_ID" }; firebase.initializeApp(firebaseConfig); const messaging = firebase.messaging(); // 请求通知权限并获取令牌 async function getFCMToken() { try { const permission = await Notification.requestPermission(); if (permission === "granted") { const token = await messaging.getToken({ vapidKey: "YOUR_VAPID_KEY" }); // 将令牌发送到后端存储(比如通过AJAX/API) console.log("FCM令牌:", token); // 示例:发送到后端 await fetch('/save-token.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: token }) }); } } catch (error) { console.error("获取令牌失败:", error); } } // 调用函数 getFCMToken();注意:VAPID密钥需要在Firebase控制台的「云消息传递」>「Web配置」中生成。
后端(PHP)存储令牌并发送通知
后端接收前端传来的令牌并存储(比如数据库),之后使用Kreait SDK发送推送通知,代码示例:require __DIR__ . '/vendor/autoload.php'; use Kreait\Firebase\Factory; use Kreait\Firebase\Messaging\CloudMessage; // 初始化Firebase工厂 $factory = (new Factory)->withServiceAccount('service-account-file.json'); $messaging = $factory->createMessaging(); // 从数据库或请求中获取存储的设备令牌 $deviceToken = "USER_BROWSER_TOKEN_FROM_DATABASE"; // 创建并发送消息 try { $message = CloudMessage::withTarget('token', $deviceToken) ->withNotification([ 'title' => '测试通知', 'body' => '这是一条来自Kreait FCM的推送通知' ]); $messaging->send($message); echo "通知发送成功"; } catch (\Exception $e) { echo "发送失败: " . $e->getMessage(); }
关键说明
- 浏览器令牌是与用户浏览器实例绑定的,每个用户的每个浏览器都会生成唯一令牌,必须由前端主动获取。
- 后端的Kreait SDK仅负责发送通知,不具备生成客户端令牌的能力。
内容的提问来源于stack exchange,提问作者gaurav sharma
相关产品推荐
相关产品推荐

