Nokē Mobile Library for iOS
**** 最近更改(v0.5.1) ****
-
该库要求在扫描之前设置一个模式。该模式确定设备响应上传的位置。选项包括
沙盒
生产
该模式确定锁的响应上传的位置。**不再支持手动设置上传URL**
- 已向
NokeDeviceManagerDelegate
中添加了新的代理方法
func nokeDeviceDidShutdown(noke: NokeDevice, isLocked: Bool, didTimeout: Bool)
摘要
Nokē Mobile Library通过蓝牙提供了一种易于使用且稳定的与Nokē设备进行通信的方法。它必须与Nokē Core API结合使用才能实现完整功能,例如解锁锁和上传活动。
要求
此库与支持蓝牙低功耗(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
) - 用来加密发送给锁的唯一会话字符串
- MAC地址 (
- 这两个值都可以在成功连接后从
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. 保留所有权利。