我们目前正在开发的应用程序需要用户的当前位置和用于信标的蓝牙。我们想要求用户允许使用GPS和蓝牙(单独)。我们计划在每次他/她打开我们应用程序的设置页面中的功能时询问用户的许可。有没有办法做到这一点?
到目前为止,我找到了这个链接:I want to trigger iOS7 to ask users permission to use Bluetooth and Twitter account
但它只会询问用户一次应用程序的生命周期。
PS:我们也是客观的新手 - 我将非常感谢您的详细解释。
提前谢谢!
答案 0 :(得分:2)
如果您想每次都询问,您必须构建自己的对话框以请求此权限。
默认情况下,当您第一次要求访问Location 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::
答案 1 :(得分:0)
所有应用程序在某些方面处理这种权限。
基本上,您的应用要求iOS执行某项操作,iOS会决定是否需要用户权限,并在需要时要求用户提供权限。用户可以拒绝您的iOS调用在哪种情况下获得适当的错误。用户可能拒绝上次启动应用程序或可能已关闭首选项权限,在这种情况下,如果没有UI,您的调用将失败。用户可以在首选项中打开权限,或者可能在第一次获得权限,并且您的呼叫将在没有任何UI的情况下成功。
这是每个人的工作方式。你可以提出一些警告或对话来获得用户的许可,但这不会让你到任何地方。您无法通过iOS本身获得用户的许可。即使你可以,你也不想使用与其他人不同的用户界面。即使你这样做,也意味着你的应用很可能会被商店拒绝。
注意:您链接到的蓝牙权限通知可能很有用。当然,您不应该在示例代码的末尾实现警报,这只是为了演示代码是否正常工作。