在模拟器中进行iPhone本地通知

42

我刚刚下载了Xcode并尝试制作本地通知示例。问题是,本地通知在模拟器中是否有效?

谢谢

5个回答

72

是的,本地通知可以在模拟器上使用。但是,如果您希望在应用程序前台看到通知,请确保在应用委托中实现了application:didreceiveLocalNotification

- (void)application:(UIApplication *)application
    didReceiveLocalNotification:(UILocalNotification *)notification
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"MyAlertView"
        message:notification.alertBody
        delegate:self cancelButtonTitle:@"OK"
        otherButtonTitles:nil];
    [alertView show];
    if (alertView) {
        [alertView release];
    }
}

否则,请确保您在未来的某个时间安排通知,然后关闭应用程序,以便查看苹果的示例工作:

UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil) return;
NSDate *fireTime = [[NSDate date] addTimeInterval:10]; // adds 10 secs
localNotif.fireDate = fireTime;
localNotif.alertBody = @"Alert!";
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];

很容易认为你没有正确实现测试代码,而且在应用程序运行时你没有处理事件。


20

如果你遇到了这个旧问题,可能会遇到另一个坑点:iOS 8引入了新的通知权限,你的应用程序必须明确地请求它们。

在你的AppDeligate.m文件中:

- (BOOL)application:(UIApplication *)application 
          didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //register local notifications
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }

    //the rest of your normal code

    return YES;
}

如果你不这样做,你的通知将永远不会触发,并且你将在日志中收到像这样的精彩消息:尝试调度一个带警报的本地通知 <UIConcreteLocalNotification: 0x7ae51b10>{...警报详情...},但还没有获得用户显示警报的权限


7

本地通知在模拟器上可用,推送通知则不行。


2
要在iPhone模拟器中测试本地通知,请按照以下步骤操作:
  1. 由于模拟器时间与计算机时间完全相同,请将计算机时间更改为所需时间的前一分钟(当您期望本地通知触发时)
  2. 重新启动模拟器(这很尴尬,但有时似乎iPhone模拟器无法立即获取更新的时间)
  3. 再次运行模拟器(可能通过从xcode运行您的应用程序,在这种情况下,您必须按home键将您的应用程序发送到后台)。 一旦时间到达,您应该会看到通知
这些步骤总是帮助我成功地获得本地通知。

0

应用程序设置通知部分未显示

我也遇到了这个问题。似乎发生了以下情况:

  1. 您的应用程序在模拟器上运行/安装(可能需要重置应用程序的模拟器状态,请参见下文)。
  2. 您的应用程序尚未请求显示通知的权限。
  3. 因此,您的应用程序设置(设置>应用程序名称)不会显示通知部分。

App Settings showing Siri and Search and Background App Refresh but no Notifications listing

  1. 您需要在应用程序中请求通知(使用UNUserNotificationCenter.current().requestAuthorization等)。

Allow notifications request alert

然后,即使您拒绝了允许通知提示,您的应用程序也将有一个通知部分!

App settings now showing notifications section along with Siri and Search and Background App Refresh

重置应用状态

之后我再次启动了应用,通知设置仍然显示(由于我拒绝了权限,所以显示为关闭)。

要重置这个并重新产生原始问题,我必须执行以下操作:

  1. 启用simctl XCode命令行实用程序(请参阅如何解决xcrun无法找到simctl错误?

XCode Preferences > Locations > Command Line Tools

在终端中运行xcrun simctl uninstall booted com.app.bundlename(请参见如何在每次运行单元测试时运行应用程序的全新安装?)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接