UILocalNotification 在 iOS 10 中已弃用

2024-02-03

这可能是一个提前的问题,但我想知道用什么代替UILocalNotification在 iOS 10 中。我正在开发一个具有部署目标 iOS 8 的应用程序,所以可以使用吗UILocalNotification?


是的,您可以使用UILocalNotification,旧的 API 在 iOS 10 上也可以正常工作,但我们最好使用用户通知框架中的 API。还有一些新功能,只能与 iOS 10 用户通知框架一起使用。

远程通知也会发生这种情况,有关更多信息:Here https://stackoverflow.com/a/40253296/3395008.

新功能:

  • 现在,在 iOS 10 中,当应用程序位于前台时,您也可以显示警报、声音或增加徽章
  • 现在,当用户点击(或滑动)操作按钮时,即使应用程序已被终止,您也可以在一处处理所有事件。
  • 支持3D触摸而不是滑动手势。
  • 现在,您只需一行代码即可删除特定的本地通知。
  • 支持具有自定义 UI 的丰富通知。

我们很容易转换UILocalNotificationiOS 10 的 API 用户通知框架 API,它们非常相似。

我在这里写了一个demo来展示如何同时使用新旧API:iOS 10 适配技巧 https://github.com/ChenYilong/iOS10AdaptationTips .

例如,

使用 Swift 实现:

  1. 导入用户通知

    ///    Notification become independent from UIKit
    import UserNotifications
    
  2. 请求 localNotification 的授权

        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
            // Enable or disable features based on authorization.
        }
    
  3. 安排本地通知

  4. 更新应用程序图标徽章编号

    @IBAction  func triggerNotification(){
        let content = UNMutableNotificationContent()
        content.title = NSString.localizedUserNotificationString(forKey: "Elon said:", arguments: nil)
        content.body = NSString.localizedUserNotificationString(forKey: "Hello Tom!Get up, let's play with Jerry!", arguments: nil)
        content.sound = UNNotificationSound.default()
        content.badge = UIApplication.shared().applicationIconBadgeNumber + 1;
        content.categoryIdentifier = "com.elonchan.localNotification"
        // Deliver the notification in 60 seconds.
        let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 60.0, repeats: true)
        let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger)
    
        // Schedule the notification.
        let center = UNUserNotificationCenter.current()
        center.add(request)
    }
    
    @IBAction func stopNotification(_ sender: AnyObject) {
        let center = UNUserNotificationCenter.current()
        center.removeAllPendingNotificationRequests()
        // or you can remove specifical notification:
        // center.removePendingNotificationRequests(withIdentifiers: ["FiveSecond"])
    }
    

Objective-C 实现:

  1. 导入用户通知

    // Notifications are independent from UIKit
    #import <UserNotifications/UserNotifications.h>
    
  2. 请求 localNotification 的授权

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
                          completionHandler:^(BOOL granted, NSError * _Nullable error) {
                              if (!error) {
                                  NSLog(@"request authorization succeeded!");
                                  [self showAlert];
                              }
                          }];
    
  3. 安排本地通知

  4. 更新应用程序图标徽章编号

    UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
    content.title = [NSString localizedUserNotificationStringForKey:@"Elon said:"
                                                        arguments:nil];
    content.body = [NSString localizedUserNotificationStringForKey:@"Hello Tom!Get up, let's play with Jerry!"
                                                       arguments:nil];
    content.sound = [UNNotificationSound defaultSound];
    
    // 4. update application icon badge number
    content.badge = [NSNumber numberWithInteger:([UIApplication sharedApplication].applicationIconBadgeNumber + 1)];
    // Deliver the notification in five seconds.
    UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger
                                                triggerWithTimeInterval:5.f
                                                repeats:NO];
    UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"FiveSecond"
                                                                        content:content
                                                                        trigger:trigger];
    /// 3. schedule localNotification
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        if (!error) {
            NSLog(@"add NotificationRequest succeeded!");
        }
    }];
    

updated

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“如果重复,时间间隔必须至少为 60”

