IOS - 如何向用户询问权限?
Posted
技术标签:
【中文标题】IOS - 如何向用户询问权限?【英文标题】:IOS - How to ask users for permissions? 【发布时间】:2014-09-08 07:18:10 【问题描述】:我们正在开发的当前应用程序需要用户的当前位置和信标的蓝牙。我们想请求用户允许使用 GPS 和蓝牙(分别)。我们计划在用户每次打开应用程序设置页面中的功能时征求用户的许可。有没有办法做到这一点?
到目前为止,我找到了这个链接:I want to trigger ios7 to ask users permission to use Bluetooth and Twitter account
但它只询问用户一次应用程序的生命周期。
PS:我们也是objective-c的新手,非常感谢详细的解释。
提前谢谢你!
【问题讨论】:
您实际上并没有向任何人请求用户许可,而是苹果代码请求许可。让它多次询问的唯一方法是用户是否进入设置并自己关闭它,即使这样我也不确定它是否会再次询问他们。 这个链接对你有帮助techcrunch.com/2014/04/04/… @Popeye 应用程序将再次询问用户是否已从设置中关闭蓝牙。用户是否要开启蓝牙? @Arpit 没有设备,因此可以了解是否会发生这种情况,感谢您的澄清。至于其余部分,它仍然是请求许可的是 Apple 代码而不是开发人员代码,我觉得每次用户需要蓝牙或 GPS 位置时询问是否为应用程序打开了它。 @Popeye Ya,这东西不能从开发者端处理。 【参考方案1】:如果您想每次都请求此权限,则必须构建自己的对话框来请求此权限。
默认情况下,当您第一次请求访问位置 API 时,Apple 触发的对话框会出现一次(或在 iOS8 中出现两次)。 要让 iOS 请求许可,您需要做几件事(在 iOS8 中):
将 NSLocationAlwaysUsageDescription
或 requestWhenInUseAuthorization
添加到您的 info.plist 中,这些键包含一个字符串,iOS 在执行下一步时显示的对话框中使用该字符串:
将requestAlwaysAuthorization
或requestWhenInUseAuthorization
发送到CLLocationManager 的一个实例。即
CLLocationManager* myLocationManager = [[CLLocationManager alloc] init];
[myLocationManager requestAlwaysAuthorization];
此时 iOS 将显示您熟悉的对话框。 iOS8 还会在初始权限后的某个时间(大约两天)显示另一个对话框来确认这一点。它不会重复询问。
如果你想构建自己的对话框,你应该这样做:
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Use bluetooth"
message:@"is it ok for this app to use Bluetooth"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* yesButton = [UIAlertAction actionWithTitle:@"Yes"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
// This code runs when the user presses YES.
// You should also add code to handle a NO button.
];
[alert addAction:yesButton];
然后您需要显示警报。大概用presentViewController::
【讨论】:
请注意,使用 open url 按“是”时将用户重新转发到蓝牙权限:root 将导致苹果拒绝您的应用【参考方案2】:所有应用程序处理这种权限的方式有一些。
基本上,您的应用程序要求 iOS 做某事,iOS 决定这是否需要用户许可,并在需要时请求用户许可。用户可能会拒绝,在这种情况下,您的 iOS 调用会出现适当的错误。用户可能在上次启动应用程序时拒绝了,或者可能在首选项中关闭了权限,在这种情况下,您的呼叫会在没有 UI 的情况下失败。用户可以在首选项中开启权限,或者可能是第一次授予权限,您的调用将在没有任何 UI 的情况下成功。
这就是每个人的工作方式。您可以设置一些警报或对话框来获得用户的许可,但这不会让您有任何帮助。如果不通过 iOS 本身,您将无法获得用户的许可。即使可以,您也不想使用与其他人不同的 UI。即使你这样做了,这也意味着你的应用很可能会被商店拒绝。
注意:您链接到的蓝牙权限通知可能很有用。当然,您不应该在示例代码的末尾实现警报,这只是为了证明代码正在运行。
【讨论】:
以上是关于IOS - 如何向用户询问权限?的主要内容,如果未能解决你的问题,请参考以下文章