2017-09-25 17 views
0

iOSのEddystoneビーコントラッキングで実際にこのようなことが可能かどうかを知りたいと思います。iOSのEddystoneビーコンのバックグラウンド追跡

私は現在、Eddystoneビーコンをスキャンする必要のあるアプリを開発中です。 アプリの基本的な考え方は次のとおりです。 - ユーザーがアプリを開きます。 - ユーザーは特定の時刻(将来)に会議の登録を行います。 - 会議の開始5分前にBTスキャンを開始します。 - 検出されたビーコンがネットワーク要求を行い、ユーザに通知を表示します。

アプリがフォアグラウンドにある場合は問題ありません。電話するだけで

func startScan() { 
    if centralManager.state == .poweredOn { 
     let services = [CBUUID(string: "FEAA")] 
     let options = [CBCentralManagerScanOptionAllowDuplicatesKey: true] 
     centralManager.scanForPeripherals(withServices: services, options: options) 
    } 
} 

スキャンが開始されます。 ビーコンが見つかったときに、サーバーから正しいデータが取得されたら、スキャンを停止します。

アプリがバックグラウンドであってもスキャンの開始をスケジュールすることはどうしても可能ですか? もちろん、それが殺されたら、それで何もできません。

ひとつのアイデアは、いくつかの「サイレントローカル通知」を作成することでしたが、その後のAppleのドキュメントを読ん後には、アプリがフォアグラウンドにあるときだけに呼び出され

func userNotificationCenter(_ center: UNUserNotificationCenter, 
          willPresent notification: UNNotification, 
          withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
} 

のように思えますか?

ご意見やご提案をいただければ幸いです。

答えて

1

アプリがフォアグラウンドで実行されていない場合は、特定の時刻にBluetoothスキャンを開始するようスケジュール設定することはできません。非常に特定の時間に通知(リモートまたはローカル)でアプリを起動する信頼できる方法はありません。サイレントリモート通知は可能ですが、配信には数分かかることがあります。

EddystoneサービスのUUIDをスキャンするように設定することで、アプリケーションがバックグラウンドにあり、ビーコンが初めて表示されたときにCoreBluetoothによる単一のディスカバーコールバックを取得できます。主なキャッチは、これも超高速ではないということです。検出は数秒以内に行われるかもしれませんが、ビーコンが近くにある1〜2分後に検出される可能性があります。

+0

説明していただきありがとうございます。私は、アプリがバックグラウンドにある特定の時間にスケジュールすることができないことを恐れていました。 – Karlis

+0

しかし、サイレントプッシュ通知はどうですか? https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW1 サイレントプッシュ通知を設定する方法の例があります。そのようなケースがアプリストアによって承認されるかどうかを考えよう: 1.サイレントプッシュ通知を送信する 2.ビーコンの監視を開始するバックグラウンドタスクを開始する – Karlis

関連する問題