Я создал мобильное приложение без сервера, используя AWS Amplify, реагировать на нативную и Cognito Auth. До сих пор приложение позволяет пользователям входить в систему с использованием учетных данных, созданных из Cognito; затем приложение позволяет пользователю сканировать QR-код, который будет возвращать информацию, хранящуюся в корзине S3 (информация отображается в интернет-браузере за пределами приложения). Это в настоящее время все успешно; однако, когда я делаю корзину частной (что важно) и использую в коде метод Storage.Vault.Get, он возвращает только один частный объект / файл из корзины.
приложение класса расширяет React.Component {
constructor () {
super()
this.state = {
//variable to hold the qr value
data: '',
fileurl: '',
file: '',
opneScanner: false,
};
}
onOpenlink () {
//Function to open URL, If scanned
Linking.openURL(this.state.fileurl);
//Linking used to open the URL in any browser that you have installed
}
onBarcodeScan (данные) {
//called after te successful scanning of QRCode/Barcode
this.setState({ data: data });
this.setState({ opneScanner: false });
}
onOpneScanner () {
var that =this;
//To Start Scanning
if(Platform.OS === 'android'){
async function requestCameraPermission() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA,{
'title': 'Code Blue App Camera Permission',
'message': 'Code Blue App needs access to your camera '
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
//If CAMERA Permission is granted
that.setState({ data: '' });
that.setState({ opneScanner: true });
} else {
alert("CAMERA permission denied");
}
} catch (err) {
alert("Camera permission err",err);
console.warn(err);
}
}
//Calling the camera permission function
requestCameraPermission();
}else{
that.setState({ data: '' });
that.setState({ opneScanner: true });
}
}
getData () {
Storage.vault.get('John.pdf')
.then(data => {
this.setState({
fileurl: data
})
});
Storage.vault.get('Mike.pdf')
.then(data => {
this.setState({
fileurl: data
})
});
}
componentDidMount () {
this.getData();
this.timer = setInterval(() => this.getData(), 5000);
}
componentWillUnmount () {
clearInterval (this.timer);
this.timer = null;
}
render () {
let displayModal;
//If data is set then return this view
if (!this.state.opneScanner) {
return (
<View style={styles.container}>
<Text style={styles.heading}>MySay QR Scanner</Text>
<Text style={styles.simpleText}>{this.state.data ? 'Scanned QR
Код: '+ this.state.data:' '}
{this.state.data.includes("http") ?
<TouchableHighlight
onPress={() => this.onOpenlink()}
style={styles.button}>
<Text style={{ color: '#FFFFFF', fontSize: 14 }}>Open
Link
</TouchableHighlight>
: null
}
<TouchableHighlight
onPress={() => this.onOpneScanner()}
style={styles.button}>
<Text style={{ color: '#FFFFFF', fontSize: 14 }}>
Open QR Scanner
</Text>
</TouchableHighlight>
</View>
);
}
return (
<View style={{ flex: 1 }}>
<CameraKitCameraScreen
showFrame={false}
//Show/hide scan frame
scanBarcode={true}
//Can restrict for the QR Code only
laserColor={'blue'}
//Color can be of your choice
frameColor={'yellow'}
//If frame is visible then frame color
colorForScannerFrame={'black'}
//Scanner Frame color
onReadCode={event =>
this.onBarcodeScan(event.nativeEvent.codeStringValue)
}
/>
</View>
);
}
}