Firebase推送通知不适用于iOS
我想使用Firebase云消息传递实现推送通知 我已经设置了我的项目并上传了APN证书 我正在使用Firebase推送通知不适用于iOS,ios,swift,firebase,firebase-cloud-messaging,apple-push-notifications,Ios,Swift,Firebase,Firebase Cloud Messaging,Apple Push Notifications,我想使用Firebase云消息传递实现推送通知 我已经设置了我的项目并上传了APN证书 我正在使用fcmtoken向我的真实设备发送测试消息 我在AppDelegate中的配置如下 func应用程序(application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.launchOptions键:任意])->Bool{ FirebaseApp.configure() registerForPus
fcmtoken
向我的真实设备发送测试消息
我在AppDelegate中的配置如下
func应用程序(application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.launchOptions键:任意])->Bool{
FirebaseApp.configure()
registerForPushNotifications(应用程序:应用程序)
返回真值
}
func注册表形式通知(应用程序:UIApplication){
UnuseNotificationCenter.current().delegate=self
Messaging.Messaging().delegate=self
let authOptions:UNAuthorizationOptions=[.alert、.badge、.sound]
UNUserNotificationCenter.current().requestAuthorization(选项:authOptions){(已授权,错误)在中
如果let error=error{
打印(错误。本地化描述)
返回
}
如获授权{
打印(“授权”)
DispatchQueue.main.async{
UIApplication.shared.registerForRemoteNotifications()
}
}否则{
打印(“拒绝”)
}
}
附录.注册处相关信息()
}
func消息传递(u消息传递:消息传递,didReceiveRegistrationToken fcmToken:String){
打印(“Firebase注册令牌:\(fcmToken)”)
let dataDict:[String:String]=[“token”:fcmToken]
NotificationCenter.default.post(名称:Notification.name(“FCMToken”),对象:nil,用户信息:dataDict)
//TODO:如有必要,将令牌发送到应用程序服务器。
//注意:每次应用程序启动时以及每当生成新令牌时,都会触发此回调。
}
func应用程序(u应用程序:ui应用程序,
DidReceiveMemotentification通知:[AnyHashable:Any],
fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult)->Void{
打印(“已发送标识”)
如果Auth.Auth()可以处理通知(通知){
completionHandler(.noData)
返回
}
//此通知与身份验证无关,开发人员应处理它。
}
它应该会看到
已发出的声名
,但它也没有设置喙点似乎这部分永远不会被原谅,因此消息不会出现除非您已启用Swizzling,否则我不会在您的AppDelegate中看到这一点
func application(application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
Messaging.messaging().apnsToken = deviceToken
}
此代码将您的APNs设备令牌映射到FCM令牌,这是必需的,因为APNs令牌是您发送推送通知的唯一方式。@Eilon使用我的设备的fcmToken从FCM控制台发送测试消息,我使用这是唯一的“DidReceiveMemotentification”未调用或您根本没有收到通知?@KonstantinOznobihin是的,它只是未调用的通知。您是否在Firebase控制台/项目设置/云消息中添加了APNs身份验证密钥或证书?@KonstantinOznobihin是的,我检查了它没有解决我的问题始终建议为给定的问题提供解释代码,你写的细节越多,答案就越有用
func sendPushNotification(to token: String, title: String, body: String, userInfo: [String: Any]) {
let payload: [String: Any] = ["title": title, "body": body, "sound": "sound.caf"]
let paramString: [String: Any] = ["to": token, "notification": payload, "data": userInfo]
let urlString = "https://fcm.googleapis.com/fcm/send"
let url = NSURL(string: urlString)!
let request = NSMutableURLRequest(url: url as URL)
request.httpMethod = "POST"
request.httpBody = try? JSONSerialization.data(withJSONObject:paramString, options: [.prettyPrinted])
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("key=\(Keys.gmsServerKey)", forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
do {
if let data = data {
if let object = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [String: Any] {
NSLog("Received data: \(object))")
}
}
} catch let err as NSError {
print(err.debugDescription)
}
}
task.resume()
}