2015-07-13 2 views
3

У меня есть приложение iOS с использованием HomeKit, и мне нужно проверить, может ли приложение получить доступ к HomeKit Store. Как я заметил, в любом случае будет вызван homeManagerDidUpdateHomes. Как проверить разрешение на покупку HomeKit?HomeKit: Проверить разрешение

ответ

0

Редактировать: Это, по-видимому, больше не работает. К сожалению, я больше не занимаюсь разработкой HK. См. Комментарий @ windwalker ниже для некоторой информации.

[[HMHomeManager alloc] init] 

будет возвращать ноль, если у вас нет доступа к дому. Другие HomeKit inits также возвратят нуль, это только тот, который я проверяю, так как это первое, что мы попробуем после загрузки приложения.

+0

не работает для меня. Любое другое решение? – SRI

+2

Не работает (по крайней мере, в ios 10). Вы можете проверить свойство «homes» для HMHomeManager. Если есть хотя бы один HMHome, у вас есть разрешение, но если дома нет, это может быть: Вы никогда не спрашивали пользователя Пользователь отказался от разрешения У вас есть разрешение, но у вас на самом деле нет дома в вашем домеките окружающая среда –

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 для этого в ближайшее время

+0

Не будет проходить проверку правильности? – kokluch

+1

Ошибка дизайна была подана Apple, и они были в порядке с вышеупомянутым решением как временное обходное решение. Приложение еще не было нажато для хранения. –

+1

Любое обновление по этой проблеме? – kokluch

0

The Swift 4 версия взлома/ответа Владимира.

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") 
      } 
     } 
    } 
} 
Смежные вопросы