本地通知在设备上不起作用,但在模拟器上起作用

2024-04-15

我读过一些如何使用的指南UILocalNotification的。所以我一直在尝试,但自从第一次尝试以来还没有成功。要在 AppDelegate.m 中注册通知,我使用:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    ...
    //if it is iOS 8
    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
    {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound) categories:nil];
        [application registerUserNotificationSettings:settings];
    }
    else // if iOS 7
    {
        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
        [application registerForRemoteNotificationTypes:myTypes];
    }

    UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (locationNotification) {
        // Set icon badge number to zero
        application.applicationIconBadgeNumber = 0;
        }

        return YES;
    }

并在以下情况下收到通知应用程序正在运行:

    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
    NSLog(@"notification recieved %@",notification.alertBody);
     //  NSLog(@"notification userinfo %@",notification.userInfo);
    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateActive) {
        NSLog(@"notification fired in foreground");
         UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Notification!"
                                                      message:notification.alertBody
                                                     delegate:nil
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];

    [message show];
    } else if (state == UIApplicationStateInactive){
        NSLog(@"notification fired in inactive");

    } else if (state == UIApplicationStateBackground){
        NSLog(@"notification fired in background");
         }


    }

模拟器和设备上一切都正常 -当应用程序运行时,我会收到预定的通知。但我需要在什么时候收到通知应用程序未运行,即应用程序处于非活动状态时(按一次主页键)

问题是,例如,如果我在按下按钮时安排通知,我将毫无问题地收到它,并且它将显示在通知中心,并且徽章将根据需要添加在我的应用程序图标上。但我只想在我的情况下收到通知AFNetworking任务将结束。

为了设置通知,我使用以下方法:

    -(void)getProgress{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSString *token = [defaults objectForKey:@"token"];
    NSString *header = [NSString stringWithFormat:@"Bearer %@",token];
    NSDictionary *params = @{@"lang": @"en",@"project":projId};
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    [manager.requestSerializer setValue:header forHTTPHeaderField:@"Authorization"];
    [manager POST:@"http://example.com/api/get-progress" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if ([[responseObject objectForKey:@"result"]isEqualToString:@"success"]){
            progCreate = [responseObject objectForKey:@"progress"];
            if ([progCreate intValue]==100){
                //shedule notification for immediately showing
              UILocalNotification* localNotification = [[UILocalNotification alloc] init];
              localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:0];
              localNotification.alertBody = [NSString stringWithFormat:@"Notification text!"];
              localNotification.alertAction = @"Show";
              localNotification.timeZone = [NSTimeZone defaultTimeZone];
              localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
              [localNotification setSoundName:UILocalNotificationDefaultSoundName];
              [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
             //  [[UIApplication sharedApplication]presentLocalNotificationNow:localNotification]; the same result as above
            }

        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
        NSLog(@"Error: %@", error);
        }];
    }

这个方法的主要问题是仅适用于 iOS 版本 8.0 的模拟器它不适用于装有 iOS 7.1.1 的 iPhone 4 和装有 iOS 8.1.2 的 iPhone 5c,它也不适用于装有 iOS 7.1 的模拟器。 在使用 iOS 7.1+ 的真实设备和模拟器上,我从未注意到在后台收到通知,只有在我打开应用程序时才能收到通知(然后它会在我设置时向我显示警报)AppDelegate.m) 我很高兴收到任何建议和帮助。


我看到你正在使用 Objective-C。考虑到这个问题是在一年前提出的,您可能已经弄清楚了这一点,或者您现在正在使用 Swift 2.0。我遇到了同样的问题,我可以通过添加以下代码使用 Swift 2.0 解决它。

AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))
    application.beginBackgroundTaskWithName("showNotification", expirationHandler: nil)

    return true
}

你可以看我的完整回答here https://stackoverflow.com/questions/35008731/send-local-notifications-while-app-is-running-in-the-background-swift-2-0.

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

本地通知在设备上不起作用,但在模拟器上起作用 的相关文章

