2012-07-20 69 views
10

我需要根據其與特定位置的接近程度以及其他一些規則(如該區域是否有任何特定消息)向用戶傳遞特定消息。例如用戶上車並開始工作。當他到達工作的那一刻,他會收到一條消息,如果有消息要傳遞的話。下面是我在想什麼(無碼還只是想,而我在我的應用程序中的其他部分設計流量)地理圍欄的重大位置更改

  1. 聽顯著的位置變化,每一個發生的發送用戶的地理位置服務器時間看看是否有消息在該位置附近交付。不行。由於過度使用收音機,這會耗盡電池。

  2. 每天保存消息區域,並在每個重要位置更改對本地存儲的數據進行測試。如果有任何匹配THEN聯繫服務器。理論上聽起來更好。

問題:

  1. 能2號的工作?
  2. 重要位置變化的保真度是什麼?我不希望因爲沒有得到地理位置變更的通知而在特定地區丟失信息。
  3. 重大的位置變化是否基於單元塔變化? (我讀了很多場合,它不是)
  4. 地區監測是否更適合這項工作?任何人使用它?什麼是電池耗盡,它有更好的或保持顯着位置變化的保真度?
  5. 如果應用程序被終止,顯着的位置變化真的會喚醒我的應用程序?有點取決於它。
  6. 有關如何以我沒有在這裏討論的方式來解決這個問題的任何建議?

百萬感謝任何花時間清理這些東西的人。

編輯:額外問題 7.區域監控,添加大量區域對系統有什麼影響?說有2個地區與100個地區?

+0

哪裏的消息從何而來?它們是通過網絡傳遞的嗎?那麼每天的新地區呢? – 2012-07-29 13:04:47

回答

27

我已經嘗試過一個類似的過程,並使用了以下重要的位置更改和區域監視功能。經過多次迭代後,我目前對電池壽命和相當可靠的處理的影響很小。

我使用重要的位置更改來觸發過濾通知的方法,僅爲當前位置的有限半徑內的區域設置區域。

根據我的經驗,相當大的位置變化可能會發生在相距約3-4英里的地方。這可能會有很大的差異,但我記不起來了。這使得在城鎮周圍非常罕見的處理,當用戶上高速公路時相當可預測。我嘗試了多種區域大小,刷新半徑和位置服務敏感度設置。

請記住,您可能註冊的區域數量有限。我找不到任何限制,但有些用戶聲稱,任何單個應用程序都不應該期望註冊更多的10個區域。我自己沒有找到任何證據來證明這一數字,我有時註冊超過10個。

我玩過增加半徑和刷新的最小距離,當它看到設備以高速行駛時,持續時間。這是一種情況,我覺得我可能會浪費電池,造成不必要的處理週期。在實際使用中,它似乎沒有問題,但我一直試圖在任何情況下最大限度地提高效率。

我的經驗與您的具體問題有關;對於你的情況,這取決於你想要觸發通知的位置有多接近。如果您通知用戶幾英里之內或用戶到達城鎮時,這實際上可能是可行的。如果您想在用戶進入某個位置數米範圍內時觸發,這不適合您。根據我的經驗,聽取重大位置變化通常不會對電池壽命產生重大影響。當然,在接收事件時你正在做多少處理和網絡活動是另一個因素。我檢查設備移動了多久,距離上次位置被接受了多少時間。在我的情況下,沒有必要每次都刷新一切,我相應地限制了我的反應。

2-我對重要的位置變化的經驗如上所述,但所有文件都明確表示,它不是設定距離的問題,而是使用各種信號的條件和可用性。我想在城市環境中,它在更寬廣的空曠空間中更具可預測性,更少。我的大部分經驗都來自前者。從廣泛的谷歌搜索,通過文檔和大量的知情推測,我得出結論,重大的位置變化是由所有可用信號的組合的神奇組合決定的。有無線信號廣播他們的立場不同程度的準確性和手機塔通常知道他們在哪裏。位置服務使用所有這些信號以及各自的信號強度來決定設備何時行進了「顯着距離」。我認爲很明顯,計算結果會隨着條件的變化而變化,並且隨着精度和功率使用之間的平衡不斷提高,可能會發生變化,因此模糊的規格會有所改變。

