8

1 時間ごとにデータを取得する機能を提供するアプリを作成しています。アプリが終了してもデータをフェッチします。この機能を実装するにはどうすればよいですか?

いろいろ検索した結果、performFetchWithCompletionHandler を使用したバックグラウンド フェッチが見つかりました。アプリが終了してもこの機能は動作しますか? つまり、アプリが閉じた状態または終了した状態にある場合、この関数を自動的に呼び出すことができますか?

4

6 に答える 6

11

アプリが終了状態の場合、何もできません。Apple は、終了またはクローズ状態で何も許可していません (通知の受信を除く)。

また、バックグラウンド実行も制限されています。次のような特定の種類のタスクをバックグラウンド モードで実行できますLocation update,Music playing, VOIP, finite length task, Newsstand downloads, etc。バックグラウンド実行の詳細については、Apple のドキュメントを参照してください。

これが役立つことを願っています:)

于 2016-05-19T09:35:57.863 に答える
1

アプリに関連するタスクを一切実行しなくなると、アプリは終了します。アップルはそれをサポートしていません。アプリが実行されていないときは、関数を呼び出すことはできません。Appleのルールにより、それは不可能です。 performFetchWithCompletionHandlerアプリケーションが終了した場合、アプリケーションが実行されているときにのみ機能し、いかなる種類のタスクも実行しません。

于 2016-05-19T12:45:37.073 に答える
1

あるプロジェクトに取り組んでいたときにこれが必要になったとき、残念ながら解決策が見つかりませんでした。

アプリがバックグラウンド状態のときにタスクを実行できますが (これもサービスが制限されています)、Apple はアプリが終了したときにタスクを実行することを許可しません

リンクをたどってください。

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

これはバックグラウンド実行用です。 アプリがバックグラウンドにあるときに緯度と経度をサーバーに送信する

于 2016-05-19T11:07:07.070 に答える
0

約500メートルのように場所が大きく変化した後、アプリが終了した状態で場所を見つけることができます。ここに実例があります

http://mobileoop.com/getting-location-updates-for-ios-7-and-8-when-the-app-is-killedterminated一時停止

しかし、私が立ち往生しているのは、Webサービスを介した投稿場所です。

于 2017-08-26T11:24:03.573 に答える
-3

@ Jack.Right 1時間ごとにメソッドを呼び出すことができるので、NSTimeintervalを使用すると便利です!!

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication *app = [UIApplication sharedApplication];

    //create new uiBackgroundTask
    __block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    //and create new timer with async call: 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //run function methodRunAfterBackground
        NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(methodRunAfterBackground) userInfo:nil repeats:NO];
        [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
        [[NSRunLoop currentRunLoop] run];
    });
}
于 2016-05-19T10:04:04.440 に答える