推送通知在 iPhone 3GS 中不起作用。它适用于最新的 IOS 设备,如 iPhone 4、4s、5

Posted

技术标签:

【中文标题】推送通知在 iPhone 3GS 中不起作用。它适用于最新的 IOS 设备,如 iPhone 4、4s、5【英文标题】:Push Notification not working in iPhone 3GS. It works on latest IOS devices like iPhone 4,4s,5 【发布时间】:2014-01-17 08:31:25 【问题描述】:

我已经检查了 iPhone 4、4s、5 中的推送通知以及 ios 版本 5.1 到 7.0,它运行良好。稍后,我使用 IOS 版本 6.1.2 签入 iPhone 3GS 设备并遇到奇怪的异常,因为我无法在 iPhone 3GS 设备中收到任何通知。

我重新检查了证书、pem 文件但没有收到任何通知。这个委托方法也被调用,我在 iPhone 3GS 设备中收到了设备令牌。

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

但是,当通过 php 脚本向相关 iPhone 3GS 设备发送任何通知时,我不会得到任何响应。我的假设是 Apple 可能不会向他们的旧设备发送推送通知。

我已经认真学习了本教程,但对于 iPhone 3GS 设备来说都是徒劳的。

http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1

如果有任何问题,请给我您宝贵的反馈意见以纠正此问题。

【问题讨论】:

如果在其他设备上收到通知,aps 证书(至少其中一个)没有任何问题。请注意,development 设备令牌不同于 ad-hoc 或 production(发布)设备令牌。当您从 xcode 进行测试时,您将获得开发令牌,并且您必须使用开发证书和沙箱服务器连接来传递通知。在使用 ad-hoc 或其他发布版本进行测试时,您必须使用生产令牌、生产证书和生产服务器连接。还要确保检查设备设置(通知)。 @rokjarc:我相信你找到了原因。如果您发布答案,我会投赞成票。 @rokjarc:感谢您的支持。我知道设备令牌是特定于应用程序的,它会从应用程序更改为应用程序。设备令牌在开发和分发配置文件中也有所不同。我已经生成了不同的分发证书并进行了所需的测试,但在 iPhone 3GS 设备中没有收到任何通知。我从同一配置文件的其他设备中收到通知。我也检查了设备设置,在设置->通知中心里没问题。 实际上Apples的服务器使用SSL数据(证书信息)来区分应用程序。生产 APNS 令牌(例如)实际上对于所有应用程序的一台设备都是相同的(对此不是 100% 确定)。如果此 3GS 设备是您用于开发的手机,请尝试从中删除所有配置文件,删除您的应用并重新安装。然后再次测试。 在您的 3GS 上.. 您收到其他推送通知?越狱了吗? 【参考方案1】:

由于您在其他设备上收到通知,因此您的 .PEM 证书或与 Apple 的 APS 服务器的通信没有问题。

调试这种情况时您应该注意的事项是:

开发模式和生产模式的设备 APNS 令牌不同

设备 APNS 令牌在应用程序中可以是相同的(至少对于同一个发布者而言)。 Apple 的服务器使用 SSL 数据(用于启动连接的证书)来区分应用程序 - 而不是令牌数据

AdHoc 模式(随 iPhone 配置实用程序安装,TestFlight...)与生产模式相同

不费吹灰之力:在开发模式下向应用发送开发证书时,应使用沙箱服务器连接(当然还有开发 APNS 令牌)

在开发设备上有时确实会发生坏事。删除配置文件,删除应用程序,重新启动设备,然后重试。不要忘记检查并重新检查通知中心设置。您可能需要更改设置,然后再更改回来以获得所需的效果。

有时问题会被误诊为“某些设备”在实际某些类型的通知未通过时未收到通知。或者使用不同的消息来测试在不同设备上的传递,实际上是消息是罪魁祸首。例如未转义的ČŠŽ...

【讨论】:

感谢您的努力并感谢您的时间安排。我已经研究了你提到的所有事情。我检查了3GS设备的通知中心,没问题。我正在生产配置文件中工作并获取设备令牌,这意味着委托方法在 3GS 设备中工作。 我有一些假设,我在下面列出。 1. Apple 可能不会向他们的旧设备发送推送通知。 2. 我正在调用的 PHP 脚本在他们的旧设备上存在一些问题。 3. 创建 Ssl 证书(PEM 文件)时我做错了什么。此证书可以在 iPhone > 4.0 设备上使用,在 iPhone 3GS 设备上可能会出现问题。 实际上我仍在考虑您的问题,但还没有一个时刻......您的 3 个假设似乎不太可能。可能是令牌处理的问题吗?可能是应用程序代码或 php 代码弄乱了此设备的令牌? 因为 SSL 定义了将被触发的应用,而令牌定义了设备。只是预感:您可以在此设备上使用 iCloud(是否输入了正确的凭据)?

以上是关于推送通知在 iPhone 3GS 中不起作用。它适用于最新的 IOS 设备,如 iPhone 4、4s、5的主要内容,如果未能解决你的问题,请参考以下文章

推送通知在带有 iOS 8.0 的 iPhone 6 中不起作用

摇动手势在 iPhone 4 中不起作用,不知道为啥...?

推送通知在android studio中不起作用

到期日期在 Parse 推送通知中不起作用

静默推送通知在 ios 13 中不起作用

推送通知在 android 10 中不起作用