19262


iBeaconをバックグラウンドで検出してLocalNotificationを発行するアプリを開発し、  
App Storeで公開しようとしています。

しかしながらiTunes Connectでバイナリを審査に出すと、

> 2.16 - Multitasking Apps may only use background services for their intended
> purposes: VoIP, audio playback, location, task completion, local
> notifications, etc.

という理由からリジェクトされてしまいます。内容としては

> Your app declares support for location in the UIBackgroundModes key in your
> Info.plist file but does not declare any features that require persistent
> location. Apps that declare support for location in the UIBackgroundModes
> key in your Info.plist file must have features that require persistent
> location.  
>  Specifically, it is not appropriate and not necessary to use the location
> background mode for iBeacon detections.

となり、iBeaconの検出にUIBackgroundModesのlocationキーの定義は不要で継続的な  
位置情報を必要とする機能もアプリ内には見当たらないという内容でした。

ただアプリからUIBackgroundModesのlocationキーを外してしまうと、バックグラウンド  
時のレンジングが全く動作せずフォアグラウンド時のみしかiBeaconの検出ができません。  
Minor IDが異なる複数のiBeaconが存在する場所で、レンジング中に一番近くにある  
Beaconを選択して処理するためMinor IDを取得できないdidEnterRegion内では処理する  
ことができないです。アプリがバックグラウンドでiBeaconを受信してLocalNotification  
が表示される様子については審査の際に動画を送っているのですが・・・。

UIBackgroundModesのlocationキーを定義せずバックグラウンドでiBeaconのレンジング  
を継続する実装方法か、該当機能に継続的な位置情報が必要だとうまく説明する方法を  
教えていただきたいです。


CC BY-SA 3.0
2015-11-24T02:12:11.540
19224
2015-11-24T22:46:36.923
9212
question
ios objective-c ibeacon appstore-approval
iBeacon利用アプリでUIBackgroundModesにlocationを指定するとリジェクト


まず始めにiOSアプリでは、UIBackgroundModesでlocationをセットするか否かに関わらず、Background起動時での継続的なレンジングはできません。  
(ただし、約10秒間は動作します。)  
iBeaconのモニタリングは上記の設定に関わらずBackgroundでもアプリ停止時でも可能です。  
レンジングはモニタリングに比べて消費電力が多くなるため、Apple側が制限をかけていると思われます。

もし、Background起動時でも、ある程度の時間、レンジングをしたいということであれば、UIBackgroundTaskを利用する方法があります。  
ただし、最長で約3分間の起動です。  
(3分を超えてレンジングし続けることはできません。)  
参考:  
[バックグラウンドで継続して処理を実施する](http://qiita.com/edo_m18/items/52fb7190d4285aabc1c9)

少しでも参考になれば幸いです。


CC BY-SA 3.0
2015-11-24T22:46:36.923
19262
2015-11-24T22:46:36.923
8968
19224
answer