iOS静默推送通知

4

我正试图在我的应用程序中实现静默推送通知,当接收到静默通知时,需要更新服务器中的一些数据。我正在使用Pushkit,并且它使用VoIP证书进行静默推送通知,但是苹果公司拒绝了这个应用程序,称“我不能使用VoIP”证书。看起来苹果公司已经拒绝了我的应用程序,因为我的应用程序中没有任何VoIP功能。在这种情况下,我该如何实现静默推送通知,以便我的应用程序即使未运行(甚至不在后台运行)也会被激活,我可以更新服务器?


只有在您的应用程序实际实现基于VoIP的功能时,才可以使用VoIP后台模式。如果用户从应用程序切换器中杀死应用程序,则无法唤醒应用程序。 - nikBhosale
1个回答

2
根据我的经验,iOS尊重用户的选择,因此如果用户已经杀死了应用程序,它将保持关闭状态 - 没有静默推送通知会唤醒这个应用程序。VoIP是一个例外,但正如你所写的那样,它应该仅用于VoIP应用程序。这是有道理的,考虑到这是一个平台限制:由于用户可以对手机上实际运行的内容进行控制,设备消耗的电池更少,最后,前台/系统应用程序具有最多的CPU时间可供利用。
有几种技术可以在后台处理数据:
1. Content-available推送通知:将在应用程序挂起时唤醒应用程序,或者在系统/崩溃强制停止应用程序后重新启动它。请注意,这仅打开30秒的窗口,并且APNS限制了通知的数量。 2. 后台提取能力将以类似的方式运作。 3. 后台任务来完成现有任务-但仅在应用程序移至后台时使用。
如果您需要应用程序向服务器发送更新,我认为以上内容应该足够(除非您的应用程序正在监视用户,否则一旦用户完成与应用程序的交互,它应该拥有所有相关数据)。
如果您需要服务器向应用程序发送数据,请使用静默推送通知(或后台提取以进行周期性拉取),或者如果此数据对用户很重要,则可以向他呈现远程通知-如果用户将其视为重要更新,他将打开应用程序。

1
静默推送通知的工作方式与普通推送通知相同,只是不会产生横幅。"没有静默推送通知将唤醒此应用程序",这是不正确的。在静默推送通知的情况下,当通知到达时,操作系统会激活应用程序的appdel,并调用didRecieveNotification,时间限制为30-60秒。 - Saheb Roy
上次我在设备上测试它时(这是在iOS 11之前),如果我明确地杀死应用程序,静默推送通知将不会被接收。如果应用程序在后台挂起运行,则会唤醒该应用程序。 - deekay
不,它确实会唤醒应用程序,但用户无法理解它,因为操作系统将其从挂起状态下唤醒,而不是活动状态。 - Saheb Roy
我只需要将设备连接到Mac,然后打开Xcode->设备,选择已连接的设备,然后按“打开控制台”。您将在控制台中看到来自系统和所有应用程序的日志。一旦被杀死,与被杀死的应用程序相关的任何消息都不会被打印出来。如果应用程序被挂起,日志是可见的。无需更改方案,我使用了应用商店版本。 - deekay
哦,我以为你是在调试模式下,从Xcode启动的。 - Saheb Roy
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接