IOS - 如何询问用户的权限?

时间:2014-09-08 07:18:11

标签: ios objective-c core-location bluetooth-lowenergy core-bluetooth

我们目前正在开发的应用程序需要用户的当前位置用于信标的蓝牙。我们想要求用户允许使用GPS和蓝牙(单独)。我们计划在每次他/她打开我们应用程序的设置页面中的功能时询问用户的许可。有没有办法做到这一点?

到目前为止,我找到了这个链接:I want to trigger iOS7 to ask users permission to use Bluetooth and Twitter account

但它只会询问用户一次应用程序的生命周期。

PS:我们也是客观的新手 - 我将非常感谢您的详细解释。

提前谢谢!

2 个答案:

答案 0 :(得分:2)

如果您想每次都询问,您必须构建自己的对话框以请求此权限。

默认情况下,当您第一次要求访问Location API时,Apple触发的对话框会出现一次(或在iOS8中出现两次)。 要让iOS获得许可,您需要做一些事情(在iOS8中):

NSLocationAlwaysUsageDescriptionrequestWhenInUseAuthorization添加到您的info.plist中,这些键包含一个字符串,iOS使用它在您执行下一步时显示的对话框:

requestAlwaysAuthorizationrequestWhenInUseAuthorization发送到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本身获得用户的许可。即使你可以,你也不想使用与其他人不同的用户界面。即使你这样做,也意味着你的应用很可能会被商店拒绝。

注意:您链接到的蓝牙权限通知可能很有用。当然,您不应该在示例代码的末尾实现警报,这只是为了演示代码是否正常工作。