2014-09-11 97 views
0

iOS 7.1及以上的地理圍欄。所以當用戶已經進入地理圍欄並且說看到應用的廣告時,只有從應用商店下載應用並打開應用。在這一點上,應用程序需要給用戶一個特定的消息(但只有一次)。這可以如何實現?地理圍欄 - 檢查用戶是否已經進入圍欄

後來該應用程序註冊該區域並將其監視爲正常,以便當用戶進入和退出該區域時,會發生特定的事情。

我覺得這應該是一個解決的問題。即。應該有一種可靠的方法來確定用戶是否已經在監控開始的時候進入了某個區域,但是我沒有找到任何關於如何使用給定API來完成的指示。

當應用程序在這種情況下我看到的iPhone 5S

locationManager startMonitoringForRegion 
<location permission popup> 
locationManager:didStartMonitoringForRegion: (in this delegate method i can call the below to check if the device is already inside the region) 
    |-locationManager requestStateForRegion: 
locationManager:didDetermineState: (fired as a result of the requestStateForRegion: call) 

不過的LocationManager的API以下順序啓動:didDetermineState:也被稱爲對區域的入口和出口

locationManager:didExitRegion: 
locationManager:didDetermineState: 

所以我是否需要保存某個特定區域的狀態,並且初始消息已經顯示?所以不顯示它,如果該狀態存在..聽起來哈克!

+0

您希望多久顯示此消息?聽起來你想在應用程序的整個生命週期內在每個區域顯示消息一次。在這種情況下,您已經需要存儲每個區域的消息顯示狀態。如果你想說出入口/出口與「我在該地區內發起的事情」之間的區別,看起來前者通常只會發生在後臺,而後者將發生在前臺。也許'[[UIApplication sharedApplication] applicationState]'對你的用例很有用。 – Asa 2014-09-15 23:04:23

+0

是的,我想講述一個入口/出口與「我第一次在該地區內發起」之間的區別。由於應用程序可以多次啓動,因此應用程序狀態不會是確定性的,除非如上所述,應用程序在本地存儲和管理每個區域的消息顯示狀態。我的想法是否正確? – inforeqd 2014-09-17 03:45:48

回答

0

要確定是否該應用程序是在開始監視時的區域內,執行以下操作:

[locationManager requestStateForRegion: region]; 

當CLLocationManager確定用於給定的區域中的狀態,下面是發送到其委託:

- (void)locationManager:(CLLocationManager *)manager 
     didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region 
{ 
    // When regions are initialized, see if we are already within the geofence. 
    switch (state) 
    { 
     case CLRegionStateInside: 
      // We are in the region. 
      break; 
     case CLRegionStateUnknown: 
     case CLRegionStateOutside: 
     default: 
      break; 
    } 
}