为啥我无法在 iOS 10 中处理收到的推送通知?
Posted
技术标签:
【中文标题】为啥我无法在 iOS 10 中处理收到的推送通知?【英文标题】:Why I'm not able to handle received push notifications in iOS 10?为什么我无法在 iOS 10 中处理收到的推送通知? 【发布时间】:2016-12-08 11:48:54 【问题描述】:我已经导入了
import UserNotifications
和连接的代表:
UNUserNotificationCenterDelegate
并将委托设置为自我:
UNUserNotificationCenter.currentNotificationCenter().delegate = self
FIRMessaging.messaging().remoteMessageDelegate = self
最后我有了这些功能:
@available(ios 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void)
//Handle the notification
print("User Info = ",notification.request.content.userInfo)
completionHandler([.Alert, .Badge, .Sound])
@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void)
//Handle the notification
print("User Info = ",response.notification.request.content.userInfo)
completionHandler()
但是当我在真实设备上和后台模式下测试时,我的日志上没有任何打印。
有什么问题?
internal func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])
print(userInfo)
// Print message ID.
print("Message ID: \(userInfo["gcm.message_id"]!)")
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)
// Print message ID.
print("Message ID: \(userInfo["gcm.message_id"]!)")
// Print full message.
print(userInfo)
【问题讨论】:
你必须使用断点调试你的代码。如果没有调用此方法 didReceiveRemoteNotification。然后你必须检查后端。 只有当我在应用程序中时它才会调试。但是当我处于后台模式时,我收到了通知,但无法处理@Amanpreet 请检查下面的答案。以及为什么要使用“didReceiveRemoteNotification”这两种方法? 【参考方案1】:请尝试以下代码。您只需要保存数据。
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> ())
let info : NSDictionary! = userInfo as! NSDictionary
if info != nil
let aps = info["aps"] as? NSDictionary
UserDefaults.standard.set(aps, forKey: "aps")
并在您想使用的地方使用用户默认值。
【讨论】:
查看***.com/questions/39490605/… 我已经更新了我的答案。你可以在这里查看***.com/questions/41035878/… 你肯定必须调用完成句柄3r ??【参考方案2】:func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
let info = userInfo as! [String : AnyObject]
let aps = info["aps"] as? NSDictionary
print(aps)
【讨论】:
以上是关于为啥我无法在 iOS 10 中处理收到的推送通知?的主要内容,如果未能解决你的问题,请参考以下文章