你如何申请iOS权限?

问题描述 投票:0回答:1

我知道对这个问题的回答是“在info.plist中设置它”但是如果我理解它的工作方式,那么如果用户拒绝你请求的权限,他们就不会再次被提示,除非你有效地阻止你的应用。 ..write代码来检查权限。是对的吗?所以我不知道为什么每个人都像iOS一样自动行事。你仍然需要检查权限,对吧?

假设我是对的,我在哪里可以找到有关如何正确执行此操作的文档。我检查了this(解决方案是插件,我不想使用),this(代码太复杂),this(啰嗦的非答案),和this加上其他几个来自谷歌指向this插件我不喜欢我不想用。我只想要一个关于如何检查和请求iOS权限的文档的链接。有这样的链接吗?

我看起来像这样:

private bool HasLocationPermission()
{
    return  CoreLocation.CLLocationManager.Status == CoreLocation.CLAuthorizationStatus.Authorized ||
            CoreLocation.CLLocationManager.Status == CoreLocation.CLAuthorizationStatus.AuthorizedAlways ||
            CoreLocation.CLLocationManager.Status == CoreLocation.CLAuthorizationStatus.AuthorizedWhenInUse;
}

但是,当然,这只是“位置”权限。我没有看到有关LocationManager文档中要检查的内容的任何信息。请求理性还是某种东西?我在哪里可以找到如何做到这一点?请不要插件。

xamarin xamarin.ios
1个回答
3
投票

如果你研究了你链接到的权限插件中的代码,你可以很容易地扣除你必须做的事情。

在iOS中有2种不同类型的位置权限,要么它们中的任何一个都可以工作,您需要在Info.plist中设置一些描述,这些描述将在提示权限对话框时显示。

根据您的需要设置NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription。这种模式的区别是。在使用时,用于偶尔需要定位服务,即用于简要地显示地图。虽然总是通常是需要它的应用程序始终跟踪用户位置。

Info.plist中的部分将类似于:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Do you want My App to access your location?</string>

正如您已经发现的那样,您可以使用CoreLocationCLLocationManager来获取当前的权限状态:

var locationManager = new CLLocationManager();
var status = locationManager.Status;

状态将是:

  • NotDetermined - 该应用程序尚未获得许可,或者可能从未被要求过。
  • qazxsw poi - 如果您要求始终位置并添加密钥qazxsw poi。
  • AuthorizedAlways - 如果您在使用时请求位置并添加了密钥NSLocationAlwaysUsageDescription
  • AuthorizedWhenInUse - 用户说“不,谢谢你”

如果您想申请许可,只需致电:

NSLocationWhenInUseUsageDescription

您可以使用Denied事件收听授权更改:

locationManager.RequestAlwaysAuthorization(); // for always
locationManager.RequestWhenInUseAuthorization(); // for when in use

AuthorizationChanged将为您提供新的状态。您可能希望在请求权限之前将其连接起来。

locationManager.AuthorizationChanged += OnAuthorizationChanged;

现在您可以开始收听位置更改:

CLAuthorizationChangedEventArgs
© www.soinside.com 2019 - 2024. All rights reserved.