NokeMobileLibrary 0.9.2

NokeMobileLibrary 0.9.2

Spencer Apsley维护。



Nokē Mobile Library for iOS

Version License Platform

**** 最近更改(v0.5.1) ****

  • 该库要求在扫描之前设置一个模式。该模式确定设备响应上传的位置。选项包括

    • 沙盒
    • 生产

该模式确定锁的响应上传的位置。**不再支持手动设置上传URL**

  • 已向NokeDeviceManagerDelegate中添加了新的代理方法
   func nokeDeviceDidShutdown(noke: NokeDevice, isLocked: Bool, didTimeout: Bool)

摘要

Nokē Mobile Library通过蓝牙提供了一种易于使用且稳定的与Nokē设备进行通信的方法。它必须与Nokē Core API结合使用才能实现完整功能,例如解锁锁和上传活动。

Nokē Core API Overview

要求

此库与支持蓝牙低功耗(BLE)并运行iOS 8或更高版本的iOS设备兼容

安装

  • 用以下内容创建或更新您的 Podfile
target 'YourAppTargetName' do
use_frameworks!
pod 'NokeMobileLibrary'
end
  • 安装依赖项
pod install
  • 打开新创建的 .xcworkspace

  • 使用 import NokeMobileLibrary 将库导入任何类中,并开始工作于您的项目

  • 一旦将 CocoaPod 添加到项目中,请通过在 AppDelegate 中设置 Mobile API Key(NokeDeviceManager.shared().setAPIKey("YOUR_KEY_HERE"))来添加 Mobile API Key

使用

设置

  • NokeDeviceManager.swift 类负责扫描 Nokē 设备,连接,发送命令和接收响应。所有交互都是通过该类的共享实例完成的
//Setup device manager
NokeDeviceManager.shared().delegate = self
  • 使用 NokeDeviceManagerDelegate 协议接收 NokeDeviceManager 的回调
func nokeDeviceDidUpdateState(to state: NokeDeviceConnectionState, noke: NokeDevice) {

    switch state {
        case .nokeDeviceConnectionStateDiscovered:
            //Nokē Discovered
            break
        case .nokeDeviceConnectionStateConnected:
            //Nokē Connected
            break
        case .nokeDeviceConnectionStateSyncing:
            //Nokē Syncing
            break
        case .nokeDeviceConnectionStateUnlocked:
            //Nokē Unlocked
            break
        case .nokeDeviceConnectionStateDisconnected:
            //Nokē Disconnected
            break
        default:
            //Unrecognized State
            break
        }
    }

func nokeErrorDidOccur(error: NokeDeviceManagerError, message: String, noke: NokeDevice?) {

}

扫描 Nokē 设备

  • 库要求在扫描之前设置一个模式。该模式决定了设备响应上传的位置(它应该是 SANDBOX 或 PRODUCTION)
NokeDeviceManager.shared().setLibraryMode(NokeLibraryMode.SANDBOX)
  • 默认情况下,NokeDeviceManager 类仅扫描已添加到设备数组的设备。
//Add locks to device manager
let noke = NokeDevice.init(name: "LOCK NAME", mac: "XX:XX:XX:XX:XX:XX")
NokeDeviceManager.shared().addNoke(noke!)
  • 要允许 NokeDeviceManager 发现所有 Noke 设备,请使用以下方法
NokeDeviceManager.shared().setAllowAllNokeDevices(true)

您可以通过检查 nokeDeviceDidUpdateState 方法返回的 Noke 对象的 noke.lockState 状态,来确定锁是否处于解锁、锁定或去除的状态。HD 锁的版本 3.13+ 将在发现时实时更新

注意:在开始扫描之前,请确保蓝牙管理器处于开启状态,否则您将遇到错误。您可以使用 bluetoothManagerDidUpdateState 协议方法来接收状态更新

func bluetoothManagerDidUpdateState(state: NokeManagerBluetoothState) {
    switch (state) {
        case NokeManagerBluetoothState.poweredOn:
            debugPrint("NOKE MANAGER ON")
            NokeDeviceManager.shared().startScanForNokeDevices()
            break
        case NokeManagerBluetoothState.poweredOff:
            debugPrint("NOKE MANAGER OFF")
            break
        default:
            debugPrint("NOKE MANAGER UNSUPPORTED")
            break
        }
    }

连接到nokē设备

  • 当nokē设备正在广播并被NokeDeviceManager检测到时,nokē设备的状态更新为已发现。然后,管理员可以连接到nokē设备。
case .nokeDeviceConnectionStateDiscovered:
    debugPrint(String.init(format:"%@ discovered", noke.name))
    NokeDeviceManager.shared().connectToNokeDevice(noke)
    break

解锁nokē设备

  • 一旦nokē设备成功连接,就可以初始化解锁过程。解锁需要向实现Noke Core API的服务器发送网络请求。虽然请求的一些方面可能有所不同,但解锁请求总会包含以下内容:
    • MAC地址 (noke.mac) - nokē设备的蓝牙MAC地址
    • 会话 (noke.session) - 用来加密发送给锁的唯一会话字符串
  • 这两个值都可以在成功连接后从noke对象中读取。
  • 示例
public func requestUnlock(noke: NokeDevice, email: String){

    let url = String.init(format:"%@%@", serverUrl, "unlock/")
    var jsonBody = [String: Any]()
    jsonBody["session"] = noke.session
    jsonBody["mac"] = noke.mac
    jsonBody["email"] = email

    if(JSONSerialization.isValidJSONObject(jsonBody)){
        guard let jsonData = try? JSONSerialization.data(withJSONObject: jsonBody, options: JSONSerialization.WritingOptions.prettyPrinted) else{return}
        self.doRequest(url: url, jsonData: jsonData)
        }
    }
  • 成功的解锁请求将返回一行要发送到nokē设备的命令。这些可以通过将它们传递给NokeDevice对象来发送到设备。
currentNoke.sendCommands(commandString)
  • 一旦nokē设备收到命令,它将验证密钥是否正确并进行解锁。

离线解锁

  • nokē设备可以在没有网络连接的情况下解锁。这需要一个离线密钥和解锁命令,这两个值都可以通过Noke Core API由服务器接收。这两个值应该缓存在手机上,稍后使用。

在开始使用之前,应该在nokē设备对象上设置离线密钥和解锁命令。

noke.setOfflineValues(key:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", command: "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy")

它们也可以在离线解锁时设置。

 noke.offlineUnlock(key:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", command: "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy")

设置值后,可以在任何时候调用离线解锁功能来解锁nokē设备。

 noke.offlineUnlock()

日志、错误和回调将继续像在线解锁时一样正常工作。

上传活动日志

Nokē移动库自动将Nokē设备的所有响应上传到Nokē核心API进行解析。包含活动日志的响应存储在数据库中,可以通过API端点进行访问。请参阅Nokē核心API文档以获取更多详细信息。

*库在使用扫描之前需要您设置模式。该模式确定设备响应的上传位置(应为沙盒或生产模式)'

NokeDeviceManager.shared().setLibraryMode(NokeLibraryMode.SANDBOX)

许可证

Nokē移动库遵循Apache 2.0授权协议。更多信息请参阅LICENSE文件。

版权所有 © 2018 Nokē Inc. 保留所有权利。