10

特定の場所への近さやその他のルール(そのエリアに特定のメッセージがあるかどうかなど)に基づいて、特定のメッセージをユーザーに配信する必要があります。たとえば、ユーザーは車に乗り込み、仕事に取り掛かります。彼が職場に到着した瞬間、配信されるメッセージがある場合、彼はある種のメッセージを受け取ります。これが私が考えていたものです(コードはまだありませんが、アプリの他の部分で作業しているときにフローを設計しようとしています)

  1. 重要な場所の変更を聞き、それが発生するたびに、ユーザーのジオロケーションをサーバーに送信して、その場所の近くに配信されるメッセージがあるかどうかを確認します。立ち入り禁止。ラジオを使いすぎると、バッテリーが消耗しすぎてしまいます。

  2. メッセージ領域を毎日保存し、重要な場所の変更ごとに、ローカルに保存されているデータに対してテストを実行します。何かが一致する場合は、サーバーに連絡してください。理論的には良く聞こえます。

質問:

  1. 2番は機能しますか?
  2. 重要な場所の変更の忠実度はどれくらいですか?場所の変更の通知を受け取らないことで、特定の地域のメッセージを失わないようにしたいと思います。
  3. 重要な場所の変更は本当にセルタワーの変更に基づいていますか?(私は何度も読んだ'そうではない)
  4. 地域の監視はこのタスクにより適していますか?使っている人はいますか?そのバッテリーの消耗は何ですか?それは重要な場所の変更に対してより良いまたは同等の忠実度を持っていますか?
  5. アプリが終了した場合、大幅な場所の変更は本当に私のアプリを目覚めさせますか?ちょっとそれに依存します。
  6. 私がここで話していなかった方法でこれにアプローチする方法についての提案はありますか?

このようなもののいくつかを片付けるのに時間を割いてくれた人に感謝します。

編集:追加の質問7.リージョンの監視、多数のリージョンを追加すると、システムに影響がありますか?2つのリージョンと100のリージョンがあると言いますか?

4

3 に答える 3

27

私は同様のプロセスを実験し、次のように、大幅な場所の変更と地域の監視の両方を使用して最善を尽くしました。何度も繰り返した結果、現在、バッテリー寿命への影響はほとんどなく、処理の信頼性もかなり高いと感じています。

大幅な場所の変更を使用して、通知をフィルター処理し、現在の位置から限られた半径内にあるもののみに領域を設定するメソッドをトリガーします。

私の経験に基づいて、重要な場所の変更は約 3 ~ 4 マイル離れて発生することが予想されます。これは大きく異なる可能性がありますが、それ以上のものを見たことを思い出すことはできません. これにより、ユーザーが高速道路に乗ったときにかなり予測可能な、町中での処理が非常にまれになります。領域サイズ、更新半径、位置情報サービスの感度設定について、さまざまなバリエーションを試しました。

登録できる地域の数は限られていることに注意してください。その制限が正確に何であるかはどこにもわかりませんでしたが、一部のユーザーは、1 つのアプリが 10 を超える地域を登録することを期待すべきではないと述べています。私自身、その数字を立証するための参照を見つけていません.10以上を登録することもあります.

デバイスがかなりの時間高速道路の速度で移動しているのが見られる場合、リフレッシュのために半径と最小距離を増やして遊んでみました。これは、不必要な処理サイクルでバッテリーを浪費している可能性があると感じる状況です. 実際の使用では問題にはならなかったようですが、とにかく効率を最大化するように努めています。

あなたの特定の質問に関連する私の経験。

1-あなたの場合、トリガーが通知するために考慮しようとしている場所にどれだけ近いかによって異なります。ユーザーが数マイル以内に到達したとき、またはユーザーが町に到着したときに通知する場合、これは実際に機能する可能性があります。ユーザーが場所から数メートル以内に入ったときにトリガーしたい場合、これは適していません。私の経験では、場所の大幅な変更をリッスンしても、一般的にバッテリー寿命に大きな影響はありません。もちろん、イベントの受信時に実行している処理とネットワーク アクティビティの量も別の要因です。デバイスがどれだけ移動したか、最後の場所が受け入れられてからの時間を確認します。私の場合、毎回すべてを更新する必要はなく、それに応じて反応を制限しています。

2- 重要な場所の変更に関する私の経験は上記のとおりですが、すべての文書から、使用されるさまざまな信号の条件と可用性ほど、設定された距離の問題ではないことが明らかになっています。都市環境では、より予測可能であり、広いオープンスペースでは少ないと思います. 私の経験のほとんどは前者です。

3- 大規模なグーグル検索、ドキュメントの流し込み、および多くの情報に基づいた推測から、重要な位置の変化は、ユニットが利用できるすべての信号の魔法の組み合わせによって決定されると結論付けました. さまざまな精度で位置をブロードキャストする Wi-Fi 信号があり、携帯電話基地局は通常、それらがどこにあるかを認識しています。位置情報サービスは、これらすべてとそれぞれの信号強度を使用して、デバイスが「かなりの距離」をいつ移動したかを判断します。計算が条件によって異なり、精度と消費電力のバランスを改善し続けるにつれて変更される可能性があることは明らかだと思います。したがって、あいまいな仕様です.

4- 質問 1 に示されているように、重要な場所の変更だけを使用できると判断する可能性のある考慮すべき要素がありますが、いずれにせよ、地域の監視が目的に最も適していると思います。おそらく両方の組み合わせが適切です。私自身の用途に大満足で使用しています。

5- 場所が大幅に変更されると、アプリが起動します。バックグラウンドで実行することを意図したメソッドでは、いくつかのガイドラインに従い、制限を認識する必要があります。バックグラウンド メソッドを beginBackgroundTaskWithExpirationHandler および UIBackgroundTaskInvalid 呼び出しでラップします。スレッドのブロッキングに注意してください。ドキュメントと位置情報処理のガイドライン全体をお読みください。

6-私のお勧めは上記の通りです。その他の考慮事項は、一般的な位置情報サービスの使用にあります。ある種のカスタム ハンドラーを作成する必要があります。サービスを使用しているときでも、受信したすべてのメッセージに反応したくありません。変更、正確さ、最新性、およびジャズが必要な頻度でのみ応答するすべてをチェックする必要があります。この一連の投稿は、基本を理解する上で非常に貴重であることがわかりました:ロング ウィークエンド Web サイトからのパート 1/3

7- 上記のとおり、登録できる地域の数にはシステム全体の制限があると理解しています。その数が正確にはわからないため、他のアプリケーションによって設定されている他の数に応じて、アプリが多かれ少なかれ許可される可能性があると思います。私の経験では、設定した半径内の 10 ~ 15 のリージョンを定期的に登録および削除しています。最後の入力が最初に削除または拒否されると想定しているため、最も近いものから最も遠いものへと順番に設定しました。その他の考慮事項 - 地域識別子はグローバルであるため、一意でない場合は、以前の地域を同じ名前に置き換えます。-領域のサイズとマージンは、特定のニーズに合わせて最適なものを見つけるために実験する必要がある設定です。

于 2012-07-29T16:38:59.647 に答える
3
  1. そうは思わないでください。サーバーからデータを取得すると予想されますが、リージョンが追加されます。(古いデータには) 何も存在しないため、アプリはこの領域をチェックしません。その領域にメッセージが存在しなくても、すべての可能な領域を収集すれば機能します。これは明らかに事前定義された領域でのみ機能します。
  2. 詳細については、WWDC 2011 のビデオを参照してください。セッション 500は 17 分から始まります。
  3. いいえ、iOS5以降もWiFiを使用しています(ビデオを参照)。
  4. 地域がすでにわかっている場合は絶対に使用してください。たとえば、できます。アプリに一連のリージョンを提供し (これを 5 分ごとにダウンロードします)、ユーザーがこのリージョンにヒットした場合にのみデータをダウンロードします。現在お住まいの地域には通知されないことに注意してください。現在の地域のデータを定期的に更新してください (メッセージに関連する地域の場合)
  5. はい、バックグラウンドでアプリを起動するか、完全にシャットダウンします。
  6. この地域にない場合でも、すべてのメッセージをダウンロードできます。そして、ユーザーがリージョンにヒットした場合にのみ、それらを表示/ポップアップします。ただし、これはメッセージ データがそれほど多くない場合にのみ可能です。たとえば、すべての人に同じメッセージを使用することを計画している場合 (例: 「この美しい建物を見てください」)、全世界からすべてのデータをダウンロードするには多すぎます。
  7. すいません知らないです。カレンダーイベントを作成するのと同じだと思いますが、よくわかりません。
于 2012-07-23T11:11:12.720 に答える