let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 60, repeats: true)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UILocalNotification 在 iOS 10 中已弃用 的相关文章

  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 在后台线程上搜索

    我试图在 iPhone 应用程序中搜索数千个对象 但是搜索严重滞后 每次击键后 UI 都会冻结 1 2 秒 为了防止这种情况 我必须在后台线程上执行搜索 我想知道是否有人有一些在后台线程上搜索的提示 我读了一点NSOperation并在网上
  • 重新安装我的 iPad 应用程序时,ApplicationIconBadgeNumber 未重置。

    我正在使用以下代码设置我的 applicationIconBadgeNumber UIApplication sharedApplication setApplicationIconBadgeNumber theIntToDisplay 问
  • 在 iPhone 上搜索 PDF

    经过两天尝试使用 Quartz 从 PDF 中读取注释后 我成功做到了并且发布我的代码 https stackoverflow com questions 4080373 get pdf hyperlinks on ios with qua
  • 隐藏故事板中的导航栏

    谁能告诉我如何隐藏故事板中的导航栏 我下面的代码在模拟器中运行时工作正常 但它仍然出现在我的故事板中 这真的很烦我 因为它弄乱了我的图像的位置 有人可以帮忙吗 void viewWillAppear BOOL animated super
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • TestFlight Beta 中的消息不可用

    I am seeing Unavailable message in TestFLight Beta App in iOS8 Please find the attached screenshot please tell me how to
  • 自定义信息窗口上的按钮未接收 ios 中的操作

    我在 iOS 应用程序中使用 Google 地图 并实现了一个自定义信息窗口来显示标记的标题 现在 我在该自定义信息窗口上添加了一个按钮 但我的问题是按钮操作方法没有被调用 自定义信息窗口 h import
  • 如何将 Android 应用程序添加到已在 iOS 应用程序中使用的现有 Firebase 项目?

    我一直在我的 iOS 应用程序中使用 Firebase 项目 我现在想开始为 Android 应用程序使用相同的 Firebase 项目及其所有数据库和存储 在您的应用程序下Overview菜单 你应该按添加另一个应用程序并选择Androi
  • 在 Pages 文稿中打开文本—Swift

    在我的 Swift 2 应用程序中 用户通过文本字段创建一串文本 然后将其共享给另一个应用程序 现在 我只能将文本共享为 txt 文件 这不提供选项Open In Pages当我打开系统共享对话框时 如何才能让用户可以选择将输入的文本作为
  • Swift:如何让游戏中的角色只有落地后才能跳跃?

    我正在开发一款游戏 我的角色可以从一个陆地跳到另一个陆地 我已经把所有事情都做好了 除了我剩下的问题是 如果你继续点击屏幕 他可以永远跳跃 我希望他必须先落地才能再次跳跃 import SpriteKit import GameplayKi
  • 如何将 .ipa 转换为 .app 文件?

    每个人 我有一些 ipa 文件 想要转换为包含 app 包的存档文件 我试图这样做 但我没有办法 有什么办法可以做到这一点吗 请帮我 将 ipa 重命名为 zip 然后提取即可
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 与 parse-server 和 auth0 的自定义身份验证集成

    我想将 auth0 com 与开源解析服务器结合使用 我当前的方法是通过 iOS 的 Lock 库使用标准登录从 auth0 获取令牌 使用该令牌 我想在解析服务器上调用自定义身份验证方法 该方法检查令牌是否有效 如果有效则将登录用户 我的
  • 无法在 xcode 8 beta 6 上编译 AWS CustomIdentityProvider

    我在 iOS 应用程序中使用 Amazon Cognito 和 Facebook 登录 直到 beta 5 为止此代码从这个SO线程 https stackoverflow com questions 37597388 aws cognit
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 使用未声明的类型“对象”

    这太奇怪了 通常我可以理解未声明的类 但这是声称 Object 类本身未声明 NSObject 可以工作 但我的项目设置方式我需要它是一个纯 Swift 对象 我的类标题如下所示 import UIKit import Foundation
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • 如何安全地重命名 iOS 分发配置文件?

    我几个小时前刚刚提交了我的第一个应用程序 现在处于 等待审核 状态 但我犯了一个错误 我已经命名了我的分配配置文件My Company Distribution Profile 我应该做的事情被命名为我的发行版配置文件My GAME Dis
  • 从应用程序内发送电子邮件中的图像和文本

    如何从我的应用程序内通过电子邮件发送图像和文本 表格数据形式 请大家帮忙并提出建议 谢谢 void sendMailWithImage UIImage image if MFMailComposeViewController canSend

