【问题标题】:iOS asking permissioniOS 请求权限
【发布时间】:2018-07-29 05:26:48
【问题描述】:

我的问题是,我在安装应用程序时有 2 个用户权限请求。

第一:位置许可
二:推送通知

问题:当用户安装应用程序时,它会先显示位置通知,然后在微秒后,它会显示推送通知权限。在我们从推送通知中的选项中选择后,它将显示位置通知。

如何延迟显示推送通知权限,以便用户可以先选择位置权限请求?

示例伪代码
-> 正常位置请求 [CLLocationManager] 没有 if / else
-> 普通推送通知请求

我希望它像

if (**user selects option in location request**) //either allow or not
   show push notification request

【问题讨论】:

  • 你刚刚看了我的帖子吗? “如何延迟显示推送通知权限,以便用户可以先选择位置权限请求?”所以我问是否可以知道用户是否在位置许可请求中选择了一个选项,以便我可以将我的推送通知请求放在那里。请先阅读。
  • 是的。那是讽刺的。意思是他在说不清楚的同时得到了问题
  • 嗯,这不是讽刺的好地方。
  • 如果您的应用程序使用推送通知,它将首先提示给用户。您可以随时等待用户按需获取位置访问权限。当您需要请求用户的许可时,您可以使用它 - [ locationManager requestWhenInUseAuthorization]; [ locationManager requestAlwaysAuthorization];
  • 感谢@Shawon91。这个答案比嘲讽的好

标签: ios objective-c permissions


【解决方案1】:

如果您的应用程序使用推送通知,它将首先提示给用户。您可以随时等待用户按需获取位置访问权限。当您需要请求用户的许可时,您可以使用它 - [ locationManager requestWhenInUseAuthorization]; [locationManager requestAlwaysAuthorization];

【讨论】:

    【解决方案2】:

    您必须在 plist 文件中添加一个密钥才能访问位置服务 image

    【讨论】:

      【解决方案3】:

      “等待”用户响应位置许可请求非常棘手,因为 API 的结构非常糟糕。而不是这种东西(伪代码):

      requestAuthorization { status in
          if status == .authorized
      

      ...您只能在没有任何结果或完成处理程序的情况下调用 requestAuthorization

      摆脱困境的方法是实现委托方法locationManager(_:didChangeAuthorization:)。那是您得知您已获得授权的地方(如果您还没有)。因此,在您实施该方法时,您会要求推送通知授权(在适当的情况下)。

      除此之外,我只是建议您重新考虑您的架构,以便在应用程序生命周期中完全不同的时间点请求位置授权和推送授权,这样它们就不会以这种不确定的方式重叠。

      【讨论】:

      • 问题是,即使用户拒绝了 Location 的权限,我也想显示其他权限请求
      • 这是一个很好的反对意见!但是你无法知道这已经发生了。您无法知道授权对话框是否出现或何时被关闭(特别是如果授权没有更改)。正如我所说,位置授权 API 的结构很糟糕。
      • 您可以随时使用 CLLocation 管理器委托检查用户是否拒绝了位置访问权限,对于推送通知访问状态,您可以检查 url - stackoverflow.com/questions/35126361/…
      猜你喜欢
      • 1970-01-01
      • 2015-12-07
      • 2014-11-17
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2016-01-05
      • 2015-09-17
      • 2015-01-11
      相关资源
      最近更新 更多