2017-02-10 482 views
10

我在Boingo的Wi-Finder iOS應用程序中注意到,應用程序在用戶到達接入點時將通知推送給Boingo數據庫。通知告訴用戶他可以訪問wifi網絡。通過WiFi推送通知

這是怎麼做的iOS?

回答

2

您可以使用CLLocationManagerUserNotifications實現這一目標。

您可以使用區域監測服務,如CLCircularRegion類(以獲得地理區域)或CLBeaconRegion類(以獲得燈塔地區),當用戶跨越基於區域的邊界得到通知。如果即使您的應用程序未運行,也會出現邊界交叉,系統會自動在後臺將其喚醒(或重新啓動),以便它可以處理事件。

在這種情況下,選擇字典傳遞給應用程序(_中:didFinishLaunchingWithOptions :)你的應用程序代理的方法包含UIApplicationLaunchOptionsKey.location。然後trigger a local notification爲了通知用戶該位置的可用服務。

例子: -

  1. 使用位置監控: - https://www.raywenderlich.com/136165/core-location-geofencing-tutorial
  2. 使用iBeacons - https://www.raywenderlich.com/101891/ibeacons-tutorial-ios-swift

NB。正如其他答案建議可達性類也可以使用。但是,如果應用程序處於後臺或終止,則無法使用Reachability。要在應用程序處於後臺時觸發可訪問性,我們可以按照以下步驟操作:https://stackoverflow.com/a/35615381/4637057。但不幸的是,這裏的缺點是,後臺抓取設置爲應用程序越頻繁,將會使用更多的資源。 iOS通過對嘗試使用該API的應用程序施加限制來保護自己和設備,所以在設置自定義時間間隔時要謹慎。背景取消也會導致電池快速流失。

此外,只有當應用程序連接到該無線網絡時,可達性纔會觸發通知。但即使應用程序處於後臺並且手機尚未連接到WiFi,Boingo也會通知用戶。所以我強烈懷疑他們正在使用位置服務來檢測用戶是否進入了可用WiFi的區域。

+0

您提供的解決方案使用GPS /藍牙而非WiFi。我所問的是一個純粹的基於WiFi的解決方案。 – alandalusi

+0

這不是關於CLLocationManager的問題。它需要連接到指定的WiFi熱點。 –

+0

但是如果應用程序在後臺或終止,則無法使用可達性。同樣,只有當應用程序連接到WiFi網絡時,Reachability纔會知道。但即使應用程序處於後臺並且手機尚未連接到WiFi,Boingo也會通知用戶。所以我強烈懷疑他們正在使用位置服務來檢測用戶是否進入了可用WiFi的區域。 –

3

我認爲它可以通過在AppDelegate的與Reachability類觀察裝置的連通性進行didFinishLaunchingWithOptionsnetworkStatus是等於ReachableViaWiFi然後調用application.registerForRemoteNotifications()

更新: 有兩種類型的通知: RemoteLocal 你可以配置你的應用程序發送本地通知,但你需要之前設置它的內容, here你可以找到蘋果對如何處理局部n指南otification

+0

這需要我連接到該接入點。在Boingo,即使我沒有連接,我也會收到通知。 – alandalusi

+0

所以他們正在使用本地通知,沒有的APN看看[這裏](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/SchedulingandHandlingLocalNotifications.html#//apple_ref/doc/ uid/TP40008194-CH5-SW1)以獲得更多關於它如何工作的信息:) –

+0

但是,您如何知道您處於註冊接入點的空間? – alandalusi