iPhone 中收不到任何推送通知

问题描述 投票:0回答:8

我使用本教程制作了一个用于推送通知的示例 PushTest 应用程序。

使用上面的教程,我收到消息“PushTest”想向您发送推送通知(仅一次),之后我从 iPhone 中删除该应用程序,重新启动 iPhone,但无法再次收到相同的消息。

我已运行脚本sample.php(更新建议的更改)并收到消息“已连接到 APNS”和“您的消息已发送”。

但是我没有收到任何推送通知。

请指导我哪里错了?
或者我尝试什么来接收推送通知。

ios iphone objective-c push-notification apple-push-notifications
8个回答
32
投票

只有2种情况你不会收到Push

1.) 如果您的应用程序位于前台。

2.) 您的设备令牌对于接收推送通知无效,请检查这两个条件,如果您仍然没有收到推送,请告诉我。 谢谢


7
投票

请注意电池问题,这可能会导致您无法使用一天或更长时间!

除非手机充满电,否则切勿在开发模式(系留手机)下开始测试推送。

https://developer.apple.com/library/archive/technotes/tn2265/_index.html

如果您的通知有效负载包含内容可用密钥,并且 iOS 或 OS X 确定这样做是节能的,您的应用程序将收到通知。如果超出了设备的能源或数据预算,您的应用将不会再收到任何带有内容可用键的通知,直到重置预算。这种情况每天发生一次 并且无法通过用户或开发人员操作进行更改

一般来说,关于手机电池状态的通知(特别是当您处于网络连接状态时)是不稳定的。 (此外,那篇文章中提到的一些内容已经很老了,现在完全是错误的。)基本上,如果您的手机进入“由于电池原因而无法收到通知”模式,那么您通常永远不会收到通知 - 并且它可以持续几天。

通知确实(或曾经)更喜欢蜂窝网络!!

在 iOS 上,推送通知会尽可能使用蜂窝数据网络,即使设备当前正在使用 Wi-Fi 进行其他网络活动(例如网页浏览或电子邮件)。但是,如果蜂窝数据服务不可用,推送服务将退回到 Wi-Fi。

这在不同的 iOS 版本中发生了很大变化,但这是一个巨大的麻烦。

重要提示!!

别忘了:

  1. 构建到系留手机:您只会收到“沙盒,开发”推送通知。但是

  2. 增加构建号,为试飞正常构建,发送到试飞,然后从试飞安装。 您现在将收到正确的正常 Apple 推送通知

非常令人困惑的是,您!!DO!!得到REAL有关开发测试飞行版本的推送通知。

也就是说 - 当您构建 TestFlight 时,您DO GET 与在应用商店上发布的实际应用程序完全相同的推送通知并由您的公共用户使用 - 真实、真实、APNS 推送通知。 名称非常令人困惑的“开发、沙箱”推送通知

适用于“系留电话构建”。 (正如前面提到的,为了增加更多混乱,“开发、沙箱”推送通知通常不起作用:尽管 2024 年更新,但现在它们似乎更可靠。)

在这里阅读更多内容!

https://stackoverflow.com/a/60550859/294884


6
投票


2
投票

确保您的应用程序已在通知中心列出,并且其警报类型为“任意”但不是“无”。

您需要在3种情况下查看您的通知,

当您的应用程序打开时、在后台以及关闭时。

为此,您需要检查这些方法

// To Register your device token - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken


//If your app is not able to register - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error {}

//Your app receives push notification. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { UIApplicationState state = [application applicationState]; // If your app is running if (state == UIApplicationStateActive) { //You need to customize your alert by yourself for this situation. For ex, NSString *cancelTitle = @"Close"; NSString *showTitle = @"Get Photos"; NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:message delegate:self cancelButtonTitle:cancelTitle otherButtonTitles:showTitle, nil]; [alertView show]; [alertView release]; } // If your app was in in active state else if (state == UIApplicationStateInactive) { } }


1
投票
设置

是否打开了应用程序的通知,并确保通知中心中的通知类型不是“无”。


1
投票

provision profile 并且您的应用程序已最小化。如果应用程序没有最小化使用

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"info %@", userInfo); }

有关问题的其他
有用信息

对于测试推送,您可以使用

APN Tester Free

注意: 插入带有空格的标记。


0
投票

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any])

但是我的编译器在 
的断点处停止了

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)



0
投票

© www.soinside.com 2019 - 2024. All rights reserved.