iOS:静默推送触发本地通知的问题

iOS:静默推送触发本地通知的问题,ios,localnotification,silentpush,Ios,Localnotification,Silentpush,在我的应用程序中,我使用每日静默推送触发应用程序内的一些计算,并根据计算结果触发本地通知 比如说:一个每日目标 一旦静默通知到达我的应用程序,我会触发一个后台方法来计算用户数据并比较他/她的数据是否达到目标,如果是,我会触发一个本地通知,以便用户可以打开应用程序并进行检查 它不是始终如一地工作,有时我得到它,有时不。当我调试时,我看到的是,在这段时间内执行会暂停,只有当用户再次打开应用程序或我再次触发静默推送时,执行才会恢复。不知道为什么后台执行(计算)会暂停,如果我触发推送或手动尝试打开应用程

在我的应用程序中,我使用每日静默推送触发应用程序内的一些计算,并根据计算结果触发本地通知

比如说:一个每日目标

一旦静默通知到达我的应用程序,我会触发一个后台方法来计算用户数据并比较他/她的数据是否达到目标,如果是,我会触发一个本地通知,以便用户可以打开应用程序并进行检查

它不是始终如一地工作,有时我得到它,有时不。当我调试时,我看到的是,在这段时间内执行会暂停,只有当用户再次打开应用程序或我再次触发静默推送时,执行才会恢复。不知道为什么后台执行(计算)会暂停,如果我触发推送或手动尝试打开应用程序,我可以看到断点出现,并从暂停的位置继续

我想知道是不是因为时间的限制

更新:

我正在使用UrbanAirshipSDK,它们覆盖了一些处理程序,我正在使用下面的方法来处理通知。这写在appdelegate中,当我在后台收到通知时调用

/**
 * Called when a push notification is received while the app is running in the background
 * for applications with the "remote-notification" background mode.  
 * Overridden by receivedBackgroundNotification:fetchCompletionHandler.
 *
 * @param notification The notification dictionary.
 */
- (void)receivedBackgroundNotification:(NSDictionary *)notification;
我首先检查有效负载中的可用内容,将其视为静默并进行计算。这可以间歇性地正常工作,但并不一致。我即将发布,我真的很担心。

我假设您使用:

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
在这种情况下,您不应忘记调用完成处理程序,根据您的情况,只有30秒的时间:

处理完通知后,必须立即致电 块,否则您的应用程序将被终止。你的 应用程序最多有30秒的挂钟时间来处理 通知并调用指定的完成处理程序块。在里面 实践中,您应该在完成后立即调用处理程序块 处理通知。系统会跟踪经过的时间、功率 应用程序后台下载的使用率和数据成本。应用程序 在处理远程通知时使用大量电源 可能不会总是很早醒来以处理将来的通知

我假设您使用:

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
在这种情况下,您不应忘记调用完成处理程序,根据您的情况,只有30秒的时间:

处理完通知后,必须立即致电 块,否则您的应用程序将被终止。你的 应用程序最多有30秒的挂钟时间来处理 通知并调用指定的完成处理程序块。在里面 实践中,您应该在完成后立即调用处理程序块 处理通知。系统会跟踪经过的时间、功率 应用程序后台下载的使用率和数据成本。应用程序 在处理远程通知时使用大量电源 可能不会总是很早醒来以处理将来的通知


此计算涉及什么?Coredata获取和获取的值与阈值目标值的比较。记录数据的大小非常小显示您正在使用的代码,您应该有足够的时间进行提取和本地比较由于一些NDA问题,我将无法粘贴代码,我将尝试编写一个通用版本添加到这里,但我试图弄清楚为什么它有时有效,有时无效,显示一些代码。您可能需要调用
beginBackgroundTaskWithExpirationHandler
,以获得足够的后台时间。此计算涉及哪些内容?核心数据获取以及获取的值与阈值目标值的比较。记录数据的大小非常小显示您正在使用的代码,您应该有足够的时间进行提取和本地比较由于一些NDA问题,我将无法粘贴代码,我将尝试编写一个通用版本添加到这里,但我试图弄清楚为什么它有时有效,有时无效,显示一些代码。您可能需要调用
beginBackgroundTaskWithExpirationHandler
,以获得足够的后台时间。