1

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

例如:每日目标。

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

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

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

更新:

我正在使用 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;

我首先检查有效负载中的可用内容并将其视为静默并进行计算。这间歇性地工作得很好,但不是始终如一。我正在接近发布日期,我真的很担心。

4

1 回答 1

0

我假设您使用:

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler

在这种情况下,您不应忘记调用完成处理程序,根据Apple 文档,您只有 30 秒的时间来执行此操作:

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

于 2016-04-06T16:45:14.323 回答