私のIOSアプリでは、ジオフェンシングを実装しています。現在の実装では、次のようなコードを使用しています。
CLRegion* region3 = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:100 identifier:@"region3"];
[self.locationManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyHundredMeters];
そして、これらのデリゲートメソッドを使用しています:
(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{
NSLog(@"didenterregion");
}
(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region{
NSLog(@"didexitregion");
}
(void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{NSLog(@"monitoringDidFailForRegion");}
ただし、このコードは半径が 100m を超える場合にのみ正常に機能します。
ここにいくつかの質問があります:
- Apple によると、iOS 6 以降では、半径 1 ~ 400 m がデバイス 4 以降でサポートされています。メッセージが表示されるまでにどれくらいの時間がかかるかは気にしないので (たとえば、リージョンに入るときにメッセージを見ることは気にしませんが、そのリージョンを一度通過した場合は後者で見ることを気にします)より小さい半径を使用しますか? 半径50m以下のようなものに興味がありますか? (一部の地域では、私の場合は 20m も必要になります)。
私もそう思ってきました。Apple は、最大 20 の地域をサポートできると述べています。このようなソリューションの長所と短所は何ですか (まだ実装していませんが、意見が欲しいです)。
擬似コードは次のようになります。
Declare the regions - save them in an array
Do not call start monitoring
次に、デリゲート メソッドで:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
for loop in all my regions {
if ([region containsCoordinate: newLocation.coordinate])
code for entering region
}
}
- 遅くなりますか?
- それはより多くのバッテリーを消費しますか?(地域の監視はバッテリーを消費しないと思います)?
- もっと正確にできますか?
- モニターに登録していないので、20 を超えるリージョンを持つことはできますか?
前もって感謝します。