You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Capacitor推送通知问题:无法获取Device Token且遇Xcode弃用警告

问题解答:Capacitor推送通知无法获取Device Token + InstanceID弃用警告

嘿,这俩问题绝对是直接关联的!我来给你拆解清楚:

为什么两者有关联?

你看到的弃用警告是因为Firebase已经彻底废弃了FIRInstanceID API,把实例ID管理和FCM注册Token获取的功能拆分到了FirebaseInstallations和FirebaseMessaging两个模块中。更关键的是,旧的InstanceID API已经无法正常获取有效的FCM Token了——这就是你在Capacitor里拿不到Device Token的核心原因!旧API不仅会触发警告,根本已经没法干活了。

完整解决方案

1. 确保Firebase依赖是最新版

先检查你的iOS项目Podfile,确保包含最新的FirebaseInstallations和FirebaseMessaging,然后执行pod update更新依赖:

# Podfile里的相关依赖
pod 'Firebase/Core'
pod 'Firebase/Messaging'
pod 'Firebase/Installations'

2. 替换AppDelegate.swift中的旧代码

首先导入新的模块:

import FirebaseInstallations
import FirebaseMessaging

然后删掉所有InstanceID相关的代码,替换成以下逻辑:

// (可选)如果需要获取安装ID,用这个
Installations.installations().installationID { (installationId, error) in
  if let error = error {
    print("获取安装ID失败: \(error)")
  } else if let id = installationId {
    print("安装ID: \(id)")
  }
}

// 获取FCM注册Token(这是Capacitor需要的Device Token)
Messaging.messaging().token { (token, error) in
  if let error = error {
    print("获取FCM Token失败: \(error)")
  } else if let fcmToken = token {
    print("FCM Token: \(fcmToken)")
    // 手动通知Capacitor已获取Token(如果插件自动监听失效的话)
    NotificationCenter.default.post(
      name: .capacitorDidRegisterForRemoteNotifications,
      object: nil,
      userInfo: ["token": fcmToken]
    )
  }
}

同时确保Firebase在AppDelegate里正确初始化:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  // 其他初始化代码...
  return true
}

3. 检查Capacitor推送插件配置

确保@capacitor/push-notifications插件已正确安装,并且在capacitor.config.ts中启用:

import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.your.app.id',
  appName: 'Your App',
  webDir: 'dist',
  plugins: {
    PushNotifications: {
      presentationOptions: ["badge", "sound", "alert"],
    },
  },
};

export default config;

4. 前端代码正确监听Token

在你的前端代码中,用Capacitor插件的API监听Token:

import { PushNotifications } from '@capacitor/push-notifications';

async function setupPushNotifications() {
  try {
    // 请求推送权限
    const permStatus = await PushNotifications.requestPermissions();
    if (permStatus.receive !== 'granted') {
      throw new Error('推送权限未授权');
    }

    // 注册推送并获取Token
    const tokenResult = await PushNotifications.register();
    console.log('获取到的Device Token:', tokenResult.value);
    // 这里可以把Token发送到你的后端保存
  } catch (error) {
    console.error('推送通知设置失败:', error);
  }
}

// 页面加载时调用
setupPushNotifications();

额外注意事项

  • 确保GoogleService-Info.plist已经正确添加到Xcode项目中(要勾选"Copy items if needed")
  • 测试时记得用真机,模拟器可能无法获取Token
  • 如果还是有问题,可以尝试清理Xcode缓存(Cmd+Shift+K)并重新构建项目

内容的提问来源于stack exchange,提问作者MrRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:01:50