开发者社区 问答 正文

如何获取iOS通知相关信息?


iOS通知一般场景,只有点击/删除通知,才能触发对应的回调,具体参考如下:

iOS 10+

  • App处于前台收到通知,触发回调:
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]void[backcolor=transparent])[backcolor=transparent]userNotificationCenter[backcolor=transparent]:([backcolor=transparent]UNUserNotificationCenter[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]center willPresentNotification[backcolor=transparent]:([backcolor=transparent]UNNotification[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]notification withCompletionHandler[backcolor=transparent]:([backcolor=transparent]void[backcolor=transparent] [backcolor=transparent](^)([backcolor=transparent]UNNotificationPresentationOptions[backcolor=transparent]))[backcolor=transparent]completionHandler[backcolor=transparent];
  • 点击/删除通知触发回调:
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]void[backcolor=transparent])[backcolor=transparent]userNotificationCenter[backcolor=transparent]:([backcolor=transparent]UNUserNotificationCenter[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]center didReceiveNotificationResponse[backcolor=transparent]:([backcolor=transparent]UNNotificationResponse[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]response withCompletionHandler[backcolor=transparent]:([backcolor=transparent]void[backcolor=transparent] [backcolor=transparent](^)())[backcolor=transparent]completionHandler[backcolor=transparent];


<a name="< iOS 10

  • 当App处于未运行状态时,点击通知触发的回调:
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]BOOL[backcolor=transparent])[backcolor=transparent]application[backcolor=transparent]:([backcolor=transparent]UIApplication[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]application didFinishLaunchingWithOptions[backcolor=transparent]:([backcolor=transparent]NSDictionary[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]launchOptions[backcolor=transparent];

  • 当APP处于前台或后台挂起状态时,点击通知触发的回调:

  • iOS 7.0以下版本:
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]void[backcolor=transparent])[backcolor=transparent]application[backcolor=transparent]:([backcolor=transparent]UIApplication[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]application didReceiveRemoteNotification[backcolor=transparent]:([backcolor=transparent]NSDictionary[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]userInfo[backcolor=transparent];
  • iOS 7.0及以上版本:
  1. [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]void[backcolor=transparent])[backcolor=transparent]application[backcolor=transparent]:([backcolor=transparent]UIApplication[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]application didReceiveRemoteNotification[backcolor=transparent]:([backcolor=transparent]NSDictionary[backcolor=transparent] [backcolor=transparent]*)[backcolor=transparent]userInfo fetchCompletionHandler[backcolor=transparent]:([backcolor=transparent]void[backcolor=transparent] [backcolor=transparent](^)([backcolor=transparent]UIBackgroundFetchResult[backcolor=transparent]))[backcolor=transparent]completionHandler[backcolor=transparent];

不点击通知,如何获取通知相关的数据?几种场景参考如下:

前台回调

  • 当iOS设备位于前台时,通知一般不弹出,直接触发对应回调,回调中可获取通知信息,回调函数参考上面描述。


静默通知

  • 参考iOS静默通知
  • 当App处于后台(不包括关闭状态)时,发送静默通知,可直接触发对应回调,可对通知相关信息进行处理,且通知不会弹出。


iOS 10 Notification Service Extension

  • 参考iOS 10通知适配
  • iOS 10通知新添加的特性Notification Service Extension,使得设备收到通知弹出前,可对通知进行处理,仅支持iOS 10+设备。

展开
收起
猫饭先生 2017-10-24 09:42:18 1424 分享 版权
阿里云 AI 助理回答

在iOS中,如果想要在不点击通知的情况下获取通知相关的数据,可以考虑以下几种方法:

  1. 前台回调:如您所述,当应用处于前台时,收到的通知通常不会以横幅或提醒的方式展示给用户,而是直接调用userNotificationCenter:willPresentNotification:withCompletionHandler:方法。在这个回调里,您可以访问并处理通知内容。

  2. 静默通知(Silent Notifications):通过使用静默推送通知(content-available设置为1),可以在不打扰用户的情况下,让后台的应用有机会执行一些操作,比如更新内容或者触发本地通知等。静默通知会在App处于后台时唤醒App,并调用application(_:didReceiveRemoteNotification:fetchCompletionHandler:)方法(iOS 7及以上版本)。请注意,静默通知不会展示任何用户界面,且要求App必须有后台模式的支持(例如后台下载、后台刷新等)。

  3. iOS 10 Notification Service Extension:这是iOS 10引入的一个新特性,允许您在系统显示通知给用户之前,对通知内容进行修改或增强,比如下载图片、播放声音等。虽然这个扩展主要用于内容的预处理,但理论上您也可以在此阶段记录或处理通知信息。不过,它并不直接帮助您在不点击通知的情况下获取通知数据到主App,更多是用于优化用户体验。

  4. 利用Background App Refresh:即使没有直接点击通知,如果您的应用支持后台刷新功能,可以在适当的时机检查是否有新的通知数据需要处理。这需要用户已经给予了应用相应的权限,并且操作系统会根据资源情况决定是否以及何时调用此功能。

需要注意的是,所有这些方法都应遵循苹果的隐私和用户体验指南,避免滥用后台执行权限导致电池消耗过大或影响用户体验。此外,对于静默通知的使用,务必确保其符合Apple的推送通知政策,避免被误判为垃圾消息而影响推送成功率。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: