- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
尝试使用 Firebase 注册远程通知,但是在执行以下代码时出现错误:
UNUserNotificationCenter is only available on iOS 10.0 or newer
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
var soundID: SystemSoundID = 0
let soundFile: String = NSBundle.mainBundle().pathForResource("symphony", ofType: "wav")!
let soundURL: NSURL = NSURL(fileURLWithPath: soundFile)
AudioServicesCreateSystemSoundID(soundURL, &soundID)
AudioServicesPlayAlertSound(soundID)
Fabric.with([Twitter.self])
//Firebase configuration
FIRApp.configure()
//Resource code from stackoverflow to create UNUserNotificationCenter
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
application.registerForRemoteNotifications()
return true
}
通过创建基于操作系统版本号的 if 语句,执行简单的“修复”并不能解决我的问题。对于 UserNotifications 框架的这个解决方案,我应该做什么或考虑什么?
最佳答案
一方面,使用新的 UNUserNotificationCenter
,如果用户授予权限,您只想注册远程通知。您的代码设置方式,无论许可如何,您都试图这样做,这可能是原因之一。你应该这样做:
import UserNotifications
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
return true
}
如果您需要检查用户的操作系统是否低于 iOS 10.0 - 您可以尝试像这样包含旧系统:
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
} else {
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
UIUserNotificationType.Badge, categories: nil))
}
让我知道这是否有效,以及这是否是您想要完成的。如果不是,我会删除我的答案。
关于swift - 在 iOS 10 上使用 UNUserNotificationCenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912386/
按照文档的要求,如果它们在同一个线程上,则一个接一个地删除和添加具有匹配标识符的通知对我来说似乎工作正常。如果它们在不同的线程上,则新添加的通知将被上一行的 delete 调用删除。第一个案例保证有效
我正在尝试使用适用于 iOS 10 的 UserNotifications 框架。 如果我不传入触发器,通知似乎工作得很好。它们会立即出现在应用程序中。但我需要为触发器传递一个延迟。谁能看到我的代码中
我有一个用 Swift 编写的应用程序,它使用 UNUserNotificationCenter,当该应用程序位于前台时,它会显示通知。 我想做的是在通知已发送且应用程序位于前台后更新 UI 以下显示
我有一个 Xcode 项目,Xcode 8.1 (8B62),有两个目标,一个用于应用程序的付费版本,另一个用于免费版本。他们都管理远程推送通知。由于我使用新框架 UNUserNotification
我想在应用程序处于前台时显示推送通知的横幅。我实现了这个方法来显示通知: func userNotificationCenter(_ center: UNUserNotificationCenter,
运行下面的代码不会在屏幕右上角显示通知(作为横幅或警报)。通知显示在通知中心。 我确保我的系统上禁用了“请勿打扰”。我还尝试了系统偏好设置 -> 通知 -> 我的应用程序名称中的“横幅”和“警报”设置
我使用的是 MacOS Mojave,并且从使用现已弃用的 NSUserNotification 切换到 UNUserNotificationCenter。我的应用程序出现在系统偏好设置通知中,并选择
我刚刚对 iOs 10 和其他版本的通知进行了更改: if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.cu
我现在如何调用本地通知?而不是在未来设定一个时间间隔?此代码将在未来 5 秒后显示通知。我希望现在就调用它。 let trigger = UNTimeIntervalNotificationTrigg
如果服务器向用户发送推送通知,但用户没有点击该通知,应用程序仍然可以确定有推送发送到手机并使用 UNUserNotificationCenter.getDeliveredNotifications()
有几篇文章解决了同样的问题,但(据我所见)它们都是 4 年前的,而且是在 Objective-C 中。我正在使用 Swift 4.2。 我正在制作一个倒计时应用程序。当应用程序在后台并且计时器到期时,
我正在使用 Apple 去年在 iOS 10 中宣布的一项功能。我的问题是通知中的图像有时是空的。 这是我的UNNotificationServiceExtension..我不确定我做错了什么。图像的
我正在使用 UNUserNotificationCenter.App 创建警报当应用程序处于后台或退出时效果很好但是,如果应用程序正在运行,则不会发出警报。 我听说应用程序运行时没有警报。是真的吗?
我在应用程序中使用本地通知时遇到问题。 我正在安排包含自定义内容和自定义操作类别的本地通知。它在 iOS 11 中进行调度和触发,但在 iOS 10 中没有。 根据文档,它应该也适用于 iOS 10。
当我发送推送通知时,应用程序在前台 willPresent 被调用。 didReceive 永远不会被调用。当应用程序在后台并收到推送通知时,会显示警报,但应用程序不会调用 didReceive 或
我正在尝试制作一个提醒应用,并且我所有的通知重复都设置为 true Example : var dateComponents = DateComponents() da
我正在安排本地通知。它适用于 iOS 9.x,但自 iOS 10 以来 -(void)application:(UIApplication *)application didReceiveLocalN
我的 AppDelagate 中有以下代码块: func userNotificationCenter(_ center: UNUserNotificationCenter,
我正在尝试检索仍显示在通知中心的所有已发送通知,但 UNUserNotificationCenter getDeliveredNotifications(completionHandler:) 不起作
我正在处理本地通知,但我遇到的问题是当应用程序终止时没有调用 didReceive Response 方法,所以当我点击通知操作时它只是启动应用程序而没有做任何其他事情。但是,当该应用程序仅在后台运行
我是一名优秀的程序员,十分优秀!