2017-02-10 199 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