在 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 中未收到任何推送通知的主要内容,如果未能解决你的问题,请参考以下文章

在android中未收到推送通知

在 iOS 中未收到推送通知消息

在 GCM 中未收到推送通知

在 Android 中未收到解析推送通知

某些设备在 android 中未收到推送通知

推送通知 iphone(我的设备没有收到通知)