react-native-dihola-shaking
v1.4.1
Published
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, fil
Downloads
10
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
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.