【问题标题】:UILocalNotification fires after reinstalling the app重新安装应用程序后触发 UILocalNotification
【发布时间】:2011-02-07 15:26:17
【问题描述】:

我的应用程序有一个使用 UILocalNotification 的警报功能,效果很好。但是,如果用户卸载该应用程序,然后重新安装它,他将立即收到所有“中间”通知。

我试过打电话:

[[UIApplication sharedApplication] cancelAllLocalNotifications];

如果这是第一次启动应用程序,但它没有帮助,因为通知甚至在 application:didFinishLaunchingWithOptions: 被调用之前就收到了。

这在 4.0 中更糟糕,即使用户删除了应用程序也会重复警报,但至少苹果在以后的版本中修复了这个错误。但是现在我坚持这一点。有人有想法吗?

【问题讨论】:

  • 您好,请问您有解决这个问题的办法吗...

标签: iphone notifications repeat alarm uilocalnotification


【解决方案1】:

根据 Apple 的说法,这不是错误(我提交了错误报告)。系统会将已卸载应用的 UILocalNotifications 保留 24 小时,以防用户意外删除应用程序,如果在该时间范围内重新安装应用程序,系统将恢复所述 UILocalNotifications。

解决方案是在首次启动时删除所有 UILocalNotifications,如下所示:

- (BOOL)          application: (UIApplication*) application
didFinishLaunchingWithOptions: (NSDictionary*)  launchOptions
{
  if (self.isFirstRun)
  {
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    self.firstRun = NO;
  }

  /* Other code here */
  ...
}

当然,实现您自己的 firstRun setter 和 getter 以获取/保存到持久存储中,例如 NSUserDefaults

【讨论】:

  • 这个“功能”是否记录在任何地方?
  • +1 这看起来很愚蠢。一旦通知被移交给操作系统,应用程序就不再拥有通知,当您尝试安排 65 个通知而不是最多 64 个通知时,这一点很清楚。应用程序应该负责存储它自己的通知表示的任何表示--不依赖操作系统。如果这样的应用程序在之前不知道这些通知的情况下启动,那么它们就是垃圾。
【解决方案2】:

这实际上是 iPhone 中的一个错误。如果您删除了该应用程序并稍后安装它,它将具有相同的应用程序 ID,因此当重新安装该应用程序时,即使您没有打开该应用程序,也会触发所有过去的本地通知。

【讨论】:

  • 对于iOS 4.0、4.1...的用户,您认为有什么变通方法吗?因为在没有禁用它的情况下接收那些重复的警报会非常烦人(4.0)。
  • 没有其他办法,这就是他们提交错误的原因
  • 我在 4.3 中仍然看到这种行为,尤其是在通过 XCode 运行(安装)时。
  • 我仍然看到在 iOS 6.0.1 中运行应用程序的这种行为!
  • 有人可以在 Apple 中发布与此错误有关的错误报告的链接吗?正如@niraj 所说,我在 iOS 6.0 中也看到了这一点。
猜你喜欢
  • 2013-01-26
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多