我正在使用 firebase 进行推送通知。并且我的“didReceiveRemoteNotification”函数没有被调用
Posted
技术标签:
【中文标题】我正在使用 firebase 进行推送通知。并且我的“didReceiveRemoteNotification”函数没有被调用【英文标题】:I am working on push notification with firebase. and my "didReceiveRemoteNotification" function is not called 【发布时间】:2018-05-11 09:35:04 【问题描述】:。我不知道为什么我的函数没有被调用,并且在控制台中也没有收到有效负载数据。请解决我的问题。提前致谢。
**Here is my code:**
FirebaseApp.configure()
Messaging.messaging().shouldEstablishDirectChannel = true
// [START register_for_notifications]
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 )
else
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound],
categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
// [END register_for_notifications]
// Add observer for InstanceID token refresh callback.
NotificationCenter.default
.addObserver(self, selector:
#selector(AppDelegate.tokenRefreshNotification),
name: NSNotification.Name.InstanceIDTokenRefresh,
object: nil)
@objc func tokenRefreshNotification(_ notification: UIViewController)
Messaging.messaging().subscribe(toTopic: "Testing")
func application(_ application: UIApplication, didReceiveRemoteNotification
userInfo: [AnyHashable : Any])
print("userInfo\(userInfo)")
【问题讨论】:
你看到这个链接了吗? ***.com/questions/40280986/… 这不起作用。请提供有关控制台中未接收有效负载数据的原因的其他信息。 #Manish Mahajan @SanpreetSingh 你在模拟器上测试吗? 没有在真机上测试。 #Khushbhu 【参考方案1】:导入用户通知
在 didFinishLaunchingWithOptions 中
if #available(iOS 10, *)
UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) (granted, error) in
application.registerForRemoteNotifications()
else
application.registerForRemoteNotifications(matching: [.badge, .sound, .alert])
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options:[.badge, .alert, .sound]) (granted, error) in
// Enable or disable features based on authorization.
application.registerForRemoteNotifications()
registerForPushNotifications(application: application)
//MARK: pushNotifications 方法:
func registerForPushNotifications(application: UIApplication)
if #available(iOS 10.0, *)
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler: (granted, error) in
if (granted)
UIApplication.shared.registerForRemoteNotifications()
else
//Do stuff if unsuccessful...
)
else //If user is not on iOS 10 use the old methods we've been using
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
print(response.notification.request.content.userInfo)
let dic = response.notification.request.content.userInfo as NSDictionary
if let aps = dic["aps"] as? [String: Any]
print(aps)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
completionHandler([.alert, .badge, .sound])
print(notification.request.content.userInfo)
let dic = notification.request.content.userInfo as NSDictionary
if let aps = dic["aps"] as? [String: Any]
print(aps)
func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable : Any])
// Print notification payload data
print("Push notification received: \(data)")
【讨论】:
【参考方案2】:尝试使用didreceiveremotenotification completionhandler
方法。不要忘记在项目设置部分的功能选项卡中启用推送通知功能。
【讨论】:
以上是关于我正在使用 firebase 进行推送通知。并且我的“didReceiveRemoteNotification”函数没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Firebase Analytics 事件记录 OneSignal 推送通知