Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
vogo-react-native-qrcode-scanner
Advanced tools
A QR code scanner component for React Native built on top of react-native-camera by Lochlan Wansbrough
Please note, this will also function as a generic barcode scanner by the virtue of the above module supporting barcode scanning, however, this module was initially built as a QR code scanner.
This module was originally written because the author couldn't find a module that could be simply plugged into a project without requiring too much setup.
Looking for active contributors. See Contribution guide for more details.
Please note: Most of the support on debugging new issues, especially with Android, relies on the open source community. The project is on the look out for active contributors who want to maintain this library more rigorously.
With iOS 10 and higher you need to add the "Privacy - Camera Usage Description" key to the info.plist of your project. This should be found in 'your_project/ios/your_project/Info.plist'. Add the following code:
<key>NSCameraUsageDescription</key>
<string>Your message to user when the camera is accessed for the first time</string>
<!-- Include this only if you are planning to use the camera roll -->
<key>NSPhotoLibraryUsageDescription</key>
<string>Your message to user when the photo library is accessed for the first time</string>
<!-- Include this only if you are planning to use the microphone for video recording -->
<key>NSMicrophoneUsageDescription</key>
<string>Your message to user when the microsphone is accessed for the first time</string>
With Android 7 and higher you need to add the "Vibration" permission to your AndroidManifest.xml of your project. This should be found in your android/app/src/main/AndroidManifest.xml
Add the following:
<uses-permission android:name="android.permission.VIBRATE"/>
react-native-camera is a dependency for this package that you'll need to add to your project. To install, run the following commands:
npm install react-native-camera --save
react-native link react-native-camera
If using an older version of this module with RCTCamera you will need to follow the docs here to move from the old RCTCamera to the new RNCamera. You will then need to install it as above.
Versions of this library > 0.0.30 will not support react-native-camera versions less than 1.0.0.
npm install react-native-qrcode-scanner --save
react-native link react-native-qrcode-scanner
react-native link react-native-permissions
To use react-native-qrcode-scanner, import
the react-native-qrcode-scanner
module and use the <QRCodeScanner />
tag. More usage examples can be seen under the examples/
folder.
Here is an example of basic usage:
'use strict';
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
TouchableOpacity,
Linking,
} from 'react-native';
import QRCodeScanner from 'react-native-qrcode-scanner';
class ScanScreen extends Component {
onSuccess = (e) => {
Linking
.openURL(e.data)
.catch(err => console.error('An error occured', err));
}
render() {
return (
<QRCodeScanner
onRead={this.onSuccess}
topContent={
<Text style={styles.centerText}>
Go to <Text style={styles.textBold}>wikipedia.org/wiki/QR_code</Text> on your computer and scan the QR code.
</Text>
}
bottomContent={
<TouchableOpacity style={styles.buttonTouchable}>
<Text style={styles.buttonText}>OK. Got it!</Text>
</TouchableOpacity>
}
/>
);
}
}
const styles = StyleSheet.create({
centerText: {
flex: 1,
fontSize: 18,
padding: 32,
color: '#777',
},
textBold: {
fontWeight: '500',
color: '#000',
},
buttonText: {
fontSize: 21,
color: 'rgb(0,122,255)',
},
buttonTouchable: {
padding: 16,
},
});
AppRegistry.registerComponent('default', () => ScanScreen);
Screenshot of the above:
Please open an issue if something doesn't work or is not clear enough.
reactivate()
Call this method to programmatically enabling scanning again. Use this by attaching a ref
like so <QRCodeScanner ref={(node) => { this.scanner = node }}>
and calling this.scanner.reactivate()
onRead
(required)propType: func.isRequired
default: (e) => (console.log('QR code scanned!', e))
Will call this specified method when a QR code or a barcode is detected in the camera's view passing in the event emitted upon reading the code.
fadeIn
propType: bool
default: true
When set to true
this ensures that the camera view fades in after the initial load up instead of being rendered immediately.
Set this to false to prevent the animated fade in of the camera view.
reactivate
propType: bool
default: false
When set to false
, when a QR code is scanned, the QRCodeScanner
will not scan another code until it is re-rendered.
When set to true
this will reactivate the scanning ability of the component.
reactivateTimeout
propType: number
default: 0
Use this to configure how long it should take before the QRCodeScanner
should reactivate.
topContent
propType: oneOfType([ PropTypes.element, PropTypes.string, ])
Use this to render any additional content at the top of the camera view.
bottomContent
propType: oneOfType([ PropTypes.element, PropTypes.string, ])
Use this to render any additional content at the bottom of the camera view.
containerStyle
propType: any
Use this to pass styling for the outermost container. Useful for adding margin/padding to account for navigation bar.
cameraStyle
propType: any
Use this to pass or overwrite styling for the camera window rendered.
topViewStyle
propType: any
Use this to pass or overwrite styling for the <View>
that contains the topContent
prop.
bottomViewStyle
propType: any
Use this to pass or overwrite styling for the <View>
that contains the bottomContent
prop.
showMarker
propType: boolean
default: false
Use this to show marker on the camera scanning window.
customMarker
propType: element
Pass a RN element/component to use it as a custom marker.
markerStyle
propType: any
Use this to add custom styling to the default marker.
notAuthorizedView
propType: element
Pass a RN element/component to use it when no permissions given to the camera (iOS only).
cameraType
propType: oneOf(['front', 'back'])
default: 'back'
Use this to control which camera to use for scanning QR codes, defaults to rear camera.
checkAndroid6Permissions
propType: bool
default: false
Use this to enable permission checking on Android 6
permissionDialogTitle
propType: string
default: 'Info'
Use this to setting permission dialog title (Android only).
permissionDialogMessage
propType: string
default: 'Need camera permission'
Use this to setting permission dialog message (Android only).
cameraProps
propType: object
Properties to be passed to the Camera
component.
This project relies on the involvement of its active contributors. We're immensely gratetful to everyone who has taken the time to submit pull requests, spent time debugging or filing issues.
See LICENSE.md
Thanks to Lochlan Wansbrough for the react-native-camera module which provided me with an awesome example of how to set up this module.
This QR code scanner was inspired by the QR code scanner within Whatsapp.
Most of the core contributors maintain this library, add new features, and review PRs in their free time. If you're using react-native-qrcode-scanner in a commercial app, or have found it to be valuable, please considering donating to the project on OpenCollective. Please note that you do not need to donate any amount of money in order to use this library.
This is how the donations will be used:
Thanks to any donors and supporters!
FAQs
A QR code scanner for React Native.
The npm package vogo-react-native-qrcode-scanner receives a total of 0 weekly downloads. As such, vogo-react-native-qrcode-scanner popularity was classified as not popular.
We found that vogo-react-native-qrcode-scanner demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.