Tag: 后台进程

PushKit:我们可以在聊天应用程序中使用推送套件(VoiP Push),而不使用VoiP

我希望在推送通知到达时将本地数据库与服务器同步,但无法通过无提示通知进行同步,因为应用程序:didReceiveRemoteNotification:fetchCompletionHandler在用户终止应用程序时不会调用。 所以,我不知道该怎么做,然后我阅读了推送工具包,但不知道是否可以使用没有VoiPfunction的推送工具包。 请告诉我是否有可能? 如果没有,build议我任何其他的想法,当用户杀死应用程序时,我将如何运行后台任务?

后台执行3分钟后自动停止

我想上传照片作为后台任务,但后台执行3分钟后自动停止。 我已经做的代码: – (void)applicationDidEnterBackground:(UIApplication *)application { UIApplication *app = [UIApplication sharedApplication]; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ //Stop upload call [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; }}

当应用程序在后台时是否可以使用NSFileManager的`copyItemAtURL:toURL:error:`方法?

我正在开发iOS应用程序,从相机胶卷上传video,使用NSURLSession进行背景configuration。 用户可以排队上传多个video(串行执行队列)。 一次上传包括: 使用PHImageManager的requestAVAssetForVideo方法获取对PHAsset的AVURLAsset引用。 将资源复制到临时目录(因为不能直接从AVURLAsset的URL上传)。 使用NSURLSessionUploadTask上传资源 我可以排队多个video,这个过程在前台运行良好。 他们一个接一个完成。 但是,如果我排队了几个video,然后背景的应用程序。 只要执行到达copyItemAtURL:toURL:error:阶段,它就会停止,直到我再次前台应用程序。 (我知道这是因为我在本地通知中发布debugging语句,在locking屏幕上可见)。 是否有可能使用copyItemAtURL:toURL:error:当应用程序背景? 如果没有,是否可以使用AVAssetExportSession呢? 编辑1我已经testing了这个连接到debugging器,而不是,应用程序从不执行复制命令。 但是只有当应用程序再次被预先登陆时才这样做。 编辑2为了澄清,执行在复制命令停顿。 它不会产生错误并继续执行。 并执行fileManager:shouldCopyItemAtURL:toURL:委托方法不会改变的东西。 该方法的文档也说: 在复制每个项目之前,文件pipe理器询问它的委托是否应该这样做。 它通过调用fileManager:shouldCopyItemAtURL:toURL:method; 如果该方法未实现(或者在OS X 10.5或更低版本中运行该进程),则会调用fileManager:shouldCopyItemAtPath:toPath:方法。 如果委托方法返回YES,或者委托没有实现适当的方法,则文件pipe理器继续复制文件或目录。

如何在iOS后台运行服务来接收本地通知?

我正在开发应用程序,其中有一个与服务器的MQTT连接,服务器正在发送一些与设备和用户界面更改相关的值。 但是,当应用程序在后台用户应该得到本地通知,某些值被改变。 我知道后台服务不允许在iOS中,但我想确保这是没有办法做到这一点。 我通过UIApplication.shared.beginBackgroundTask在后台成功地添加了本地通知,但是只有在苹果终止应用之后,它才能正常工作3分钟。 func registerBackgroundTask() { backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in self?.endBackgroundTask() } assert(backgroundTask != UIBackgroundTaskInvalid) } func endBackgroundTask() { print("Background task ended.") UIApplication.shared.endBackgroundTask(backgroundTask) backgroundTask = UIBackgroundTaskInvalid } 而只是调用self.registerBackgroundTask()使应用程序在后台运行三分钟。 接下来我要去尝试的是后台抓取和小部件运行服务,在这里我只是想有一些build议,有没有什么机会,以上两个之一将工作?

检查两个NSOperationQueue是否完成调用endBackgroundTask来停止后台任务模式

