NativeScript-Vue集成Firebase推送如何获取移动端设备Token
适配修改方案
首先先修正你现有代码里的笔误:初始化回调中你误写的fpApp.auth应为入参fbApp,否则运行会报变量未定义错误。
获取Firebase推送Token的逻辑需要放在Firebase初始化完成的回调内执行,同时需要主动申请系统通知权限,否则高版本安卓、iOS系统不会返回推送Token。
修改后的完整app.js代码如下:
import Vue from 'nativescript-vue' import Home from './components/Home' new Vue({ render: (h) => h('frame', [h(Home)]), }).$start() import { firebase } from '@nativescript/firebase-core' import '@nativescript/firebase-auth'; // 仅需导入一次 import '@nativescript/firebase-storage'; import '@nativescript/firebase-messaging'; firebase().initializeApp().then(async fbApp => { console.log("Firebase app initialized!", fbApp.name) //[DEFAULT] console.log('12'); console.log('fbApp : ', fbApp.auth); firebase().auth().addAuthStateChangeListener(async (user) => { if (!user) { console.log("firebase.auth done"); } else { console.log("firebase.auth else done"); } }) // 推送相关逻辑 const messaging = firebase().messaging() // 注册消息接收、Token刷新回调 messaging.onMessage(async (message) => { console.log("[Firebase] 收到推送消息:", { message }); }) messaging.onToken(async (token) => { console.log("[Firebase] 获取到推送Token:", { token }); // 此处可将token存储到本地,或上报给业务服务端用于定向推送 }) try { // 申请系统通知权限 await messaging.requestPermission() // 注册远程推送服务 await messaging.registerDeviceForRemoteMessages() // 主动获取一次当前Token,避免回调漏触发 const currentToken = await messaging.getToken() console.log("[Firebase] 主动获取当前Token:", currentToken) } catch (err) { console.log("推送权限申请/注册失败:", err) } })
注意事项
- 你找到的参考代码是旧版插件API,新版
@nativescript/firebase-messaging使用onMessage、onToken方法注册回调,不需要传入对象形式的配置 - 必须先调用
requestPermission申请通知权限,用户同意授权后才能正常获取Token - 安卓端要确认
google-services.json配置正确,iOS端要确认GoogleService-Info.plist配置正确、已开启应用推送能力,否则无法正常获取Token - Token会在应用重装、用户清除应用数据、Token过期时自动刷新,
onToken回调会在刷新时自动触发,不需要额外轮询
内容的提问来源于stack exchange,提问作者Seoho.An
相关产品推荐
相关产品推荐

