本地通知适用于 ios 模拟器但不适用于设备

Posted

技术标签:

【中文标题】本地通知适用于 ios 模拟器但不适用于设备【英文标题】:Local notifications working on ios simulator but not on device 【发布时间】:2018-03-07 08:29:54 【问题描述】:

我一直致力于在我正在开发的这个应用上获取本地通知。我已经在标题、正文蚀刻中设置了带有一些文本的通知内容,然后设置了 UNCalendarNotificationTrigger

NSDate *tenSecondsFromNow = [cal dateByAddingUnit:NSCalendarUnitSecond value:10 toDate:[NSDate date] options:NSCalendarMatchFirst]
UNCalendarNotificationTrigger* trigger = [UNCalendarNotificationTrigger
                                          triggerWithDateMatchingComponents:[cal components:NSCalendarUnitYear |
                                                                             NSCalendarUnitMonth|
                                                                             NSCalendarUnitDay|
                                                                             NSCalendarUnitWeekday |
                                                                             NSCalendarUnitHour|
                                                                             NSCalendarUnitMinute|
                                                                                   NSCalendarUnitSecond fromDate:tenSecondsFromNow] repeats:NO];

我安排通知在运行后 10 秒运行

    // Schedule the notification.
[_notificationCentre addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) 
    if (error != nil) 
        DDLogError(@"%@", error.localizedDescription);
        DDLogError(@"%@", @"couldn't create chore reminder notification");
    
];

我正在苦苦挣扎的是,当我在模拟器上运行此代码时,通知完全符合我的预期,在我在前台或后台运行这段代码后 10 秒向我显示通知。但是,当我在我的设备上运行它时,通知不会出现。但是,当我在这里将触发器更改为 UNTimeIntervalNotificationTrigger 设置时

UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:10 repeats:NO];

这本质上是在做同样的事情,在调用addNotificationRequest 函数后 10 秒安排通知。这适用于模拟器和我的设备。

我想知道是否有一些奇怪的时间正在发生?或者模拟器处理通知的方式可能与设备略有不同。无论哪种方式,我都不知道发生了什么。

【问题讨论】:

【参考方案1】:

我不完全确定为什么会这样,但减少了触发器“修复”中匹配的日期组件的数量。还是不知道问题的根本原因,但是把数据组件部分改成

[cal components:NSCalendarUnitHour|NSCalendarUnitMinute fromDate:tenSecondsFromNow]

解决了这个问题。

【讨论】:

如果答案解决了您的问题,您应该接受答案。 我只能在 9 小时内接受我自己的答案,我计划在有能力的时候这样做。

以上是关于本地通知适用于 ios 模拟器但不适用于设备的主要内容,如果未能解决你的问题,请参考以下文章

Adobe ANE 适用于 iOS 和 Android 设备,但不适用于 AIR 模拟器

IOS中的Facebook登录适用于模拟器,但不适用于安装了本机应用程序的设备

PHP 图片上传适用于本地主机,但不适用于 GoDaddy 服务器

Socket.io 适用于桌面 safari 和 chrome,但不适用于移动设备

我正在使用 `fcm` gem 发送推送通知,它适用于 android 但不适用于 IOS

NSKeyedArchiver 适用于模拟器,但不适用于实际设备