2

假设我有一个本机 iOS 应用程序,它显示两个或多个请求位置服务权限的 web 视图。

例如,想象一个应用程序比较给定查询的地图结果——例如,用户提交一个地址,一个 web 视图显示来自 google 地图的结果,另一个来自 bing,等等。

有没有办法避免每个离散的 Web 视图通过破坏性警报视图请求位置服务权限?

如果应用程序的唯一目的是比较各种基于位置的资产,我的应用程序似乎应该询问用户一次他们是否批准使用位置服务的应用程序。我的网络视图如何继承此权限,或者位置服务架构不可能做到这一点?

如果无法聚合访问位置服务的权限,有没有办法为每个离散的提供者保留权限?例如,用户不应该在每次运行应用程序时都批准对每个地图的访问......导致三个警报视图(应用程序和两个 web 视图),每次启动时都会询问相同的内容。

避免这种行为的唯一方法是实现对地图提供者而不是 webviews 的本机 API 调用?

欢迎任何意见。

4

2 回答 2

1

是的,你可以这样做。为此,请使用您的 appDelegate 类。如果位置交互代码比较简单,只需在appDelegate中创建一个获取授权状态的方法,并从didFinishLaunching方法中调用即可。

我用这样的方法做这样的事情:

    - (BOOL)setupLocationMgr  
   {
        CLLocationManager *locationMgr = [[CLLocationManager alloc] init];
        locationMgr.purpose = @"Location tracking for XXX app.";
        return [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized;
    }

然后 appDelegate 保留 CLLocationManager 对象,并可以将它返回给任何需要它的视图。

于 2012-05-04T18:12:25.503 回答
1

嵌入式 Web 视图处理用户位置权限的方式基于网站。每个需要用户位置的网站都需要专门询问用户(否则你可能会做一些狡猾的事情......)。

我认为您每次打开应用程序时都会看到警报,因为您正在重新创建另一个 Web 视图以进行显示,并且当应用程序被终止时缓存可能会被清除(对此不确定)。

于 2013-01-03T20:32:58.733 回答