随机推荐

  • 具有 IP 范围的主机

    我的主机没有稳定的主机名 但具有预定义的 IP 范围 如何设置 Ansible 库存文件的 IP 范围 我正在尝试设置这样的东西 test ini database db ansible ssh host 1 1 1 20 25 ansib
  • JAVA中使用jquery文件上传插件分块上传文件

    尝试使用blueimp JQuery文件上传插件用于上传大文件 大于 1 GB 发现使用maxChunkSize配置允许从客户端分块上传文件 我们可以使用服务器获取块大小和文件名Content Range Content Dispositi
  • 使用 tls-extra 进行简单的 smtp

    我正在尝试编写一个简单的脚本来通过我的 Gmail 帐户发送邮件 但我是初学者 所以事情没那么简单 我尝试了谷歌 但除了 hackage 根本没有任何帮助或示例 问题是我没有找到使用 tls extra 或 tls 来启动 STARTTLS
  • Django OS X 错误的 JPEG 库版本:库是 80,调用者期望 62 sorl.thumbnail

    我在 Mac 上本地使用 sorl thumbnail for django 并且在使用 PIL 时遇到了问题 但今天我终于成功安装了它 libjpeg 遇到了一些问题 我现在可以上传和使用图像 但我无法使用 sorl thumbnail
  • HTTP 下载非常大的文件

    我正在使用 Python Twisted 开发 Web 应用程序 我希望用户能够下载非常大的文件 gt 100 Mb 当然 我不想加载 服务器 内存中的所有文件 服务器端我有这个想法 request setHeader Content Ty
  • 将字符串添加到 List 列表

    我是 C 新手 我需要执行以下操作 我需要声明一个列表 List
  • 在nodejs工作线程内调用函数

    这是我的工人 const Worker require worker threads const worker new Worker function hello console log hello world eval true work
  • Apache tomcat7 作为 Windows 服务

    我正在尝试为 Apache tomcat 7 0 45 创建 Windows 服务 在 Windows 版本 7 中 我执行了这个 C tomcat7 bin gt service install Mytomcat7 Windows 服务已
  • 处理阻塞 .NET 套接字的超时

    使用 Accept 方法创建的 TcpClient 实例用于管理客户端连接 当我需要终止服务器线程时就会出现问题 因为它在接收调用时被阻塞 所以我设置了一个 TcpClient ReceiveTimeout 以便循环每个n毫秒来测试退出条件
  • 如何用python创建0年的日期时间对象

    正如标题所说 如果我尝试这样做 它会给我一个年份值的 ValueError 但我想要一个年份为 0 的日期时间 有什么方法可以做到这一点吗 从文档 datetime 模块导出以下常量 datetime MINYEAR 日期或中允许的最小年份
  • 使用 Office365 SMTP 设置 PHPMailer

    我正在尝试设置 PHPMailer 以便我们的一位客户能够从他们自己的帐户自动生成电子邮件 我登录了他们的Office 365帐户 发现PHPMailer所需的设置是 Host smtp office365 com Port 587 Aut
  • Doctrine 2.3 实体生成器:样本、文档?

    Doctrine 可以基于小数据输入生成实体 包括关系信息 但是 我未能找到有关该主题的任何示例或简明信息 官方文档只有一小段 有一个小的命令行示例 完全没有解释什么 任何人都可以参考这方面的书籍 文章甚至代码示例吗 首先你需要引导程序Do
  • 当键盘存在时,如何使 UITextField 向上移动 - 开始编辑?

    使用 iOS SDK 我有一个UIView with UITextField调出键盘 我需要它能够 允许滚动内容UIScrollView键盘打开后即可查看其他文本字段 自动 跳跃 通过向上滚动 或缩短 我知道我需要一个UIScrollVie
  • iPhone 开发 - 开发和分发配置之间有什么区别?

    我无法在苹果文档中找到关于两者之间区别的明确解释发展 and 分配供应 我目前正在使用开发配置在我的 iPhone 上进行开发和测试 我打算将该应用程序分发到我的 Beta 测试中 我想知道 我需要使用吗分配供应 我应该为每个单独的测试人员
  • Android:获取列中的最高值

    我有一个指向内容的 URL 我需要获取其中一列中包含的最高值 是否有任何聚合函数可以完成该任务 或者我必须手动执行此操作 如果您正在查询 Android 内容提供商 您应该能够通过传递来实现此目的MAX COLUMN NAME 进入选择参数
  • 运行脚本标签是否会阻止其他脚本标签的下载?

    这是来自索引 html in HTML5 样板 https github com h5bp html5 boilerplate blob master index html 就在之前 tag
  • 如何在 C++ 中使用带有用户输入的枚举

    我正在制作一个简单的剪刀石头布游戏 我需要使用枚举数据结构 我的问题是 由于从 int userInput 到 Throws userThrow 的转换无效 我无法编译以下代码 enum Throws R P S int userInput
  • 如何启用 Qt5 中已弃用的功能

    我想将 Qt4 程序移植到 Qt5 并且某些函数未定义 例如 QHeaderView setMoveable 但我在 qheaderview h 文件中看到 通过一些神奇的定义 QT DEPRECATED SINCE 应该可以重新启用它们
  • 如何检查一个句柄是否应该关闭?

    如果 ShellExecuteEx 返回 false 是否应该关闭句柄 function EditAndWait const AFileName string boolean var Info TShellExecuteInfo begin
  • UILocalNotification 在 iOS 10 中已弃用

    这可能是一个提前的问题 但我想知道用什么代替UILocalNotification在 iOS 10 中 我正在开发一个具有部署目标 iOS 8 的应用程序 所以可以使用吗UILocalNotification 是的 您可以使用UILocal