在我的应用程序中,我有一些NSOperation从一个在线数据库更新一些核心数据元素,有时更新需要一些分钟,当iPhone的屏幕locking,应用程序进入后台模式,并停止此更新,所以我有重新打开应用程序继续更新,所以我已经问了一些在这之前,所以我收到了这个正确的答案: – (void)someMethodToKeepRunningInBackground { UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) { // Uh-oh – we took too long. Stop task. }]; // Perform task here CheckForUpdate *checkUpdate = [[CheckForUpdate alloc] init]; [sectionCheckUpdateQueue addOperation:checkUpdate]; if (taskId != UIBackgroundTaskInvalid) { [[UIApplication sharedApplication] endBackgroundTask:taskId]; } } 问题是,我有更多的NSOperationQueue运行来执行更新,我上面写的sectionCheckUpdateQueue,如果发现更新日程安排更NSOperation其他NSOperationQueue,所以我不能调用这个: endBackgroundTask:taskId 因为我不知道什么时候这个NSOperationQueue完成,所以我的问题是,所以如何我可以检测到当这个NSOperationQueue完成,所以调用endBacgkround:taskId?

如果在后台引发,NSException会终止应用程序

我正在执行一些networking相关的代码。 当代码开始执行时,用户在后台发送应用程序,那么如果exception提升应用程序被终止。 如果exception没有提出的应用程序不会被杀死。 是否有可能停止/暂停任何types的networking活动? 或阻止应用程序从杀害? UPDATE 我用亚光gallahar(cocoa爱)写uncaughtexception处理程序。 如何取消请求一旦被解雇。 请求的代码在这个函数中被调用 +(NSString*)validate:(NSString*)username password:(NSString*)password server:(NSString*)server port:(int)port encryption:(int)encryption authentication:(int)authentication folders:(NSMutableArray*)folders { CTCoreAccount* account = [[CTCoreAccount alloc] init]; @try { [account connectToServer:server port:port connectionType:encryption authType:authentication login:username password:password]; } @catch (NSException *exp) { NSLog(@"connect exception: %@", exp); return [NSString stringWithFormat:@"Connect error: %@", [ImapFolderWorker decodeError:exp]]; } } – (void)connectToServer:(NSString *)server port:(int)port connectionType:(int)conType […]

在ios上重复运行代码

我正在制作闹钟般的应用程序。 用户应该在30分钟左右的时间内每隔10-60秒用振动和声音通知用户。 什么是最好的办法呢? 在前台很容易,但是我怎样才能继续在后台运行预定的代码呢? 我可以使用本地通知,但用户在“请勿打扰”模式下不会收到它们。

从推送通知更新sqlite数据库,应用程序已closures,不在后台iOS中运行

我正在尝试更新本地sqlite数据库收到通知和应用程序closures/用户终止。 一切正常,当应用程序是背景或主动模式。 参考: REFERENCE STACK LINK 1 参考堆栈链接2 这里是我正在尝试的代码: -(void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{ NSLog(@"App Background :%@",userInfo); if(application.applicationState == UIApplicationStateInactive) { NSLog(@"Inactive"); //Show the view with the content of the push [self BackgrounCall:userInfo]; completionHandler(UIBackgroundFetchResultNewData); } else if (application.applicationState == UIApplicationStateBackground) { NSLog(@"Background"); //Refresh the local model [self BackgrounCall:userInfo]; completionHandler(UIBackgroundFetchResultNewData); } else { NSLog(@"Active"); […]

ios替代使用iCloud推送通知,如“查找我的iPhone”

我一直在寻找“find我的iPhone”的应用程序,它似乎是使用iCloud和没有推送通知接收alertView关于通知。 通过在后台运行一些机制,并在收到通知后提醒用户。 我想知道的是,这个应用程序是苹果为这个应用程序特殊的例外,所有其他应用程序必须做推送通知? 或者,我可以制作一个在后台运行的应用程序,就像“查找我的iPhone”应用程序,并通过iCloud进行通信。 先谢谢你。

在UIWebView中的背景audio播放

我的应用程序允许用户访问通过networking播放audio书籍的服务。 我正在使用一个UIWebView来处理这个。 当应用程序退出或设备进入睡眠状态时,audio停止播放。 由于我只显示不直接播放audio文件的networking视图,因此我不能使用这些方法在后台播放audio。 但是,如果您通过Safari应用程序访问相同的链接,在手机进入睡眠状态后,audio会继续播放。 我怎样才能在我的应用程序中实现相同的效果?