6

I have an app which needs to communicate with a server (to refresh it's data) once every 24 hours. This needs to happen even if the app is not open, nor in the background.

Ideally what I'd like is:

  • Every 24 hours, my server sends a push notification to iPad
  • This wakes up the app, and runs the code necessary to refresh the data
  • The notification is then discarded

Is any of this possible?
Is the app only woken up AFTER the user clicks on the notification? Or can I run some code before showing the notification? Can I even discard the notification message?

If Push notifications are not the right way to do this, what is???

Thanks guys!

4

4 に答える 4

9

iOS 7 のリリースにより、リモート/サイレント通知を使用して、これがついに可能になりました。プッシュ通知と同じように機能しますが、ユーザーにすぐに警告する代わりに、バックグラウンド フェッチ モードを開始して、新しいコンテンツをアップロード/ダウンロードできます。

ここに簡単なチュートリアルがあります: http://www.objc.io/issue-5/multitasking.html

于 2014-01-31T01:13:34.997 に答える
2

これは、アプリケーションがニューススタンド アプリである場合にのみ可能です。ニューススタンド アプリである場合は、content-available: true24 時間ごとに 1 回プッシュ通知を送信できます。

ニューススタンド アプリでない場合は、代わりに GPS フェンスを使用してコードを実行できます。ユーザーが特定のエリア (つまり、自宅/職場) に近づいたときにアプリを更新する場合は、ユーザーが GPS フェンスをセットアップできるようにすることができます。これによりアプリが起動し、バックグラウンド ダウンロードを実行できます。たとえば、Instapaper はこれを行います。

于 2012-08-08T09:07:23.437 に答える
0

期間が常に24時間になる場合は、プッシュ通知の代わりにローカル通知を使用できます。

ユーザーがプッシュ通知を開かない限り、アプリはコードを実行できません。プッシュ通知はOSによって処理され、アプリはアクティブでない間、またはバックグラウンドでプッシュを確認する必要があります。通知プログラミングガイド

あなたがやろうとしていることを達成するための別の方法は、アプリが起動され、最後の更新が24時間前に行われるたびに、サーバーからデータを取得することです。

  1. サーバーに接続するたびに、日付をNSUserDefaultに保存します
  2. ユーザーがアプリを開くたびに、最後のサーバー接続が24時間前に発生したかどうかを確認してから、データを更新します
于 2012-08-08T09:52:05.527 に答える
0

いわゆる VOIP プッシュ通知を使用して可能です。この通知は、アプリが完全に閉じられている場合でも、バックグラウンドでコードを実行できます。

于 2018-08-01T11:34:55.010 に答える