在Mavericks iOS模拟器中的推送通知

32

我找不到相关信息,并且我从未使用过推送通知(但是我大致知道它们是如何工作的)。在Mavericks中,现在OS X可以接收来自各种东西(如网站)的推送通知,iPhone模拟器可以接收推送通知吗?我找到了许多2013年中旬和更早时间的答案,说“不行”,但是这些都已经过时了,因为最近发布了Mavericks及其新的推送功能。

我即将开始为学校项目开发一个应用程序,除非我想要贪图便宜就只轮询服务器,否则应该使用推送通知。我知道你需要一个iOS开发者帐户才能使用推送通知,但是如果我能在我的电脑上测试,这会使我的生活变得轻松很多。


请注意,iPhone模拟器中的本地通知现在可以正常工作了。 - Joshua Pinter
终于可以了!https://dev59.com/ZHNA5IYBdhLWcg3wIqLr#73829063 - jcesarmobile
7个回答

41

iOS 8和Xcode 6确实增加了一些推送通知的额外整合。如果您选择iPhone 6或iPhone 6 Plus模拟器,您的应用程序现在将出现在“设置”下面,并显示完整功能的通知设置屏幕(见附图),并在首次请求推送通知权限时显示应用程序模态。这仅适用于iPhone 6和iPhone 6 Plus模拟器。

Screenshot 2

Screenshot 1

Screenshot 3

然而,在iOS 8中,您仍将在控制台中收到消息“远程通知不受模拟器支持”,因此您必须仅使用设备。

Screenshot 4


