HomeKit:检查是否允许

时间:2015-07-13 11:13:52

标签: ios homekit ios-homekit

我有一个使用HomeKit的iOS应用程序,我需要检查应用程序是否可以访问HomeKit Store。正如我注意到的那样,无论如何都会调用homeManagerDidUpdateHomes。如何检查HomeKit商店许可?

3 个答案:

答案 0 :(得分:2)

Swift 4.2 版本的Volodymyr的黑客/答案。

import UIKit
import HomeKit

class HomeKitAccessViewController: UIViewController {

    let manager = HMHomeManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.manager.delegate = self

    }

}

extension HomeKitAccessViewController: HMHomeManagerDelegate {

    func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
        let number = manager.value(forKey: "_didUpdateHomes")

        if let num = number, let boolValue = num as? Bool {
            if boolValue == true {
                print("We got access.")
            }else{
                print("We don't have access")
            }
        }
    }
}

答案 1 :(得分:1)

我有一个针对这个问题的黑客攻击,这对我有用:

Init HMHomeManager

self.manager = [[HMHomeManager alloc] init];
self.manager.delegate = self;

检查

中的私人财产
-(void)homeManagerDidUpdateHomes:(HMHomeManager *)manager {

  //HACK to check that the application does not have HomeKit permission
  NSNumber *private = [self.manager valueForKey:@"_didUpdateHomes"];


  if (private && ![private boolValue]) {
    //Warning to user
    return; 
  }
  // Do other logic
}

我希望Apple尽快为我们提供API

答案 2 :(得分:0)

编辑:这显然不再适用了。不幸的是,我不再进行香港的发展了。有关一些信息,请参阅下面的@ windwalker评论。

[[HMHomeManager alloc] init]
如果您无法访问家庭,

将返回nil。其他HomeKit inits也将返回nil,这只是我检查的那个,因为它是我们在应用加载后首先尝试的。