README
DiHola Shaking API for React Native
DiHola Shaking API makes it easy to build fast and reliable ways to communicate between devices, just by shaking them. We provide such a secure and flexible protocol that this technology can be applied in any form of data exchange: Payment processing, file sharing, social networking, verification processes, etc.
Index
Installation
$ npm install react-native-dihola-shaking --save
Mostly automatic installation
$ react-native link react-native-dihola-shaking
Note: Manual installation step 4 for both Android and iOS is required.
Manual installation
iOS
- In XCode, in the project navigator, right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜react-native-dihola-shaking
and addRNDiHolaShaking.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNDiHolaShaking.a
to your project'sBuild Phases
➜Link Binary With Libraries
- Add
NSLocationWhenInUseUsageDescription
toInfo.plist
- Run your project (
Cmd+R
)
Android
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.diholapp.RNDiHolaShakingPackage;
to the imports at the top of the file - Add
new RNDiHolaShakingPackage()
to the list returned by thegetPackages()
method
Append the following lines to
android/settings.gradle
:include ':react-native-dihola-shaking' project(':react-native-dihola-shaking').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-dihola-shaking/android')
Insert the following lines inside the dependencies block in
android/app/build.gradle
:compile project(':react-native-dihola-shaking')
If you've defined project-wide properties (recommended) in your root build.gradle, this library will detect the presence of the following properties:
buildscript {...} allprojects {...} /** + Project-wide Gradle configuration properties */ ext { compileSdkVersion = 25 targetSdkVersion = 25 buildToolsVersion = "25.0.2" supportLibVersion = "25.0.1" googlePlayServicesVersion = "11.0.0" }
If you do not have project-wide properties defined and have a different play-services version than the one included in this library, use the following instead. But play service version should be
11+
or the library won't work.... dependencies { ... compile(project(':react-native-dihola-shaking')) { exclude group: 'com.google.android.gms', module: 'play-services-location' } compile 'com.google.android.gms:play-services-location:<insert your play service version here>' }
Usage
import { ShakingAPI } from 'react-native-dihola-shaking';
ShakingAPI.configure({
API_KEY: "<API_KEY>",
user: "<USER_ID>",
onShaking: () => {
console.log("Shaking event detected");
},
onSuccess: (result) => {
(result.length > 0)
? console.log("You connected with: " + result)
: console.log("Couldn't find anyone...");
},
onError: (error) => {
console.log(error);
}
}).start();
Here you can find an example.
Methods
Summary
configure
start
stop
simulate
setSensibility
setDistanceFilter
setTimingFilter
setKeepSearching
setLocation
Details
configure()
ShakingAPI.configure(options);
options:
| Name | Type | Default | Required | Description | | -- | -- | -- | -- | -- | | API_KEY |
string
| -- |yes
| Get one at www.diholapp.com | | user |string
| -- |yes
|User identifier | | lat |number
| Device current value |no
| Latitude coordinates | lng |number
| Device current value |no
| Longitude coordinates | sensibility |number
|25
|no
| Shaking sensibility | distanceFilter |number
|100
|no
| Maximum distance (in meters) between two devices to be eligible for pairing. | timingFilter |number
|2000
|no
| Maximum time difference (in milliseconds) between two shaking events to be eligible for pairing. | keepSearching |boolean
|false
|no
| A positive value would allow to keep searching even though if a user has been found. This could allow to pair with multiple devices. The response time will be affected by the timingFilter value. | vibrate |boolean
|true
|no
| Vibrate on shaking. | onShaking |function
| -- |no
| Invoked when the shaking event is detected | onSuccess |function
| -- |yes
| Invoked with a list of paired users | onError |function
| -- |yes
| Invoked whenever an error is encountered
start()
ShakingAPI.start();
Starts listening to shaking events.
stop()
ShakingAPI.stop();
Stops listening to shaking events.
simulate()
ShakingAPI.simulate();
Simulates the shaking event.
setSensibility()
ShakingAPI.setSensibility(sensibility);
Sets the sensibility for the shaking event to be triggered.
Parameters:
Name | Type | Default |
---|---|---|
sensibility | number | 25 |
setDistanceFilter()
ShakingAPI.setDistanceFilter(distanceFilter);
Sets the maximum distance (in meters) between two devices to be eligible for pairing.
Parameters:
Name | Type | Default | Note |
---|---|---|---|
distanceFilter | number | 100 | GPS margin error must be taken into account |
setTimingFilter()
ShakingAPI.setTimingFilter(timingFilter);
Sets the maximum time difference (in milliseconds) between two shaking events to be eligible for pairing.
Parameters:
Name | Type | Default | Note |
---|---|---|---|
timingFilter | number | 2000 | Value between 100 and 10000 |
setKeepSearching()
ShakingAPI.setKeepSearching(keepSearching);
A positive value would allow to keep searching even though if a user has been found. This could allow to pair with multiple devices. The response time will be affected by the timingFilter value.
Parameters:
Name | Type | Default |
---|---|---|
keepSearching | boolean | false |
setLocation()
ShakingAPI.setLocation(latitude, longitude);
Setting the location manually will disable using the device location.
Parameters:
Name | Type | Default |
---|---|---|
latitude | number | Device current value |
longitude | number | Device current value |
Error Codes
Name | Description |
---|---|
LOCATION_PERMISSION_ERROR | Location permission has not been accepted |
LOCATION_DISABLED | Location is disabled |
SENSOR_ERROR | The sensor devices are not available |
AUTHENTICATION_ERROR | API key invalid |
API_KEY_EXPIRED | API key expired |
SERVER_ERROR | Server is not available |
Example:
import { ShakingAPI, ShakingCodes } from 'react-native-dihola-shaking';
ShakingAPI.configure({
...
onError: (error) => {
switch(error){
case ShakingCodes.LOCATION_PERMISSION_ERROR:
// Do something
break;
case ShakingCodes.LOCATION_DISABLED:
// Do something
break;
case ShakingCodes.AUTHENTICATION_ERROR:
// Do something
break;
case ShakingCodes.API_KEY_EXPIRED:
// Do something
break;
case ShakingCodes.SERVER_ERROR:
// Do something
break;
case ShakingCodes.SENSOR_ERROR:
// Do something
break;
}
}
});
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.