首页 > 解决方案 > Firebase 推送通知不适用于单个设备 ios,但适用于用户段

问题描述

我正在使用 firebase 推送通知并使用离子/电容器开发移动应用程序。我注册推送通知并取回这样的令牌......

PushNotifications.requestPermission().then( result => {
  if (result.granted) {
    PushNotifications.register();
  }
});

PushNotifications.addListener('registration',
  (token: PushNotificationToken) => {
    alert('Push registration success, token: ' + token.value);
    console.log(token.value);
  }
);

在firebase控制台中,当我在用户段中定位我的应用程序时,我可以成功发送和接收通知,但是当我尝试通过使用发送测试消息复制和粘贴令牌来定位单个设备时,我没有收到推送通知。注意:这对我在 Android 上运行良好。

令牌看起来像这样...... BAAEF129E8F596F1305D0FEA2F50E21B2768FEFCA83CF19602CA0183077E441D

标签: iosfirebaseionic-frameworkapple-push-notificationscapacitor

解决方案


Capacitor 使用 APNS 进行推送,您获得的令牌是 APNS 令牌,而这些令牌不适用于 FCM。不确定您是如何将 FCM 集成到 Capacitor 中的,但您应该将 APNS 令牌转换为 FCM 令牌。

是这样的

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken
        InstanceID.instanceID().instanceID { (result, error) in
            if let error = error {
                NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidFailToRegisterForRemoteNotificationsWithError.name()), object: error)
            } else if let result = result {
                NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidRegisterForRemoteNotificationsWithDeviceToken.name()), object: result.token)
            }
        }
    }

有关更多信息,您可以查看有关如何将 FCM 集成到电容器中的指南。


推荐阅读