必要でない限りデータを取得しない方法はありますか?
いいえ。
「時計を起こす」とは、時計を操作するか、手首を上げて時計をアクティブにすることを意味します。方法に関係なく、ウォッチはウォッチフェイスまたは最後のアクティビティ (ウェイクスクリーン設定によって制御されます) にウェイクアップできます。
いずれにせよ、時計が起動しているときにのみコンプリケーションを更新する不測の事態はありません。
何を求めているのかを考えると、ユーザーはウォッチフェイスをちらりと見て、現在の合併症データが既に表示されていることを期待しているため、Apple のガイドラインに反しています。システムは、時計が起動していないときに更新を提供することを期待しているため、時計が起動するとすぐに情報が表示されます。
合併症データの更新
利用可能な更新方法のうち、これらは要件を処理しません。
PPKushTypeComplication プッシュ通知
これは、1 日中頻繁に更新しない場合に理想的です。
Apple は、サーバーから送信するこのタイプのプッシュの数に 1 日あたりの制限を適用します。制限を超えると、後続のプッシュは配信されません。
スケジュールされた自動更新
ここでの問題は、スケジュールされた最小更新間隔が 10 分であるため、残りの 9-3/4 分間は最新の合併症情報が得られないことです。
スケジュールされた更新は、予測可能な時間にデータが変更されるアプリに役立ちます。スケジュールされた更新が発生すると、ClockKit は最初にデータ ソースの requestedUpdateDidBegin または requestedUpdateBudgetExhausted メソッドを呼び出します。
これらのアプローチで要件を処理できる場合もありますが、それらを試して、どれがニーズを満たすかを判断する必要があります。
ウォッチ拡張機能 + バックグラウンド NSURLSession
これにより、バッテリーの消耗が大きくなる可能性がありますが、電話の範囲内になくても機能します.
による手動更新WCSession
transferCurrentComplicationUserInfo
電話の範囲内にいる場合、より可能性の高いアプローチは、電話が(常に)サーバーをポーリングしてから、一定の更新を提供することです。
iOS アプリは、コンプリケーション用の更新データを受信すると、Watch Connectivity フレームワークを使用してコンプリケーションをすぐに更新できます。WCSession の transferCurrentComplicationUserInfo: メソッドは、優先度の高いメッセージを WatchKit 拡張機能に送信し、必要に応じてそれを起動してデータを配信します。データを受信したら、必要に応じてタイムラインを延長またはリロードして、ClockKit がデータ ソースから新しいデータを要求するように強制します。
iOS 10 では、コンプリケーションの転送が予算化されていることに注意してください。1 日に多数の更新を実行している場合、このアプローチは機能しません。
そうは言っても、別のアプローチは、サーバー側でこれらのブール値を監視し、問題や変更があった場合にのみ通知を送信することです。これらのブール値が何を示しているかは正確には説明しませんでしたが、(電話や時計から) サーバーを絶えずポーリングする必要がないように監視する方法は他にもあります。
それができない場合は、携帯電話でサーバー データを表示するか、コンプリケーションの更新間隔をはるかに少なくすることを検討する必要があります。Apple はそのような頻繁な更新を思いとどまらせており、Apple 独自の (株価や天気) 複雑な問題でさえ、1 分間に数回更新することはありません。
アップデート:
ユーザーが自分でリクエストしたとき (= コンプリケーションをクリックしたとき) にのみコンプリケーションを更新したい場合はどうすればよいですか? 彼はいつも国家に本当に興味があるわけではありません。
ユーザーは、合併症が何を意味するのかを考慮する必要があります。最新情報を表示するために定期的に更新されるように設計されています。ユーザーはほとんどの場合、状態を知ることに関心がないため、合併症を更新しないメカニズムはありません。
コンプリケーションをタップしてアプリを開いてもらえますか? はい。しかし、合併症自体は古いデータを示しており、ユーザーは現在の状態を確認するために手首を上げるだけでは不十分です。
ユーザーが何を求めているかを考えると、ユーザーは合併症 (現在の状態を示すもの) を説明しているのではなく、要求したときに現在の状態を確認する方法を説明していると言えます。
そのメカニズムは合併症とは異なります。それらは実際には、ユーザーが上にスワイプして (または開いて) 表示する Glance (またはアプリ) を説明しています。
ライブ アップデートが必要な場合は、 経由で行うことができます。WCSession
updateApplicationContext
updateApplicationContext:error: メソッドを使用して、最近の状態情報を相手に伝達します。相手が目覚めると、この情報を使用して自身の状態を更新できます。このメソッドで新しい辞書を送信すると、以前の辞書が上書きされます。
その仕組みは、スマートフォンがバックグラウンドでアップデートをウォッチに送信することです。ウォッチには最新のアップデートが保存されており、アプリまたは Glance が起動したときに利用できます。ユーザーがアプリまたは Glance を表示すると、時計が保存した最新の値が表示されます。開いている間、新しい更新が到着すると、それ自体が更新され続けます。閉じている間 (非アクティブ、スリープ中など)、時計はアプリまたはグランスに代わって最新の更新を保存します。
ユーザーがアプリやグランスを 15 秒ごとに更新する必要がない場合は、ポーリングする必要はなく、単に a を使用しNSURLSession
て、拡張機能が起動したときに現在の状態を取得できます。
ユーザーが手首を上げたときにコンプリケーションを更新する方法はなく、常に状態を知る必要がないことをユーザーに説明する場合 (これはコンプリケーションの目的です)、一目でできることは、理想的にはバッテリーを不必要に消耗させることなく、ユーザーが望んでいるように見えることをはるかに簡単に達成できることです。