我正在尝试维护MultipeerConnectivity" session"当应用程序临时进入后台时,所以我考虑使用后台任务,因为我在这里看过几次......问题是我不知道如何维护"与UIBackgroundTask的会话,有人可以发一个提示
我不关心广告商/浏览器,可以阻止它们,但是我希望会话不要断开,因为重新连接目前是超级错误。
答案 0 :(得分:12)
根据苹果文档"如果应用程序进入后台,框架将停止广告和浏览并断开所有打开的会话。返回前台后,框架会自动恢复广告和浏览,但开发人员必须重新建立任何已关闭的会话。请参阅:Apple doc
扩展连接的一种方法如下
回答我自己的问题,希望能帮助处于相同情况的人们。 对于刚接触iOS开发的人,使用后台服务"简单意味着打开"背景模式" "功能"中的选项目标标签。 仅此一项就可以让你的应用程序在被杀之前在后台生活大约10分钟。
但是,当应用程序进入后台时,我会使用" backgroundTimeRemaining"要知道我剩下多少时间,它只是从180开始(以秒为单位,所以3分钟),然而,打印循环确实继续工作三分钟,这意味着需要手动编码当时间到了。
对于Multipeer Connectivity,这足以在应用程序进入后台时保持连接活动,并且仍然可以毫无问题地接收所有消息/流。
为了稳定起见,我做了一些清洁工作如下:
在appDelegate.h中
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask; //declaring a background task
在appDelegate.m
中- (void)applicationDidEnterBackground:(UIApplication *)application
{
self.backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^
{
//This is called 3 seconds before the time expires
//Here: Kill the session, advertisers, nil its delegates,
// which should correctly send a disconnect signal to other peers
// it's important if we want to be able to reconnect later,
// as the MC framework is still buggy
[application endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid; //Invalidate the background task
}];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Here: We should init back the session, start the advertising and set the delegates from scratch
// This should allow the app to reconnect to the same session with more often than not
self.backgroundTask = UIBackgroundTaskInvalid; //Here we invalidate the background task if the timer didn't end already
}
答案 1 :(得分:1)
我曾在苹果开发者论坛上问过同样的问题。其中一位Apple员工告诉我,当您的应用程序不在前台时,基本上所有Multipeer连接都应被视为禁止使用。