4-如問題1所示,需要考慮的因素可能會決定您可以單獨使用顯着的位置更改,但我認爲在任何情況下區域監測都最適合您的目的。可能兩者的組合都是爲了。我對自己的應用非常滿意。

5-重大的位置更改將喚醒您的應用程序。您必須遵循您的方法中的一些準則,以便在後臺運行並注意限制。在beginBackgroundTaskWithExpirationHandler和UIBackgroundTaskInvalid調用中包裝您的後臺方法。注意線程阻塞。完整閱讀文檔和位置處理指南。

6-我的建議如上。其他考慮因素一般在於您使用位置服務。你需要製作一個自定義的處理程序。即使您使用該服務,也不希望對收到的每條消息作出反應。您必須檢查變化,準確性,新近性以及所有爵士樂響應的頻率。我發現這一系列的帖子在獲取基礎知識方面是非常寶貴的:Part 1 of 3 from the Long Weekend Website

7-如上所述,我的理解是,可以註冊的區域數量存在系統範圍限制。我認爲,由於他們沒有確切地告訴你該數字是什麼,它可能會讓你的應用或多或少取決於其他應用程序設置了多少其他應用程序。根據我的經驗,我定期在我設定的半徑範圍內註冊並刪除10到15個區域。我按照從最近到最遠的順序設置它們,因爲我認爲最後一個將被首先刪除或拒絕。 其他考慮因素 - 地區標識符是全球性的,所以如果你的地址不是唯一的,它會替換以前地區的同名。 - 區域大小和邊距是您需要嘗試的最佳設置,以滿足您的特定需求。

+0

感謝您的詳細回覆。我想知道你是否至少可以參加一些諮詢工作。如果是這種情況,請發送電子郵件至mihai at pocorschi dot com – pocorschi 2012-08-01 12:11:25

+1

「一款應用程序最多可同時註冊20個區域。」 [請參閱此處的文檔](http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html#//apple_ref/occ/instm/CLLocationManager/startMonitoringForRegion :) – Bach 2012-10-16 01:44:14

+1

我不認爲我剛開始時就說過。我看到他們也更新了4,4S和5之間的性能差異。如果你有興趣,我把我的最新版本的處理程序放在github上。 https://github.com/dsdavids/TTLocationHandler – 2012-10-16 01:58:17

3
  1. 不這樣認爲。預計你會從服務器獲取數據,但是會添加一個區域。該應用程序不會檢查此區域,因爲沒有任何內容(在舊數據中)。如果您收集所有可能的區域,即使沒有該區域的消息,它也可以工作。這顯然只適用於預定義的區域。
  2. 查看WWDC 2011 Videos瞭解更多信息Session 500從17分鐘開始。
  3. 不,它自iOS5以來也在使用WiFi(請參閱視頻)。
  4. 絕對如果你知道地區已經然後使用它們。你可以例如。爲應用程序提供一系列區域(每5分鐘左右下載一次),並且只在用戶訪問該區域時才下載數據。請記住,您目前所在的地區不會收到通知。確保定期更新當前區域的數據(如果它的消息相關區域)
  5. 是的,它會啓動您的應用程序,無論它是在後臺還是完全關閉。
  6. 即使您不在該地區,也可以下載所有消息。只有當用戶擊中該區域時才顯示/彈出。但是這隻有在消息數據不多的情況下才有可能。例如,如果您打算爲所有人使用相同的信息(例如,「看這個美麗的建築物」),那麼從全世界下載所有數據將是太多了。
  7. 抱歉不知道。我想它與創建日曆活動一樣,但我不確定。
+0

所以你所說的是,現在的重要位置變化和區域監測都只使用wifi,並且完全忽略了信號塔變化? – pocorschi 2012-07-23 13:49:29

+0

不,我的意思是他們使用兩種技術,蜂窩和無線電 – 2012-07-23 15:30:03