我正在与远程Web API开发人员合作,目前我们正在努力将推送消息从服务器发送到iOS和Android设备。我们通过 OAuth API 发送设备令牌。(对于 iOS,设备令牌是通过在 AppDelegate 启动时向 APNS 服务注册远程服务来获取的)。奇怪的是,Android可以收到推送通知,但iOS设备却没有。但是,当我尝试使用 Firebase 控制台 ->增长 -> 通知 -> 新消息 -> 并定位所有 iOS 设备时,所有注册到推送通知的 iOS 设备都会收到推送通知。你能帮我指出问题出在哪里吗?Web 服务器正在使用 nodeJs。
我做过的事情,我根据本教程做了:
- 在 Firebase 项目中创建新应用。
- 向应用提供相同的产品捆绑 ID。
- 将 google plist 导入 Xcode 项目。
- 向应用程序提供开发和生产证书 .p12。
- 通过 Cocoapods 安装 Firebase/Core 和 Firebase/Messaging 。
- 使用此代码注册远程通知(在目标部署 iOS 版本 9.0 和 10.0 中尝试过,两者都产生相同的结果):
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
// For iOS 10 data message (sent via FCM
Messaging.messaging().delegate = self
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
FirebaseApp.configure()
return true
}
从所有这些准备工作中,如果我在真实的iOS设备中运行该应用程序,然后将其锁定,则我在Firebase iOS应用程序中广播到iOS设备的任何消息都将显示在锁定屏幕通知中。但不是来自 Web API 的消息,该消息定向到应用程序中登录的帐户(该消息定向到使用该帐户登录的所有 android 和 iOS 设备 - 它显示在 android 设备上,但不显示在 iOS 设备上)。
我是FCM的新手。我通常使用 APNS。我可能不太了解修复服务器端的条款,因为我不太了解 nodeJs,所以如果您对服务器端有一些建议,请详细说明,以便我可以与 Web API 开发人员讨论。感谢您的帮助。
事实证明,我需要发送到服务器的不是APNS令牌,而是Firebase令牌,可在此处找到:
https://firebase.google.com/docs/cloud-messaging/ios/client#monitor-token-generation