iOS 本地通知测试

Posted

技术标签:

【中文标题】iOS 本地通知测试【英文标题】:iOS Local Notifications Testing 【发布时间】:2014-03-11 19:10:27 【问题描述】:

在测试我的本地通知时,由于某种原因,在我的 ios 设备上设置日期和时间不会触发我的本地通知出现。我的通知的触发日期设置为未来几天。如果我确实等了几天,那么我会看到我的本地通知。

为什么我在设备上设置日期和时间后看不到本地通知?

下面是一个示例:

            playNotification.FireDate = DateTime.Now.AddHours(71.67f);
            playNotification.AlertAction = "Alert text";
            playNotification.AlertBody = "Alert body";
            playNotification.SoundName = UILocalNotification.DefaultSoundName;
            playNotification.ApplicationIconBadgeNumber = badgeCount;
            UIApplication.SharedApplication.ScheduleLocalNotification(playNotification);

我应该提到我将“AddHours”更改为“AddSeconds”并通过等待指定的秒数进行了测试,并且通知按预期触发。但是以某种方式更改我设备上的日期和时间并没有。

【问题讨论】:

这很奇怪。我使用相同的方法来测试本地通知,如果我更改设备上的日期,它就可以工作。能否提供一些代码给我们? 好的,我已经编辑了我的问题以添加示例代码。 DateTime.Now.AddHours(71.67f) 返回什么?无论如何...试试这个playNotification.FireDate = [[NSDate date] dateByAddingTimeInterval:10];在 10 秒内转到主屏幕以确保您收到本地通知 我尝试了类似的方法,将“AddHours”更改为“AddSeconds”,等待指定的秒数,这会按预期触发我的通知。 AddHours(71.67) 返回从现在起 3 天减去 20 分钟的日期时间。我对此进行了测试,它确实给了我预期的价值。 请 NSLog DateTime.Now.AddHours(71.67f) 并将其添加到问题中,因为 NSDate 的某些内容可能有问题 【参考方案1】:

您需要设置通知的timeZone。默认情况下,timeZone 是根据您的位置设置的,因此如果您手动更改日期和时间,它不会影响。为此,您需要将timeZone 设置为systemTimeZone()

像这样:

    notification.timeZone = NSTimeZone.systemTimeZone()

我知道这很快,但我对objective-c知之甚少。 希望这可以帮助。 :)

【讨论】:

这个问题与改变时区没有任何关系。 是的。我在测试我的应用程序时遇到了同样的问题,更改手机上的时间和日期时通知不会触发。将时区从默认更改为系统后,在手机上手动设置时间时会触发通知。请在投反对票之前尝试测试代码并理解我想说的话。

以上是关于iOS 本地通知测试的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apple Watch 模拟器中测试本地通知?

IOS 取消本地通知

本地通知不会出现 - iOS

iOS 10 本地通知未显示

如何为本地通知界面编写适当的测试?

检查用户是不是允许本地通知。 iOS 8. Obj-C