gpt4 book ai didi

iOS - 使用 NSTimer 安排后台任务是否仍受 Apple 限制?

转载 作者:行者123 更新时间:2023-11-29 13:17:35 26 4
gpt4 key购买 nike

我知道我在摸索,但希望得到答案。

我有一个应用程序需要在后台与服务器通信,无需用户干预。推送通知到达时或至少定期(每 5 分钟左右)。

我可能会附加位置更新并将其发送到服务器。我什至可以证明使用粗略位置是合理的,因此 Apple 批准了它。最坏的情况是,我将支付 299 美元购买企业开发者许可证并使用本地分发(我唯一关心的)。

我最后的希望是使用 NSTimer 定期调度后台任务。使用此方法的应用是否仍受 Apple 对允许的后台任务类型的限制? (media/location/voip/newsstand/external device) 这看起来很有歧视性......

附言。该应用程序现在在 ipod touch 上以开发模式运行,包括与服务器的定期通信。就后台模式而言,我还没有在 plist 中声明任何内容。这是否意味着我没事?

最佳答案

我已经实现了以下内容并于昨天获得了 apple 的批准。我的应用程序不支持(媒体/位置/voip/报摊/外部设备)

通过在 applicationDidEnterBackground 中使用以下代码,您可以获得最长 600 秒(10 分钟)的时间:

if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4
if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking
UIApplication *application = [UIApplication sharedApplication]; //Get the shared application instance
__block UIBackgroundTaskIdentifier background_task; //Create a task object
background_task = [application beginBackgroundTaskWithExpirationHandler: ^ {
[application endBackgroundTask: background_task]; //Tell the system that we are done with the tasks
background_task = UIBackgroundTaskInvalid; //Set the task to be invalid
//System will be shutting down the app at any point in time now
}];
//Background tasks require you to use asyncrous tasks
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Perform your tasks that your application requires
NSLog(@"\n\nRunning in the background!\n\n");
[application endBackgroundTask: background_task]; //End the task so the system knows that you are done with what you need to perform
background_task = UIBackgroundTaskInvalid; //Invalidate the background_task
});
}

}

可在此处找到文档 http://disanji.net/iOS_Doc/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

我刚刚实现了 backgroundTaskIdentifier 对象并使 background_task 无效以检查时间,应用程序处于事件状态并运行了 600 秒。你甚至可以通过使用这个来获得剩余时间

NSLog(@"Time remaining: %f", application.backgroundTimeRemaining);

关于iOS - 使用 NSTimer 安排后台任务是否仍受 Apple 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15307674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com