ios - 联系人和麦克风请求访问在 iOS 9 上不起作用

标签 ios swift contacts ios9.3

自上周一以来,我一直被一个错误所困,所以我现在寻求帮助...... 联系人和 Micriohpone 请求访问在 iOS 9 上不起作用。我使用这段代码来请求访问联系人:

let contactsStore = CNContactStore()

func requestAccess(completionHandler: @escaping (Permission) -> ()) {
    self.contactsStore.requestAccess(for: .contacts, completionHandler: { (granted, error) in
        if granted {
            completionHandler(.granted)
        } else {
            completionHandler(.denied)
        }
    })
}

这个函数被调用,没问题,问题是它总是返回 .denied 和一个错误设置为“拒绝访问”,即使没有向用户显示警告。麦克风也一样。

我的 Info.plist 中存在 key “Privacy - Contacts Usage Description”

编辑: 我也知道,当用户拒绝一次使用时,它不再显示,但另一个问题是应用程序的设置部分没有“切换”。我尝试恢复设备(在模拟器上工作,因为我没有真正的 iOS 9 设备),但行为仍然相同。

此代码在 iOS 10 和 iOS 11 上运行完美。但在 iOS 9 上没有机会

如果你能帮我解决这个问题,那就太好了。

谢谢!

最佳答案

我在 9.3 上以最简单的方式尝试了这个,我确实得到了提示:

import UIKit
import Contacts

class ViewController: UIViewController {

    let contactsStore = CNContactStore()

    override func viewDidAppear(_ animated: Bool) {
        DispatchQueue.main.async {

            self.requestAccess(completionHandler: { (permission) in
                print("The user said \(permission)")
            })

        }
    }

    func requestAccess(completionHandler: @escaping (Permission) -> ()) {
        self.contactsStore.requestAccess(for: .contacts, completionHandler: { (granted, error) in
            if granted {
                completionHandler(.granted)
            } else {
                completionHandler(.denied)
            }
        })
    }
}

enum Permission {
    case granted
    case denied
}

Settings -> Privacy -> Contacts

这很好用。我认为问题是你已经否认了。

唯一的解决方案是:

  1. 更改 bundle id,这将使您的应用充当不同的应用
  2. 重置您的设备/模拟器(当然如果是模拟器会更容易)
  3. 将隐私设置从关闭更改为开启

对于最终用户,我看到 UI 提示用户在看到“拒绝”时更改设置。

你可以这样做:

self.requestAccess(completionHandler: { (permission) in
                print("The user said \(permission)")

                if ( permission == .denied ) {
                    let urlStr = UIApplicationOpenSettingsURLString

                    if let url = URL(string:urlStr) {
                        UIApplication.shared.openURL(url)
                    }
                }

            })

关于ios - 联系人和麦克风请求访问在 iOS 9 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47019095/

相关文章:

swift - 在 compactMap 返回中返回多个值

swift - 使用 Alamofire 的 Swift 版本问题

java - 从联系人 android 中检索照片

ios - 填充 iOS 健康部分中的正念部分

ios - 如何从 uiview 容器 Controller 获取父 Controller

iphone - 为标签栏 IOS 设置图像

swift - Facebook 邀请好友无法在 swit 4.0 上运行?

ios - 在 UITableViewCell 中进入编辑模式时隐藏 UITableViewCells(类似于联系人应用程序)

android - 如何删除android中的联系人?

ios - 程序化图标样式/颜色操作