随机推荐

  • 是否可以替换 64 位编码图像中的颜色?

    有没有办法获取 64 进制字符串 例如 copyIcon background url data image png base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8 9hAAAAW0lEQV
  • Windows 8 桌面上的 Chrome 浏览器:触摸支持错误

    Windows 8 桌面上的 Chrome 浏览器 版本 23 0 1271 97 被错误地识别为支持触摸事件 实际上它是一个桌面 也就是说 它不支持触摸事件 请参阅 Modernizr Touch 测试示例 http modernizr
  • IE8 中使用 Fancybox 的 jQuery 问题

    我最近收购了一个旧网站 我们谈论的是表格 图像地图 凡是你能想到的 我被要求将 Flash 画廊的旧链接放入灯箱中 我只是用了一个javascript openLightbox 在画廊链接 右上角 上 我知道我知道 但是这看起来并不不合时宜
  • tcp_max_syn_backlog 和 somaxconn 有什么区别?

    我一直在阅读一些关于 Linux 上的 TCP 实现的文章 我很困惑 它们之间有什么区别net ipv4 tcp max syn backlog and net core somaxconn和backlog作为参数传递给listen 系统调
  • 在Excel中通过VBA调用COM加载项

    我有一个用 VSTO 编写的 COM 加载项 我想使用 VBA 宏来调用它 对于加载项 我需要启动它 输入一些文本 自动 然后运行应用程序 该加载项都是按钮 我无法轻松访问代码 因为其中一些代码是加密的 它是第三方 遗憾的是 当单击此加载项
  • 如何隐藏我的源代码以免被复制

    最近有人通知我 我的网站被复制了 当我查看他给我的链接时 我发现除了徽标和文本之外 该网站与我的网站相同 有没有办法隐藏我的代码 或者使我的页面无法右键单击 我在一些网站上看到 如果您访问http example com images ht
  • unique_ptr 的初始化有什么问题?

    有人可以告诉我 以下 unique ptr 初始化有什么问题吗 int main unique ptr
  • 如何动态更改文本字段中特定文本的颜色?

    Consider bellow image I want to dynamically change the text color of part of the text based on the user input text not t
  • Eclipse中的部署目录在哪里?

    我正在 Eclipse 中开发一个 Web 应用程序 部署目录树位于哪里 在我的 Java 工作区树中的 Apache 目录结构或某些子目录树结构中 我问这个问题是因为当我的教程应用程序的更新不起作用时 我去浏览目录树 并且假设src子树代
  • WPF:将 DataGrid 绑定到列表

    有趣的是 有时简单的事情会在背后咬我一口 我可以使用 DataGridTextColumn 将 DataGrid 很好地绑定到某个任意类的集合 如下所示 bound to List
  • 使用 web-fragment 时 tagdir 属性无效

    我正在使用 web fragment 功能在 jar 中维护 JSP 和标签 并且使用这种方法 我的 JSP 页面无法找到 tagdir 并导致 此标签库的 tagdir 属性值无效 这是我的罐子里的结构 META INF 资源 WEB I
  • 在 Java 中将颜色名称转换为 RGB 值

    当颜色名称作为输入给出时 我想要一个 RGB 值 以下代码适用于某些颜色 我猜适用于红色等原色 但适用于其他一些颜色 例如青色和淡紫色 import java awt Color import javax swing text html S
  • 如何找到最新的 gradle 版本和包装器

    嗨 我对 Android 开发相当陌生 我对 Gradle 版本和 gradle wrapper properties 中的分发 url 有疑问 classpath com android tools build gradle gradle
  • 如何使用 iOS Swift 更新 firebase 中的单个数组元素?

    这里我使用 firestore 查询来更新 插入数据 如何将数组值的字典更新到 firebase 数据库 here is my firestore data structure 现在可以获取数据slot1 gt 第 0 个位置值在模型类中
  • 谷歌图表显示的是金钱而不是百分比

    给定饼图的数据 data new google visualization arrayToDataTable Sales Revenue Distribution Author 5 Company 2 Tax 0 4 Payment Pro
  • 如何解压缩C中的字符数组

    我需要创建函数 char decompress const char src 该函数的输入是一些字符串 Hello world gt Hello world Hel2o world 10 gt Hello world 正如您所看到的 如果有
  • 使用 IntelliJ 运行 JUnit 测试

    我正在使用 IntelliJ 2018 1 并且我正在尝试运行TeaVM http teavm org JUnit 测试 但运行测试时CTRL SHIFT F10测试被跳过 RunWith TeaVMTestRunner class Ski
  • 从 matplotlib 刻度标签格式中删除前导 0

    如何在 matplotlib 中将数字十进制数据 例如 0 和 1 之间 的刻度标签更改为 0 1 2 而不是 0 0 0 1 0 2 例如 hist rand 100 xticks 0 2 4 6 8 将标签格式设置为 0 0 0 2 等
  • 使用 Keith Wood 的 jQuery SVG 插件对外部加载的 SVG 进行动画处理

    我正在尝试使用 Keith Wood 为从外部 SVG 加载的一组路径的填充颜色设置动画plugin http keith wood name svg html 首先 我将 SVG 导入到 div 容器中 document ready fu
  • 本地通知在设备上不起作用,但在模拟器上起作用

    我读过一些如何使用的指南UILocalNotification的 所以我一直在尝试 但自从第一次尝试以来还没有成功 要在 AppDelegate m 中注册通知 我使用 BOOL application UIApplication appl