1
不,这只与iOS8+有关。我使用iOS 8的iPhone 5模拟器进行了测试,通知提示也弹出了。 - ZYiOS
12
谢谢您的提问。但是在模拟器中如何获取设备令牌?我仍然收到以下消息:"无法注册,出现错误:Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo=0x7fefba842250 {NSLocalizedDescription=remote notifications are not supported in the simulator}" - Sébastien Stormacq
1
除了一些库和SDK之外,不使用任何第三方产品。 - Sébastien Stormacq
@SébastienStormacq 你有什么进展吗?我也收到了“注册失败...”的错误,尽管它们似乎在iPhone 6和6+上受支持。 - Alex
不,我仍然收到“模拟器不支持远程通知”的消息。我不知道这个人是如何让它工作的。我在互联网上没有找到其他解释这个问题的帖子/文章。只有在这里 :-( - Sébastien Stormacq
5
这个回答讨论的是“本地”通知,而不是“远程”(也称为“推送”)通知。“本地通知”是指您在通知屏幕上看到的用户界面,可以由本地代码触发。真正的“推送”通知是一种网络活动,可能有或可能没有通知出现在您的通知屏幕上。因此,虽然旧版本的iOS支持“本地”通知,但真正的“推送”通知直到模拟器中的iOS10才得到支持。苹果的术语非常令人困惑。更多信息请参见:https://dev59.com/g2Ei5IYBdhLWcg3wCYKY#38210747 - mkirk

25

不,模拟器仍然没有支持推送通知的API。您必须使用设备。


我必须使用四个不同的真实设备来进行截屏吗?iPhone 6.5英寸显示屏,iPhone 5.5英寸显示屏,iPad Pro(第三代)12.9英寸显示屏,iPad Pro(第二代)12.9英寸显示屏。 - user924

19
尽管iPhone 6和iPhone 6+模拟器有推送通知的设置,甚至会显示推送通知提示,但在模拟器上尝试注册推送通知仍然会失败,出现错误码Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo=0x7fc786b4af90 {NSLocalizedDescription=remote notifications are not supported in the simulator}。所以,最好还是使用真机。

1
是的,大家都知道使用真实设备是最好的选择,但我是一名新的IOS开发者,买很多设备还负担不起,所以我只能使用模拟器来测试我的应用程序,我只有iPhone 4,其他设备太贵了 :( - Viet Nguyen
1
难道一个设备不足以确保您对通知的响应正常工作吗? - Eran Goldin

15

哎呀呀!随着XCode 11.4的发布,现在模拟器也可以接收推送通知了。苹果最新发布的说明如下:

模拟器支持模拟远程推送通知,包括后台内容获取通知。

在模拟器中,将APNs文件拖放到目标模拟器上。 文件必须是带有有效Apple推送通知服务负载(包括“aps”键)的JSON文件。

它还必须包含一个顶级“模拟器目标束”和一个字符串值, 匹配目标应用程序的包标识符。

参考链接:https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_beta_release_notes

示例负载文件,

{
    "Simulator Target Bundle": "com.yourOrganization.appName",
    "aps": {
        "alert": "This is a test notification!",
        "badge": 5,
        "sound": "default"
    }
}

@注意: 在上述有效载荷中的"模拟器目标包标识符"中提及您的应用程序的Bundle Identifier。

将上述json文件拖放到目标模拟器上,将呈现通知并设置徽章。


2
你也可以使用终端完成。只需输入以下命令:xcrun simctl push <simulatorDeviceIdentifier> <pathTopayloadfile> - Shirish
1
模拟器无法接收来自APNs的真实推送通知,它仅支持模拟远程推送通知 - Ben Butterworth

5

更新XCode8 GM版本

日志: 推送通知现在会失败,并显示旧的诡异诗歌:

remote. 
notifications are not.
supported in the simulator.

我现在对自己和我的理智产生了怀疑。我长期以来一直希望的这个功能,曾经短暂地出现在我的手中,或者我以为是这样。这全部只是一个梦吗?我们中的任何人都真的在这里吗?

原始帖子

从iOS10 beta (XCode版本8.0 beta (8S128d))开始,模拟器似乎可以接收推送通知。请注意,尽管在iOS10之前,设备可以接收本地通知,但它们不能接收推送通知。
我没有任何官方消息,只是凭经验而言,依赖于推送通知的功能之前常常失败,现在在iPhone 5、5s、6、6+模拟器上已经成功执行。
我还核实了我们正在AppDelegate中块注册。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
  NSLog(@"Successfully registered!");
  doSomething(notificationSettings);
}

谢谢更新。听到这个消息很好。我会告诉我的朋友们... - sudo
1
在Xcode 8 beta4和5中似乎无法工作。我在application:didFailToRegisterForRemoteNotificationsWithError中收到UserInfo={NSLocalizedDescription=remote notifications are not supported in the simulator}的错误信息。模拟器是5s和10.0版本。 - kometen

3

当iOS 10推出后,我期待着在模拟器中使用远程通知。

与此同时,我使用Xcode命令行来测试通知行为:

p [((CustomAppDelegateClass *)((UIApplication *)[UIApplication sharedApplication]).delegate) application:[UIApplication sharedApplication] didReceiveRemoteNotification:@{@"aps": @{@"alert": @"Alert Message"}, @"info": @{@"object": @"value"}}];

当我尝试运行这个时,我得到的错误是:-bash: 附近意外的标记 `(' 的语法错误。 - GuybrushThreepwood
@GuybrushThreepwood:我没有尝试过,但我相信这个命令应该在Xcode的lldb调试控制台中输入。 - bunnyhero
@GuybrushThreepwood 在运行模拟器后,您可以“暂停程序执行”,然后在日志输出中的“(lldb)”旁边输入此命令。 - Destry
出于好奇,我在 iPhone 7 模拟器(iOS 10.1,14B72)中尝试了推送通知,但它们在那里无法工作。 - Peter

3

现在,在模拟器中可以接收到带有声音和标记计数的推送通知。

步骤1:创建项目(Xcode 11.4 beta)

步骤2:导入UserNotifications并注册推送通知

步骤3:创建如下所示的JSON文件(payload.apns)

{
    "Simulator Target Bundle": "metiz.DemoSimPushnotification",
    "aps": {
        "title": "Xcode 11.4 Beta Update",
        "alert": "Push notification in simulator - take a look",
        "sound": "default",
        "badge": 1
    }
}

第四步:打开终端并输入命令 $ xcrun simctl push com.example.myapp ExamplePush.apns

< device >将被替换为设备标识符。

com.example.myapp将被替换为您的项目的捆绑标识符。

ExamplePush.apns将被替换为我们的apns文件的文件名。

像这样:

$ xcrun simctl push 4F19A097-DAE2-4298-99EB-23D4F2DBAF97 metiz.DemoSimPushnotification payload.apns

现在,按Enter键!看到神奇的事情发生了!

参考链接:

https://www.metizsoft.com/blog/testing-push-notification-on-ios-simulator


你在第四步中忘记放置 <device>,并且你没有完美地格式化响应。太遗憾了,因为你的答案是完美的! - arnaudambro

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