$ npm install react-native-noke --save
or
$ yarn add react-native-noke
or latest version
$ yarn add git+git+https://github.com/Ant-Tech-Agency/react-native-noke.git
- In XCode, in the project navigator, right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜react-native-noke
and addRNNoke.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNNoke.a
to your project'sBuild Phases
➜Link Binary With Libraries
- Run your project (
Cmd+R
)< - Add empty file Test.swift in main project
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.lynkxyz.noke.RNNokePackage;
to the imports at the top of the file - Add
new RNNokePackage()
to the list returned by thegetPackages()
method
- Append the following lines to
android/settings.gradle
:include ':react-native-noke' project(':react-native-noke').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-noke/android')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:compile project(':react-native-noke')
- After adding the dependency to your Android Manifest
<service android:name="com.noke.nokemobilelibrary.NokeDeviceManagerService" android:enabled="true"/>
import RNNoke from 'react-native-noke';
RNNoke.initiateNokeService(mode)
interface NokeData {
name?: string
key?: string
command?: string
macAddress: string
}
interface NokeCommandsData {
macAddress: string
commands: string[]
}
interface NokeResponse {
name: string,
mac: string,
session: string,
status: boolean,
}
interface NokeInfoResponse {
name: string,
battery: number,
mac: string,
offlineKey: string,
offlineUnlockCmd: string,
serial: string,
session: string,
trackingKey: string,
lastSeen: number,
version: string,
}
type EventName =
'onServiceConnected' | // only Android
'onServiceDisconnected' | // only Android
'onNokeDiscovered' |
'onNokeConnecting' |
'onNokeConnected' |
'onNokeSyncing' |
'onNokeUnlocked' |
'onNokeDisconnected' |
'onBluetoothStatusChanged' |
'onError'
interface RNNoke {
initiateNokeService: () => Promise<{status: boolean}>
startScan: () => Promise<{status: boolean}>
stopScan: () => Promise<{status: boolean}>
addNokeDeviceOnce: (data: NokeData) => Promise<NokeResponse>
sendCommands: (data: NokeCommandsData) => Promise<NokeResponse>
removeAllNokes: () => Promise<null>
removeNokeDevice: () => Promise<null>
offlineUnlock: () => Promise<NokeResponse>
getDeviceInfo: () => Promise<NokeInfoResponse>
on: (eventName: EventName, callback: (response: NokeResponse) => RNNoke) => void
fromNokeEvents: () => Observable<{name: EventName, data: NokeResponse}>
}
export class App extends Component {
componentDidMount() {
this.requestLocationPermission() // only Android
RNNoke
.on('onServiceConnected', data => console.log('onServiceConnected', data)) // only Android
.on('onServiceDisconnected', data => console.log('onServiceConnected', data)) // only Android
.on('onNokeDiscovered', data => console.log('onNokeDiscovered', data))
.on('onNokeConnecting', data => console.log('onNokeConnecting', data))
.on('onNokeConnected', data => console.log('onNokeConnected', data))
.on('onNokeSyncing', data => console.log('onNokeSyncing', data))
.on('onNokeUnlocked', data => console.log('onNokeUnlocked', data))
.on('onNokeDisconnected', data => console.log('onNokeDisconnected', data))
.on('onBluetoothStatusChanged', data => console.log('onBluetoothStatusChanged', data))
.on('onError', data => console.log('onError', data))
}
requestLocationPermission = () => {
if(Platform.OS === 'ios') return
return PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
'title': 'Cool Location Permission',
'message': 'Cool Location App needs access to your location '
}
)
.then(console.log)
.catch(console.error)
}
onUnlock = () => {
RNNoke.offlineUnlock(data)
.then(console.log)
.catch(console.error)
}
onAddNoke = () => {
RNNoke.addNokeDeviceOnce(data)
.then(console.log)
.catch(console.error)
}
onSendCommands = () => {
RNNoke.sendCommands(data)
.then(console.log)
.catch(console.error)
}
onRemoveAllNokes = () => {
RNNoke.removeAllNokes()
.then(console.log)
.catch(console.error)
}
getDeviceInfo = () => {
RNNoke.getDeviceInfo()
.then(console.log)
.catch(console.error)
}
onStartScan = () => {
RNNoke.startScan()
.then(console.log)
.catch(console.error)
}
onStopScan = () => {
RNNoke.stopScan()
.then(console.log)
.catch(console.error)
}
render() {
return (
<View style={styles.container}>
<Button
onPress={this.onSendCommands}
title="Unlock noke by commands"
/>
<Button
onPress={this.onUnlock}
title="Unlock noke offline"
/>
<Button
onPress={this.onAddNoke}
title="Add noke"
/>
<Button
onPress={this.onRemoveAllNokes}
title="Remove noke"
/>
</View>
)
}
}
react-native-noke is available under the Apache 2.0 license. See the LICENSE file for more info.
Copyright © 2018 Ant-Tech Ltd. All rights reserved.