簡體   English   中英

iOS仍然可以在iOS 10中的iBeacon范圍內啟動應用程序嗎?

[英]Can iOS still launch an app in range of iBeacon in iOS 10?

我一直在尋找有關該主題的天。 我看過幾篇文章,但所有實現都不起作用,或者,他們提到了不推薦使用的方法,選項或私有庫。 我發現Apple文檔是有史以來最糟糕的事情,但是即使在那被稱為文檔的文本混亂牆中,我也發現了一些參考,它們基於輸入iBeacon的范圍來啟動終止的應用程序。

我需要做的是完全關閉並終止該應用程序,就像用戶已完成並完成該操作一樣。 然后,我需要在info.plist中將UIBackgroundMode用於BLE服務,以偵聽didRangeBeacons委托方法。 它會觸發,所以我知道很多工作。

到目前為止,到目前為止所有實現都失敗了。 您究竟如何將應用程序從iBeacon范圍內啟動到甚至是背景狀態? 我開始認為您所能做的就是在范圍內觸發本地通知...

借助CoreLocation和iBeacon, CoreLocation基於iBeacon檢測的應用程序從未運行狀態自動啟動非常容易。

為了使其正常工作,必須滿足一些先決條件:

  1. 該應用程序必須已經手動啟動過一次。
  2. 該應用必須在首次啟動時向用戶請求並獲得“始終”位置訪問權限。
  3. 應用必須通過調用locationManager.startMonitoring(region: region)CLLocationManager注冊CLBeaconRegion ,並設置locationManager.delegate 由於您還想進行范圍調整,因此可以同時調用startRanging(beacons: beacons, region: region) 通常最簡單的方法是在AppDelegate.執行此操作AppDelegate.
  4. 手機必須啟用了位置並打開了藍牙。

如果您正確執行上述所有操作,則iOS CoreLocation會記住您的應用已注冊CLBeaconRegion並在檢測到信標時自動啟動您的應用。 即使重新啟動手機,或從任務切換器中殺死應用程序,它也會這樣做。 在后台自動啟動您的應用程序后,它將在委托上調用didEnter(region: region)回調,然后開始每秒調用一次didRange(beacons: beacons, region: region)回調,持續約10秒鍾,直到運行系統將再次暫停您的應用。

有很多方法可以在測試時出錯,所以這是行不通的。 但是,如果您做對了所有事情,這是相當可靠的。

您不能做的是以編程方式將應用程序置於前台,因為iOS不允許這樣做。 在iOS上,用戶必須打手勢將應用程序置於前台–這與信標無關,但在OS設計中卻是一個長期的規則。 這就是為什么許多應用程序在檢測到信標后處於短暫的后台狀態時會發送本地通知的原因,從而為用戶提供了一種將應用程序置於前台的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM