나는 react-native가 처음이며 Android 및 iPhone의 Chrome과 같은 기본 브라우저 에서 URL 을 열고 싶습니다 .
우리는 내가 원하는 기능과 같은 Android에서 의도를 통해 URL을 엽니 다.
여러 번 검색했지만 Deepklinking 결과를 얻을 수 있습니다.
답변:
당신은 사용해야합니다 Linking
.
문서의 예 :
class OpenURLButton extends React.Component {
static propTypes = { url: React.PropTypes.string };
handleClick = () => {
Linking.canOpenURL(this.props.url).then(supported => {
if (supported) {
Linking.openURL(this.props.url);
} else {
console.log("Don't know how to open URI: " + this.props.url);
}
});
};
render() {
return (
<TouchableOpacity onPress={this.handleClick}>
{" "}
<View style={styles.button}>
{" "}<Text style={styles.text}>Open {this.props.url}</Text>{" "}
</View>
{" "}
</TouchableOpacity>
);
}
}
다음은 Expo Snack에서 시도해 볼 수있는 예입니다 .
import React, { Component } from 'react';
import { View, StyleSheet, Button, Linking } from 'react-native';
import { Constants } from 'expo';
export default class App extends Component {
render() {
return (
<View style={styles.container}>
<Button title="Click me" onPress={ ()=>{ Linking.openURL('https://google.com')}} />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#ecf0f1',
},
});
앱이 URL을 열 수 있는지 확인하지 않아도되는 더 간단한 방법입니다.
loadInBrowser = () => {
Linking.openURL(this.state.url).catch(err => console.error("Couldn't load page", err));
};
버튼으로 호출합니다.
<Button title="Open in Browser" onPress={this.loadInBrowser} />
openURL
메소드 에 전달하기 전에 해당 확인을 수행합니다 . 예 : If (this.state.url) Linking.openURL(this.state.url)
. 사전 확인을 원하지 않는 경우 사용할 catch 절을 넣을 수도 있습니다.
React 16.8+에서는 기능적 구성 요소를 사용하여 다음을 수행합니다.
import React from 'react';
import { Button, Linking } from 'react-native';
const ExternalLinkBtn = (props) => {
return <Button
title={props.title}
onPress={() => {
Linking.openURL(props.url)
.catch(err => {
console.error("Failed opening page because: ", err)
alert('Failed to open page')
})}}
/>
}
export default function exampleUse() {
return (
<View>
<ExternalLinkBtn title="Example Link" url="https://example.com" />
</View>
)
}