我想触发iOS7要求用户使用蓝牙和Twitter帐户的权限

这与大多数人所要求的有所不同。 我想故意触发要求用户许可的对话框:

  • 连接到蓝牙设备,即使在离线状态下。
  • 访问那里基于iOS的Twitter帐户。

我已经有一个类似的对话框的位置工作正常。 我这样做是因为我想通过显示一个欢迎屏幕解释为什么应用程序需要此服务,然后当用户点击确定,启动请求并触发对话时,让请求权限的过程像Heyday一样更温和。

我已经尝试了一些东西。 对于Twitter我已经尝试了以下内容:

- (void)triggerTwitterApprovalWithCompletion:(void (^)(BOOL, NSError *))completion { self.accountStore = [[ACAccountStore alloc] init]; //setup as a property. ACAccountType *twitterAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; [self.accountStore requestAccessToAccountsWithType:twitterAccountType options:nil completion:^(BOOL granted, NSError *error) { //completion handling is on indeterminate queue so I force main queue inside dispatch_async(dispatch_get_main_queue(), ^{ completion(granted, error); //triggers displaying the next screen, working }); }]; } 

但是,虽然已经给出了许可,但它是自动的,而不是用户被给出对话并批准的结果。

随着蓝牙版本,我还没有find一些将触发它的代码。 在请求权限的问题上,文档和编程指南都比较安静。 我能find的唯一一个参考是通过具有bluetooth-peripheral的plist键,用户将在应用程序启动时被自动提示。 现在这个stream程还为时过早。

只有外设angular色需要用户权限才能运行。 中央可以做任何想做的事情。 当你希望用户给予权限时,简单地实例化一个CBPeripheralManager ,它将触发对话框。

 pmanager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; 

然后使用peripheralManagerDidUpdateState: delegate方法来获取有关用户决定的信息。 如果您的应用程序不在后台运行,则无需在plist中设置bluetooth-peripheral后台模式。

请记住,该对话框在应用程序的生命周期中仅会popup一次,并且在删除并重新安装应用程序时,该设置不会被重置。

还要注意,鉴于这种行为,

我能find的唯一一个参考是通过具有蓝牙外设的plist键,用户将在应用程序启动时被自动提示。

是不正确的。

对于Twitter部分。 我还没有尝试使用该API,但发现了几个答案,build议授权是自动为您处理,否则iOS将只问第一次。

  • “[应用程序]”将访问Twitter帐户警报不显示在iOS 6和答案
  • Twitter上的ios – 如何授予权力做推文? 和答案

要testingpopup式问题,您应该手动重置设置
设置 – > 常规 – > 重置 – > 重置位置和隐私

只是一小部分: 要求用户许可的最佳做法