基于动态位置的本地通知Swift iOS

前端之家收集整理的这篇文章主要介绍了基于动态位置的本地通知Swift iOS前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在用户接近停车时为公交车提供一些到达时间,我已经通过发送基本的本地通知进行测试,以确保正确地触发了这些地区,并且我也测试过我的网络服务电话,以确保它正常工作.

但是,我很难获取信息,然后发送通知.

这是我的代码

var bgTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier()

    bgTask = UIApplication.shared().beginBackgroundTask {

        self.webService?.getStopEstimates(routeStopIds: stopRouteIdSet,routeNameDict: routeNameDict,completion: { (result) in

            if result == "error" {
                return
            }

            let notification = UILocalNotification()
            notification.fireDate = Date(timeIntervalSinceNow: 1)
            notification.alertTitle = region.identifier + " Stop Details"
            notification.alertBody = result
            notification.soundName = UILocalNotificationDefaultSoundName
            UIApplication.shared().scheduleLocalNotification(notification)
        })

        UIApplication.shared().endBackgroundTask(bgTask)
    }

任何人看到为什么它可能不发送?我启用了后台抓取和定位服务.这是在doEnterRegion里面

我做了同样的事情(当用户接近一个有折扣的商店,他/她将被通知).

首先,我建议您下载所有数据并将其保存在Core Data或sqlite中,如果是可选项.

第二个看看重要位置更改here.如果你正在移动,它将在每个500米的背景中更新你的位置,它将节省大量的电池而不是didUpdateLocation.

第三次使用SLC后,在每次调用时,从您的Core Data或sqlite中获取当前位置的20个最近的位置,并将其添加到监控中(使用Haversine计算与当前位置的所有点距离,然后获取最近的20点).每次SCL调用更新您监视的区域(如果保存数据离线不是一个选项,我建议您在这里的webservice发送请求.理想的情况是,您将发送您的位置到您的Web服务,它会回复返回最近的点,然后添加它们进行监控)

当didEnterRegion调用时,请确保您的数据已下载,然后创建本地通知.

如果您需要更多细节,请告诉我们

PS.请记住,如果使用大量资源,系统可能会终止您的应用程序(在后台).在这种情况下,您必须重新初始化拉取和显示数据所需的所有内容(网络请求,位置管理器等)您可以检测到AppDelegate的didFinisingLaunchingWithOptions中的位置事件重新启动了该应用程序:

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {}

猜你在找的Swift相关文章