首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

未调用didReceiveRemoteNotification,iOS 10

基础概念

didReceiveRemoteNotification 是 iOS 应用程序中的一个方法,用于处理远程通知(推送通知)。当应用程序在后台运行或未启动时,接收到远程通知后,系统会调用这个方法来通知应用程序。

相关优势

  1. 实时通知:用户即使不在应用内,也能及时收到重要信息。
  2. 用户参与度提升:通过推送通知,可以提醒用户使用应用,增加用户活跃度。
  3. 个性化推送:可以根据用户的行为和偏好,推送个性化的内容。

类型

  • 远程通知:通过 Apple Push Notification service (APNs) 发送的通知。
  • 本地通知:由应用本身在特定时间或条件下生成的通知。

应用场景

  • 消息提醒:如即时通讯应用的消息通知。
  • 活动提醒:如电商平台的促销活动通知。
  • 新闻更新:如新闻应用的最新资讯推送。

可能遇到的问题及原因

未调用 didReceiveRemoteNotification

原因可能包括:

  1. 权限问题:应用未正确请求用户授权接收通知。
  2. 配置问题:Info.plist 文件中未正确配置远程通知的相关设置。
  3. 代码问题:未在 AppDelegate 中实现 didReceiveRemoteNotification 方法。
  4. 系统版本问题:iOS 10 及以上版本对通知处理有新的要求。

解决方法

1. 请求用户授权

在应用启动时,请求用户授权接收通知:

代码语言:txt
复制
import UserNotifications

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
        if granted {
            print("Notification authorization granted")
        } else {
            print("Notification authorization denied")
        }
    }
    return true
}

2. 配置 Info.plist

确保 Info.plist 文件中包含以下内容:

代码语言:txt
复制
<key>NSLocalNotificationUsageDescription</key>
<string>我们需要使用通知来提醒您重要信息</string>
<key>NSMicrophoneUsageDescription</key>
<string>我们需要使用麦克风来录制音频</string>

3. 实现 didReceiveRemoteNotification 方法

在 AppDelegate 中实现 didReceiveRemoteNotification 方法:

代码语言:txt
复制
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    print("Received remote notification: \(userInfo)")
    completionHandler(.newData)
}

4. 处理 iOS 10 及以上版本的通知

确保在 AppDelegate 中实现 userNotificationCenter(_:didReceive:withCompletionHandler:) 方法:

代码语言:txt
复制
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    print("User tapped on notification: \(response.notification.request.content.userInfo)")
    completionHandler()
}

参考链接

通过以上步骤,可以确保在 iOS 10 及以上版本中正确处理远程通知。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • iOS远程消息推送

    主要从iOS远程消息推送过程以及客户端如何处理推送消息的开发实现逻辑两方面来展开,最后梳理一下iOS消息推送测试时需要关注的点。 1.iOS消息推送过程 ?...:(NSDictionary *)userInfo被调用,App从userInfo中即可得到推送消息的内容。...(3)消息推送场景(支持定时推送) 消息推送时间:a)设置过去时;b)推送之前修改消息内容;c)删除消息,查看是否还会推送。...(7)系统兼容: iOS10系统前后推送机制有较大更新,检查系统兼容性。 (8)重装APP是否会收到多条推送等异常。 (9)切换账号后,是否出现收到旧账号的推送。...(10)多端同时在线的APP,是否都能正常收到推送。 (11)特殊场景:a)多个提醒冲突;b)当天设置当天推送;c)当天设置隔几天起效。

    4.5K20

    推送-JPush(极光推送)的使用

    源码实现推送服务 注册推送 // 引 JPush功能所需头 件 #import "JPUSHService.h" // iOS10注册APNs所需头 件 #ifdef NSFoundationVersionNumber_iOS...] >= 8.0) { // 可以添加 定义categories // NSSet *categories for iOS10...10 系统之前 这个系统级别的方法,被触发的条件: 程序在前台收到推送 (不会有顶部横条提示) 通过点击推送启动程序 iOS10的静默式推送 //ios 7 前端 、点击、静默式推送有 包括...iOS10的静默式推送 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary...]; } iOS 10 系统及其之后 这个方法是推送横幅出现之前会被调用 // iOS 10 Support - (void)jpushNotificationCenter:(UNUserNotificationCenter

    6.6K10

    iOS检查使用图片资源方法

    前言 app项目随着需求越来越多,app的体积越来越大.尤其在iOS端app下载超过150M,则会无法使用移动网络下载,也必然会流失小部分流量..../install.sh 执行命令: fengniao -p /Users/xinxi/Documents/iOSProject/DDProject_iOS image 扫描到使用资源总数 image...image 报告展示 报告展示:版本、使用总数据量、使用资源列表 上传报告 在QA管理平台中,包大小检查汇总模块可以汇总定期扫描的测试报告....image 后续 后续会把iOS检查使用图片资源加入到专项测试中,每个版本的专项测试报告附上扫描结果方便开发优化项目....学习文章 iOS之自动检测项目中的无用的图片资源 https://blog.csdn.net/luochuanAD/article/details/75995323 LSUnusedResources的

    1.4K40

    iOS开发--performSelector调用和直接调用区别

    下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便做一下总结, [delegate imageDownloader...didFinishWithImage:)withObject:self withObject:image]; 1、performSelector是运行时系统负责去找方法的,在编译时候不做任何校验;如果直接调用编译是会自动校验...如果imageDownloader:didFinishWithImage:image:不存在,那么直接调用 在编译时候就能够发现(借助Xcode可以写完就发现),但是使用performSelector的话一定是在运行时候才能发现...(此时程序崩溃);Cocoa支持在运行时向某个类添加方法,即方法编译时不存在,但是运行时候存在,这时候必然需要使用performSelector去调用。...而使用performSelector时候,可以不用import头文件包含方法的对象,直接用performSelector调用即可。 代码如下: ? ? ? 打印结果: ?

    1.9K60

    ios逆向之使用AltDeploy安装签名ipa

    在对iOS app进行安全分析时,为了动态调试iOS app或者hook iOS app,需要先将app安装到手机中。...有的iOS app可以通过App Store或者其他手机助手app直接下载安装,而其他签名app则需要通过电脑手动安装到手机中。...设备通过数据线与电脑相连接,如果能在AltDeploy看到手机的硬件信息则表示连接成功 点击左上角AltDeploy工具栏,选择add Apple ID,添加苹果账户,如下图所示 添加完苹果账户后,如果手机越狱...,即可在AltDeploy最下面一栏中选择相应版本的越狱工具对iOS设备进行越狱,如下图所示 unc0ver可以对iOS11.0-13.3进行越狱 Chimera可以对iOS12-12.2、12.4...进行越狱 Electra可以对iOS11.0-11.4.1进行越狱 以上三款工具在越狱过程都可以尝试使用 如果已经越狱完成,需要安装签名ipa,则直接拖动ipa到AltDeploy界面,点击start

    1.9K40

    iOS 远程推送概念相关准备工作代码实现:(前提:确保bundleID和网站的配置一样)AppDelegate中的全部代码

    Token号 iOS8和iOS7注册通知对比: 多了一个授权的方法UIUserNotificationSettings 以前的方法中Remove换成了User ?...:(NSDictionary *)userInfo; (2)前台、后台和退出的推送都会调用这个代理方法(iOS 7之后可用) - (void)application:(UIApplication *)application...didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult...(后台和前台时可用) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary...(前、后、退出都可用,iOS7以后可用) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary

    1.9K100
    领券