- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了 FirebaseCloudMessaging
,当应用程序处于后台
时收到通知
,但当我安装新的应用程序时willPresent
code> 和 didReceive
通知 delegate
在 30 到 35 分钟后不会被调用,它将开始调用。
只有当我通过删除旧应用程序来安装应用程序时才会发生这种情况。
这是我的代码,你可以检查我哪里出错了
import UIKit
import Firebase
import UserNotifications
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Register for push notification
self.registerForNotification()
FirebaseApp.configure()
Messaging.messaging().delegate = self
return true
}
}
extension AppDelegate: UNUserNotificationCenterDelegate {
//MARK: - Register For RemoteNotification
func registerForNotification() {
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { granted, error in }
UIApplication.shared.registerForRemoteNotifications()
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
#if DEVELOPMENT
Messaging.messaging().setAPNSToken(deviceToken, type: .sandbox)
#else
Messaging.messaging().setAPNSToken(deviceToken, type: .prod)
#endif
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
debugPrint("Unable to register for remote notifications: \(error.localizedDescription)")
}
//MARK: - UNUserNotificationCenterDelegate
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
debugPrint(userInfo)
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
debugPrint(userInfo)
completionHandler([.badge, .alert, .sound])
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
print(userInfo)
completionHandler()
}
}
extension AppDelegate: MessagingDelegate {
//MARK: - MessagingDelegate
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print(fcmToken)
}
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
print(remoteMessage.appData)
}
}
感谢帮助
最佳答案
用此代码替换 registerForNotification 函数代码。也许会有帮助
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { (isAllow, error) in
if isAllow {
Messaging.messaging().delegate = self
}
}
UIApplication.shared.registerForRemoteNotifications()
当用户允许通知时,将调用此委托(delegate)方法
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print(fcmToken)
}
点击通知时
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
//when notification is tapped
}
当应用程序处于前台时将调用此方法
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
//this method is called when notification is about to appear in foreground
completionHandler([.alert, .badge, .sound]) // Display notification as
}
关于ios - 当用户在前台且应用程序全新安装时,不会调用 willPresent 和 didReceive 通知委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56372910/
我试图仅在工作日通知用户并且不想使用 for 循环来通知用户,因此通知重复 bool 为真。当应用程序打开时,willPresent 函数可以工作,但是当应用程序进入后台时,willPresent 函
我正在使用 OneSignal 发送推送通知,我遇到了在 iOS 10 上方法 func userNotificationCenter (_ center: UNUserNotificationCen
我想弄清楚我是否可以通过本地通知来实现我的目标,或者我是否需要切换到远程通知。 我正在通过构建一个闹钟程序来练习 iOS 10/Swift 3,该程序会在一天中的固定时间播放 RSS 更新的广播节目的
我有一个正常工作的应用程序,它的通知显示效果很好。现在我想处理一些通知事件,比如当用户点击横幅时。 我的 iOS 部署目标是 11.0,与我的部署目标相同。 我在 AppDelegate.swift
我已经实现了 FirebaseCloudMessaging,当应用程序处于后台时收到通知,但当我安装新的应用程序时willPresent code> 和 didReceive 通知 delegate
当我第一次运行我的应用程序时,模拟器能够在应用程序处于前台时显示通知。 当我重新启动应用程序时 didReceive notification:(即来自 iOS 9 的通知方法)被调用而不是 will
我是一名优秀的程序员,十分优秀!