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

Ionic iOS端Firebase推送双Token问题:是否需存储FCM Token?

Ionic + Firebase推送通知iOS端Token问题解决

问题背景

  • 基于Ionic开发iOS/Android跨平台应用,通过Firebase实现推送通知,Android端运行正常:通过PushNotifications.addListener('registration')回调获取Token并存储到后端
  • iOS端出现两个不同Token:
    • APNs设备Token:由didRegisterForRemoteNotificationsWithDeviceToken方法返回,与Ionic的registration回调内获取的Token一致,示例值:639f6c0f86e74db0aaab6889832ad040f00e9e590319a513bacc1579a968f954
    • FCM Token:由MessagingDelegate的didReceiveRegistrationToken方法返回,示例值:fcPGyQDykEP7nvC5k6-JIJ:APA91bEwQ7biKli9LaP4NrB_s3aqzD2iKw7wXc58_OrrN_m3v5zlFjFcWiFX9CUqij-JOppOKwkuh-g60lETrHdt7I9o2yHJXMT8crp7
  • 实际测试仅FCM Token可正常接收推送,APNs Token无效

核心原因

两个Token的作用完全不同:

  • APNs设备Token是苹果原生推送服务的设备标识,仅适用于直接调用APNs接口推送
  • FCM Token是Firebase生成的跨平台统一标识,Firebase会自动通过该Token将推送请求路由到对应平台(iOS走APNs,Android走FCM服务),因此使用Firebase推送必须依赖FCM Token

解决方案

需将FCM Token存储到后端,替换原有的APNs Token,具体步骤如下:

1. iOS端传递FCM Token到Ionic层

保留MessagingDelegate实现,修改通知逻辑,让Ionic能监听FCM Token更新:

extension AppDelegate: MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
        guard let token = fcmToken else { return }
        print("Firebase registration token: \(token)")
        // 发送通知给Ionic层
        NotificationCenter.default.post(
            name: Notification.Name("FCMTokenUpdated"),
            object: nil,
            userInfo: ["fcmToken": token]
        )
    }
}

2. Ionic层监听FCM Token并更新后端

在Ionic代码中添加监听,获取到FCM Token后同步更新用户的mobileToken:

import { Plugins } from '@capacitor/core';
const { App } = Plugins;

// 组件初始化时添加监听
App.addListener('FCMTokenUpdated', (info: { fcmToken: string }) => {
    const fcmToken = info.fcmToken;
    console.debug('Received FCM Token:', fcmToken);
    
    if (user.mobileToken !== fcmToken) {
        this.authService.getUser().then(response => {
            user.mobileToken = fcmToken;
            this.userService.updateUser(user).subscribe(response => {
                const message = `已为用户 ${user.title} ${user.firstname} ${user.surname} 更新FCM Token`;
                this.toastService.presentToast('bottom', message, 500);
                console.debug(message);
            }, error => {
                console.error('更新Token失败:', error);
            });
        });
    }
});

3. 统一跨平台Token逻辑

Android端原本PushNotifications.addListener('registration')回调返回的就是FCM Token,无需修改;iOS端改用FCM Token后,后端只需统一存储FCM Token即可,Firebase会自动处理跨平台的推送路由。

注意事项

  • FCM Token会在App重装、设备切换、系统更新等场景下自动更新,必须确保Token更新时同步到后端
  • 无需再使用APNs Token,统一依赖FCM Token即可实现Firebase推送

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:22:23