在 iPhone 中未收到任何推送通知
Posted
技术标签:
【中文标题】在 iPhone 中未收到任何推送通知【英文标题】:Not receiving any push notification in iPhone 【发布时间】:2013-04-22 05:32:20 【问题描述】:我使用this tutorial 为推送通知制作了一个示例 PushTest 应用程序。
使用上述教程,我收到“PushTest”想向您发送推送通知(仅一次)的消息,之后我从 iPhone 中删除了该应用程序,重新启动 iPhone 但无法再次收到相同的消息。
我已运行脚本 sample.php(更新建议的更改)并收到消息“已连接到 APNS”和“您的消息发送”。
但我没有收到任何推送通知。
请指导我哪里错了? 或者我尝试接收推送通知的内容。
【问题讨论】:
注意,请注意 BATTERY GOTCHYA ... 请仔细阅读此处developer.apple.com/library/archive/technotes/tn2265/… at “如果已超出设备的能量或数据预算。 ...” 【参考方案1】:只有两种情况你不会收到推送
1.) 如果您的应用程序在前台。
2.) 您的设备令牌对于接收推送通知无效,请检查这两个条件如果您仍然没有收到推送,请告诉我。 谢谢
【讨论】:
非常感谢 Hinta...我知道了,设备令牌中有空间。 刚刚在前台使用我的应用程序花了 >1 小时试图了解为什么我没有收到推送通知......哦该死的!!! :))) @Nitin 您在使用开发证书和配置文件并创建 ipa 吗? 您可以为发布和开发模式选择不同的证书和配置文件。 我正在使用开发证书.. 和开发配置文件。但在应用程序 ID 中,我启用了开发推送通知。我遵循了 Ray wenderlych 教程...我以两种方式创建了 ipa 文件。在开发和分发中。在分发中,我创建了生产证书并创建了临时配置文件,但仍然没有让我的通知正常工作..在我的通知工作期间。【参考方案2】:确保您使用的是启用推送通知的配置文件。然后检查您是否正在向服务器发送令牌。
【讨论】:
您是否使用相同的证书来生成 SSL 和配置文件?它们不是相同的推送通知不起作用。还要验证你是否成功连接到 APNS developer.apple.com/library/ios/#DOCUMENTATION/… saqib:我可以使用 APNS 配置文件运行该应用程序,并且还可以在 didRegisterForRemoteNotificationsWithDeviceToken 方法中获取设备令牌。我收到警报“PushTest”只想向您发送 PusNotification 一次,因此可以确定我使用的是正确的配置文件。 我确定您使用的是启用推送通知的配置文件。但是您可能不会在客户端和服务器端使用相同的 CSR。这通常是推送通知不起作用的原因。 谢谢 saqib....你能建议我如何验证相同(您可能在客户端和服务器端使用不同的 CSR)【参考方案3】:注意电池问题,它会阻止您一天或更长时间
除非手机已充满电,否则切勿在开发模式(联网手机)下开始测试推送。
https://developer.apple.com/library/archive/technotes/tn2265/_index.html
如果您的通知负载包含内容可用密钥,那么如果 iOS 或 OS X 确定这样做是节能的,您的应用将收到通知。如果超出设备的能源或数据预算,您的应用将不会再收到任何带有内容可用密钥的通知,直到预算被重置。这每天发生一次用户或开发者操作无法更改。
一般来说,关于手机电池状态的通知(尤其是当您被连接时)非常不稳定。 (此外,那篇文章中提到的一些非常古老的东西是完全错误的。)基本上,如果您的手机进入“由于电池而不会收到通知”模式,您通常永远不会收到通知 - 它可以去持续几天。
通知确实(或确实)更喜欢蜂窝 WTF!!!
在 iOS 上,推送通知会尽可能使用蜂窝数据网络,即使设备当前正在使用 Wi-Fi 进行其他网络活动,例如网页浏览或电子邮件。但是,如果蜂窝数据服务不可用,推送服务将回退到 Wi-Fi。
这在不同的 iOS 版本中发生了很大变化,但这是一个巨大的麻烦。
>>>>> !!!关键提示!
别忘了:
构建到连接电话。您只会收到“沙盒、开发”推送通知。 但是那些几乎没有用 - 他们很晚才到,在某些地区不工作,等等。它们太脆弱了,通常不值得尝试。
增加内部版本号,为Test Flight正常构建,发送到Test Flight,然后从Test Flight安装。您现在将获得正确、正常的苹果推送通知。
您!!DO!!非常困惑REAL关于开发测试飞行构建的推送通知。
也就是说 - 当您构建到 TestFlight 时,您获得与在应用商店发布的实际应用完全相同的“真实”推送通知 并由您的公共用户使用 - 真实、真实的 APNS 推送通知。
名称令人难以置信的“开发、沙盒”推送通知仅适用于“系留电话构建”。 (而且,为了增加混乱,“开发、沙盒”推送通知非常不可靠,所以你永远不知道它们是否有效。)
在这里阅读更多! https://***.com/a/60550859/294884
【讨论】:
【参考方案4】:我遵循了相同的教程。
确保您的应用列在通知中心,并且它的警报类型是任何但不是无。
您需要在 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)
【讨论】:
嗨 Hinta,方法 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 在我的情况下没有被调用。并且所有其他的事情都是正确的。 我猜,您一定是在 simplePush.php 中硬编码了您的设备令牌。因此,注册您的设备没有问题。现在试着弄清楚为什么你没有在设备端收到推送通知。【参考方案5】:如果应用程序的通知已开启,请检查您设备的设置,并确保通知中心中的通知类型不是“无”。
【讨论】:
我已经用 Banner & Alert 试过了。该应用程序正在 NotificationCeter 中列出。【参考方案6】:确保您选择正确的配置文件
并且您的应用已最小化。如果应用没有最小化使用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
NSLog(@"info %@", userInfo);
关于问题的其他useful information。
对于测试推送,您可以使用APN Tester Free。 注意: 插入带有空格的标记。
【讨论】:
'APN Tester Free' 在印度不可用【参考方案7】:我没有得到任何东西:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any])
但是我的编译器在断点处停止了
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
【讨论】:
您的有效负载可能是可以从 userInfo 获取的空白值。【参考方案8】:我遇到了类似的问题。一切都在代码中正确完成。我正在使用开发配置文件运行该应用程序,并在指向生产的服务器(iOS)上推送通知。确保您的配置文件与服务器设置匹配(沙盒与生产)。您还可以确保您的设备注册正确。
【讨论】:
以上是关于在 iPhone 中未收到任何推送通知的主要内容,如果未能解决你的问题,请参考以下文章