【问题标题】:Push Notifications in Mavericks iOS SimulatorMavericks iOS 模拟器中的推送通知
【发布时间】:2014-03-11 13:33:49
【问题描述】:

我对此一无所知,而且我从未对推送通知做过任何事情(但我隐约知道它们是如何工作的)。在 Mavericks 中,既然 OS X 可以接收来自网站等各种事物的推送通知,那么 iPhone Simulator 是否可以接收推送通知?从 2013 年年中开始,我发现很多答案都说“不”,但所有这些都已经过时了,因为 Mavericks 最近刚刚发布了新的推送功能。

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

【问题讨论】:

  • 仅供参考,iPhone 模拟器中的本地通知现在可以正常工作了。

标签: iphone push-notification ios-simulator osx-mavericks


【解决方案1】:

iOS 8 和 Xcode 6 确实为推送通知添加了一些额外的集成。如果您选择 iPhone 6 或 iPhone 6 Plus 模拟器,您的应用程序现在将出现在“设置”下,并带有一个功能齐全的通知设置屏幕(见附件),并在首次请求推送通知权限时显示应用程序内模式。这仅适用于 iPhone 6 和 iPhone 6 Plus 模拟器。

但是,在 iOS 8 中,您仍会在控制台中收到消息,因为“模拟器不支持远程通知”,因此您只能使用设备。

【讨论】:

  • 不是,只是和iOS8+有关,我用iOS 8的iPhone 5模拟器测试,也弹出通知提示。
  • 谢谢你或者这个。但是你如何在模拟器中获得设备令牌?我仍然收到消息:“无法注册错误:Error Domain=NSCocoaErrorDomain Code=3010”模拟器不支持远程通知“UserInfo=0x7fefba842250 {NSLocalizedDescription=模拟器不支持远程通知}”
  • 否 - 除了几个库和 SDK 之外,没有第三方产品
  • @SébastienStormacq 运气好吗?我还收到“注册失败...”错误,尽管它们似乎在 iPhone 6 和 6+ 中受支持。
  • 这个答案是关于 Local 通知,而不是 Remote(又名“推送”)通知。 “本地通知”是指您在通知屏幕上看到的 UI,可以由本地代码触发。真正的推送通知,是指一种网络活动,在你的通知屏幕上可能有也可能没有通知。因此,虽然在旧版本的 iOS 上支持 Local 通知,但直到 iOS10 在模拟器上才支持真正的 Push 通知。为拥有如此令人困惑的术语而感到羞耻。更多:stackoverflow.com/a/38210747/353178
【解决方案2】:

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

【讨论】:

  • 我必须使用四种不同的真实设备进行截图? iPhone 6.5 英寸显示屏、iPhone 5.5 英寸显示屏、iPad Pro(第 3 代)12.9 英寸显示屏、iPad Pro(第 2 代)12.9 英寸显示屏
【解决方案3】:

即使 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}。所以,你最好的选择仍然是使用设备。

【讨论】:

  • 是的,大家都知道用真机是最好的,但是我是一个新的IOS开发者,我不能努力购买很多设备,所以我必须使用模拟器来测试我的应用程序,我只有iphone 4和其他设备太贵了:(
  • 一台设备不足以确保您对通知的响应按预期工作吗?
【解决方案4】:

是啊!!随着XCode 11.4的发布,现在也可以在模拟器中接收推送通知了。 苹果的最新版本说,

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

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

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

参考链接: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"
    }
}

@note:在上述 Payload 的 “Simulator Target Bundle” 中提及您的应用程序的 Bundle Identifier。

将上面的json文件拖放到目标模拟器上会显示通知并设置徽章。

【讨论】:

  • 您也可以使用终端来完成。只需输入以下命令:xcrun simctl push
  • 模拟器无法接收来自 APN 的真正推送通知,它只有 supports simulating remote push notifications
【解决方案5】:

更新 XCode8 GM 版本

日志:推送通知现在因旧诗而失败:

remote. 
notifications are not.
supported in the simulator.

我现在质疑自己和我的理智。这个功能是我长久以来一直希望的,并且在短时间内掌握在我手中,或者我是这么认为的。这一切只是一场梦吗?我们当中有人真的在这里吗?

原帖

从 iOS10 测试版(XCode 版本 8.0 测试版 (8S128d))开始,模拟器似乎会收到推送通知。请注意,虽然在 iOS10 之前,设备可以接收 local 通知,但它们不会接收 push 通知。

我没有任何官方消息来源,只是轶事,依赖推送通知的功能过去失败,现在在 iPhone 5、5s、6、6+ 模拟器上取得成功。

我还验证了我们在 AppDelegate 中的注册块。

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
  NSLog(@"Successfully registered!");
  doSomething(notificationSettings);
}

【讨论】:

  • 感谢您的更新。听起来还不错。我会让我的朋友知道...
  • 在 xcode 8 beta4 和 5 中似乎不起作用。我在 application:didFailToRegisterForRemoteNotificationsWithError 中得到 UserInfo={NSLocalizedDescription=模拟器不支持远程通知}。模拟器是5s和10.0。
【解决方案6】:

期待 iOS 10 出来时在模拟器中使用远程通知。

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

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

【讨论】:

  • 当我尝试运行它时,我得到:-bash: syntax error near unexpected token `('
  • @GuybrushThreepwood:我没试过,但我相信这个命令是在Xcode中调试时输入lldb调试控制台的。
  • @GuybrushThreepwood 对了,运行模拟器后你可以“暂停程序执行”然后在日志输出中的“(lldb)”旁边输入这个命令。
  • 出于好奇,我尝试在 iPhone 7 模拟器(iOS 10.1、14B72)中推送通知,但它们在那里不起作用。
【解决方案7】:

现在可以在模拟器中接收推送通知(带有声音和徽章计数)

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

第 2 步:- 导入 UserNotifications 和 registerForPushNotifications

第 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
    }
}

步骤 4 :- 打开终端写入命令 $ xcrun simctl push com.example.myapp ExamplePush.apns”

将替换为设备标识符。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 2014-07-20
  • 2021-04-03
  • 2021-03-09
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多