ํ์ฌ RN 0.28.0์ ์คํ ์ค์ ๋๋ค ...
NetInfo.isConnected.fetch().then(isConnected => {
// variable isConnected is always false
});
PR์ํ์ง๋ง iOS ์ฉ์ผ๋ก ์ฝ๋ฉ ํ ์ ์์ต๋๋ค.
RN 0.29.0์ผ๋ก๋ ์ฌํ ํ ์ ์์ต๋๋ค. ๋๋ 0.26.2 ์ด์ ์ ์คํ ์ค์ด์๊ณ ์ ์๋ํ์ต๋๋ค. ์์ค์์ ๋น๋ํ๊ณ ๋๋ฒ๊ทธํ๋ ค๊ณ ํฉ๋๋ค.
+1
์ด์ ์ ๋์ผํ ๋ฌธ์ ๋ฅผ๋ณด๊ณ ํ์ต๋๋ค : https://github.com/facebook/react-native/issues/8469
๋น ๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ NetInfo.isConnected.addEventListener('change', Function.prototype)
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค.
+1 ๋ฐ NetInfo.fetch (). done ()๊ณผ ๋์ผํ ๋ฌธ์ -ํญ์ unknown
๋ฐํ
์ด ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
componentDidMount() {
const dispatchConnected = isConnected => this.props.dispatch(setIsConnected(isConnected));
NetInfo.isConnected.fetch().then().done(() => {
NetInfo.isConnected.addEventListener('change', dispatchConnected);
});
}
+1
์ด ๋ฒ๊ทธ๋ 0.29.2์์ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
์ด ๋ฒ๊ทธ๋ 0.28์์ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
0.30.0์ด ์ฌ์ ํ ์๋ํ์ง ์์
๊ด๋ จ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฏ๋ก ์ฌ์ ํ ์๋ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด์ ์ https://github.com/facebook/react-native/issues/8469 ์์ ๋ฒ๊ทธ๋ฅผ๋ณด๊ณ ํ์ต๋๋ค. ์ฌ๊ธฐ์์ ์์ธ์ ์์ธํ ์ค๋ช ํ๊ณ ์ํ ์ฝ๋๊ฐ ์ฒจ๋ถ๋์ด ์์ต๋๋ค. ์ด ๋๋ฌธ์ ์ด๊ฒ์ ๋ซ์ ๋๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฆฐ RN ๋ฌธ์ ์ ์๊ฐ ๋งค์ผ ์ฆ๊ฐํ๋ฏ๋ก ๊ฐ๋ฅํ ํ ์ฐ๋ฆฌ์ ์ญํ ์ ์ํํ๊ณ ํตํฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ค๋๋ ๊ฐ์ ๋ฌธ์ ์ ์ฃผ๋ชฉํ์ต๋๋ค
0.30.0 ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ์ด ์ค๋ฅ๋ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
๋์๊ฒ ๊ฐ์ ๋ฌธ์ , ๋๋ [email protected]์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๊ฐ์ ธ ์ค๊ธฐ๋ ํญ์ ์ ์ ์์์ ๋ฐํํฉ๋๋ค.
ํ์ง๋ง ๋์ addEventListener๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
NetInfo.addEventListener('change',
(networkType)=> {
this.setState({networkType})
}
)
๋์ ์:
NetInfo.fetch().done(
(networkType)=> {
this.setState({networkType})
}
)
@ facebook-github-bot ๋ฒ๊ทธ
0.31์์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น?
0.32์ ๋์ผ
@knowbody ์ค ๋ํซ์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น? ๋ด ํด๋์ค์์ ๋๋ ์ ์ญ ํจ์ ๋๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก setIsConnected ๋ฉ์๋๋ฅผ ์ ์ํด์ผํฉ๋๊น? ์๋ํ๋ฉด ์ค์ ๋ก Can't find variable: setIsConnected
๋ผ๋ ์ค๋ฅ๊ฐ ์์ต๋๋ค.
@florentsorel ๊ทธ๋์ ๋ด ํ๋ก์ ํธ์์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด redux๋ฅผ ์ฌ์ฉํ๊ณ setIsConnected
๋ ๋ด ์ก์
์์ฑ์์
๋๋ค.
actions/network.js
export const setIsConnected = (isConnected) => ({
type: 'SET_IS_CONNECTED',
isConnected
});
๊ทธ๋ฆฌ๊ณ network
๊ฐ์๊ธฐ๊ฐ ์์ต๋๋ค.
reducers/network.js
const initialState = {
isConnected: true
};
const network = (state = initialState, action) => {
switch (action.type) {
case 'SET_IS_CONNECTED':
return {
isConnected: action.isConnected
};
default:
return state;
}
}
export default network;
+1
v0.34.1์์์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํธ์ง : v0.35.0 ๋ฐ ๋์ผํ ๋ฌธ์ ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
v0.35.0์์ ๋์ผ
v0.36.0์์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
@knowbody ์ค ๋ํซ์ 0.36์์ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค.
@Dnld : @Ehesp ๋ v.036์์ ์๋ํ๋ค๊ณ ๋งํฉ๋๋ค. ์ด๊ฒ์ ๊ฒฐ๊ตญ ํด๊ฒฐ๋์ง ์์ต๋๊น? 0.33์์๋ ๋ฌธ์ ๊ฐ ์์๋๋ฐ ์ ๊ทธ๋ ์ด๋ํ๊ณ ์ถ์ต๋๋ค. ๊ฐ์ฌ.
๊ธฐ๋ณธ ์ฝ๋๋ ์ค์ ๋ก ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฏ๋ก ์ด๊ฒ์ด "๊ณ ์ "๋๋ฉด ๋๋ ๊ฒ์ ๋๋ค.
์ด ๋ณ๊ฒฝ์ ๋๊ธฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ์ด๋ฅผ ๊ด์ฐฐํ๋ ๋ฐ ๊ด์ฌ์ด์๋ ๊ฒฝ์ฐ ๋คํธ์ํฌ ์ํ๋ฅผ ๊ฐ์ํ๋ ๊ธฐ๋ณธ ๊ธฐ๊ณ๋ฅผ ์ค์ ํ๋ ๊ฒ ๊ฐ์์ ๋ฐ์ดํ๋ก ์์ ํ์ต๋๋ค.
์ฑ ์ ๋๋ฌ ๊ฐ๋ฅ์ฑ ํ์ธ ์ ํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฅผ
์ด ์์ ์์ ์ด๊ฒ์ด ๋ฐ๋์งํ ๋์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก ๋ฌธ์ ๋ณ๊ฒฝ์ด ํ์ํ ์ ์์ต๋๋ค. NetInfo.isConnected
๋ ๋ถ์ธ์ ๋ฐํํ๋ฏ๋ก ์ํ๋ฅผ ์ ์ ์์ผ๋ฉฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐ ํ ๋๊น์ง ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฒ์ ํํํ์ง ์์ต๋๋ค. ๋๋ null
๋๋ ๋ถ์ธ์ ๋ฐํํ๋๋ก ํจ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ด ์ฑ์๋ @knowbody๊ฐ ๊ฒ์ ํ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ ์ฝ๋๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ํ ๋ ์ธ๋ชจ๊ฐ ์๊ธฐ ๋๋ฌธ์ NetInfo.isConnected.fetch()
๋ผ๊ณ ์ ํ ๋ถ๋ฅด์ง ์์ต๋๋ค.
์ฐ๊ฒฐ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ๋ฉด ์ฐ๊ฒฐ ์ํ๊ฐ ๋ ์ด์ ์ ์ ์์ ๋ ์ํ๊ฐ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
0.34.1์ด ์ฌ์ ํ ์๋ํ์ง ์์
RN 0.37.0๊ณผ ๋์ผํ ๋ฌธ์
@ xing-zheng ์ด๋ค ์ด์ ๋ก ๋ด ์ปดํจํฐ์์ Wi-Fi๋ฅผ ๋๋๋ผ๋ ์๋ฃจ์ ์ด 'MOBILE'๋ง ๋ฐํํ๋ฏ๋ก ์๋ฎฌ๋ ์ดํฐ์ ๋ฐ์๋ฉ๋๋ค. ์ ๊ทธ๋ฐ์ง ์์ธ์?
componentDidMount() {
NetInfo.addEventListener('change',
(networkType)=> {
this.setState({connected: networkType})
}
)
}
RN 0.38.0๊ณผ ๋์ผํ ๋ฌธ์
0.39์์๋ ๋์ผ
addEventListener ์๋ฃจ์ ์ ์๋ ํ ๋ NetInfo๋ ํ๋ ๋๋ ๋ ๊ฐ์ ์ฐ๊ฒฐ ๋ณ๊ฒฝ ์ฌํญ ๋ง ๊ฐ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๊ฒฐ๋ก ์์ํ ๋ค์ ์ฐ๊ฒฐ์ ๋์ผ๋ฉด Netinfo๊ฐ์ด๋ฅผ ๊ฐ์งํ์ง๋ง ๋ค์ ์ฐ๊ฒฐํ๋ฉด ํ์ฌ ์ฐ๊ฒฐ๋์ด ์์์ ๊ฐ์งํ์ง ๋ชปํฉ๋๋ค. NetInfo๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ผ๋ ๋ด ์ฑ์์ ์์ฒญ๋๊ฒ ๋ง์ ์คํ์ ์์ฑํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ ๋๊ฐ์ ๊ฒฝํ์ํ๊ณ ์์ต๋๊น?
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ง๋ค์ด์ผํ์ต๋๋ค. ์ด๋ค ์ด์ ๋ก ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ Android์์ ์๋ํ๊ณ ๋ค๋ฅธ ํ๋๋ iOS์์ ์๋ํฉ๋๋ค. ์ด๊ฒ์ ๋ํ ์์ ์ด ์ข์ ๊ฒ์ ๋๋ค.
function handleFirstConnectivityChange(isConnected) {
if (!sConnected) {
// do action
}
NetInfo.isConnected.removeEventListener('change', handleFirstConnectivityChange);
}
if (Platform.OS === 'ios') {
NetInfo.isConnected.addEventListener('change', handleFirstConnectivityChange);
} else {
NetInfo.isConnected.fetch().then(isConnected => {
if (!sConnected) {
// do action
}
}
@ robertodias180 ์๋ํ์ง ์์ต๋๋ค.
RN- 0.39 ์ด์
function handleFirstConnectivityChange (isConnected) {
if (! sConnected) {
// ์กฐ์น ์ํ
}
NetInfo.isConnected.removeEventListener ( 'change', handleFirstConnectivityChange);
}
if (Platform.OS === 'ios') {
NetInfo.isConnected.addEventListener ( 'change', handleFirstConnectivityChange);
} else {
NetInfo.isConnected.fetch (). then (isConnected => {
if (! sConnected) {
// ์กฐ์น ์ํ
}
}
์ ์ข ๋์ ์ฃผ ์๊ฒ ์ด์?
@imbudhiraja ๋ ๋ชจ๋ ํ๋ซํผ์์ ์๋ํฉ๋๊น?
์๋์ ์ด๋ค ํ๋ซํผ์์๋ ์๋ํ์ง ์์์ต๋๋ค.
๊ฐ์ฌ
๋งค๋์ฌ ๋ถ๋ ๋ผ์
2017 ๋ 1 ์ 3 ์ผ ์คํ 8์ 12 ๋ถ์ "Roberto Dias" [email protected]์ด ์์ฑํ์ต๋๋ค.
@imbudhiraja https://github.com/imbudhiraja ๋
ํ๋ซํผ?โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/facebook/react-native/issues/8615#issuecomment-270128504 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AVTjXHSe8OcVq8fQ5XVk8hh9XXHfHFVZks5rOl5ggaJpZM4JGaBc
.
๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
isConnected.fetch
๋ iOS์์ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ ์ ๊ฐ๋จํด์ผํฉ๋๋ค. @ robertodias180 ์ด ๊ฒ์ ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ฟผ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.RN 0.38.1 ์ดํ, iOS ์๋ฎฌ๋ ์ดํฐ.
componentDidMount() {
NetInfo.isConnected.fetch().then(this._handleConnectionInfoChange);
NetInfo.isConnected.addEventListener(
'change',
this._handleConnectionInfoChange
);
}
componentWillUnmount(){
NetInfo.isConnected.removeEventListener(
'change',
this._handleConnectionInfoChange
);
}
_handleConnectionInfoChange(isConnected){
this.props.connectActions.netInfo(isConnected);
dbg('connected', isConnected);
};
์ด๊ธฐ NetInfo.isConnected.fetch().then(this._handleConnectionInfoChange);
๋ ํ์ฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๊ฒฐ ์ํ์ ๋ํ ํ์ ๋ณ๊ฒฝ์ eventListener์ ์ํด ์บก์ฒ๋์ง ์์ต๋๋ค.
๋๋ ์ง๊ธ ๋ง์ RN ๋ฒ์ ์์์ด ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค.
@imbudhiraja ๋ ๊ฒฐ๊ตญ "๊นจ๋ํ"์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค. ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ํ์ฌ ์ํ๊ฐ์๋ ์ ํธ๋ฆฌํฐ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ๋ ํ๋ซํผ ๋ชจ๋์์ ์๋ํฉ๋๋ค. ์ฑ์ด ์ด๋ฆฌ๋ฉด initializeConnection
์, ๊ทธ๋ฆฌ๊ณ ํ์ํ ๋ isConnected
๋ฅผํฉ๋๋ค. ์ฑ์ด ์ด๋ฆด ๋ (ํนํ Android์์) NetInfo
์ ์ฐ๊ฒฐ ์ํ๊ฐ ํ์ ๋ ๋๊น์ง ์ฝ๊ฐ์ ์๊ฐ์ด ์์๋ ์ ์์ต๋๋ค. hasConnection !== null
๊น์ง ์ง์ฐ๋์์ต๋๋ค. ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
const hasConnection = null;
export const initializeConnection = () => {
const dispatchConnected = isConnected => { hasConnection = isConnected; };
NetInfo.isConnected.fetch().then().done(() => {
NetInfo.isConnected.addEventListener('change', dispatchConnected);
});
}
export const isConnected = () => {
NetInfo.fetch().done((reach) => {
console.log('Initial: ' + reach);
});
return hasConnection;
}
๋น์ทํ ๊ฒ์ ์๋ํ์ง๋ง ์ฐ๊ฒฐ์ด (์๋ฎฌ๋ ์ดํฐ์์) ๋ฐํ ๋ ๋ eventListener๊ฐ ๊ฐ์งํ์ง ๋ชปํ๋ ์ํฉ์ด ๊ณ์ ๋ฐ์ํฉ๋๋ค.
์ธํฐ๋ท ์ฐ๊ฒฐ์์ด ์ฑ ์๋ก ๊ณ ์นจ => ๊ฐ์ง ๋จ
์ธํฐ๋ท ๋ค์ ์ผ๊ธฐ => ๊ฐ์ง๋์ง ์์
์ธํฐ๋ท ์ฐ๊ฒฐ๋ก ์ฑ ์๋ก ๊ณ ์นจ => ๊ฐ์ง ๋จ
์ธํฐ๋ท ๋๊ธฐ => ๊ฐ์ง ๋จ
์ธํฐ๋ท ๋ค์ ์ผ๊ธฐ => ๊ฐ์ง๋์ง ์์
<strong i="11">@autobind</strong>
export default class ConnectionToast extends React.Component {
constructor(props){
super(props);
}
componentDidMount() {
NetInfo.isConnected.fetch()
.then(this._handleConnectionInfoChange)
.done(this._addListener);
}
componentWillUnmount(){
this._removeListener();
}
_addListener(){
NetInfo.isConnected.addEventListener(
'change',
this._handleConnectionInfoChange
);
}
_removeListener(){
NetInfo.isConnected.removeEventListener(
'change',
this._handleConnectionInfoChange
);
}
_handleConnectionInfoChange(isConnected){
this.props.connectActions.netInfo(isConnected);
dbg('connected', isConnected);
// this._removeListener();
// this._addListener();
}
[...]
๋ณ๊ฒฝ ๋ ๋๋ง๋ค ์ฒญ์ทจ์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ์ถ๊ฐํ๋ ค๊ณ ์๋ํ์ง๋ง ๊ธฐ์จ์ ์์์ต๋๋ค.
@mschipperheyn @knowbody ๊ฐ ์ด์ ์ ๊ฒ์ ํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ฌธ์๋ ๋ํ handleFirstConnectivityChange
๋ฅผ ํตํด ์ฒซ ๋ฒ์งธ ๋ณ๊ฒฝ ์ฌํญ ๋ง ์ฒ๋ฆฌ ํ ๊ฒ์ด๋ผ๊ณ ์์ํฉ๋๋ค. ์ด๊ฒ์ด ๋ง์ต๋๊น, ์๋๋ฉด ๋ชจ๋ ํ์ ๋ณ๊ฒฝ์ ๊ฐ์งํด์ผํฉ๋๊น?
๋น์ ์ด ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ์ญ์์ค
์๋๋ก์ด๋ ๋งค๋ํ์คํธ ํ์ผ์ ์ค์ ํ์ญ์์ค. ์ด๊ฒ์ ๋๋ฅผ ๋์ด ๋จ๋ ธ๋ค.
RN 0.41.0๊ณผ ๋์ผํ ๋ฌธ์
iOS์์๋ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ SCNetworkReachabilitySetCallback์ ๋ฑ๋กํ์ง ์์ต๋๋ค. ํ์คํ ์๋ํ์ง ์์ต๋๋ค. ๋์์ธ ๋ชฉ์ ์ ๋ฌด์์ ๋๊น?
0.41.2์ ๋์ผ
@djohnkirby ๊ทํ์ ์๊ฒฌ์ XML์ด ๋๋ฝ๋์์ต๋๋ค. ๊ฒ์ํ๋ ค๊ณ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํธ์ง ํ ์ ์์ต๋๊น?
AndroidManifest.xml์ ์ถ๊ฐ ํ ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
0.39.2 : ๊ฐ์ ๋ฌธ์ . NetInfo fetch
๊ฒฐ๊ณผ๋ ํญ์ false
์ผ๋ฟ๋ง ์๋๋ผ ์ฑ์ด ์์๋ ํ ์ฐ๊ฒฐ ์ํ ๋ณ๊ฒฝ์ ๋น ๋ฅด๊ฒ ๊ฐ์งํฉ๋๋ค.
0.42.0 : ๊ฐ์ ๋ฌธ์ . ๋๋ ๋ํ ์ฌ๊ธฐ์ ๋ด ๋ฌธ์ ๋ฅผ ์ค๋ช
ํ๋ค : https://stackoverflow.com/questions/42642034/check-for-internet-connection-returns-wrong-results
iOS ๋ฐ macOS Sierra์์ ํ
์คํธ ์ค์
๋๋ค.
์ ๋ฐ์ดํธ : ๋ด ๋ฌธ์ ๋ ์๋ฎฌ๋ ์ดํฐ์์ ํ ์คํธํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฅ์น์์ ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค. ์์ ๋งํฌ์์ ๋ต๋ณํ์ต๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค :(
NetInfo.isConnected.fetch().then((isConnected) => { console.log(isConnected); });
// always return false
์ฑ์ด ์๋ฎฌ๋ ์ดํฐ์์ ์คํ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ๋๊ตฐ๊ฐ๊ฐ ์๊ณ ์ถ์ ๊ฒฝ์ฐ : http://stackoverflow.com/a/34732015/552669
๋ฒ๊ทธ๊ฐ ์๋๋๋ค. ๋ค์ดํฐ๋ธ ๋ชจ๋ RCTNetInfo
๋ RCTEventEmitter
์ ํ์ ํด๋์ค์ด๋ฏ๋ก startObserving
๋ฉ์๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ค๋ฉด ๊ด์ฐฐ์๋ฅผ ์ถ๊ฐํด์ผํฉ๋๋ค.
์ฑ ์์ ํ๋ก์ธ์ค์์ NetInfo์ ์์์ ๊ด์ฐฐ์๋ฅผ ์ถ๊ฐ ํ ๋ค์ fetch
ํจ์๋ฅผ ํธ์ถ ํ ์ ์์ต๋๋ค (NetInfo.isConnected๋ ์ค์ ๋ก fetch ํจ์๋ฅผ ํธ์ถํฉ๋๋ค).
@ robertodias180 ์ ์์ ๋ฐ๋ฅด๋ฉด isConnected์ ๋ํ ๋ํผ๋ฅผ
์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
export function isNetworkConnected() {
if (Platform.OS === 'ios') {
return new Promise(resolve => {
const handleFirstConnectivityChangeIOS = isConnected => {
NetInfo.isConnected.removeEventListener('change', handleFirstConnectivityChangeIOS);
resolve(isConnected);
};
NetInfo.isConnected.addEventListener('change', handleFirstConnectivityChangeIOS);
});
}
return NetInfo.isConnected.fetch();
}
๊ฐ์ ๋ฌธ์ . 0.40
๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค
0.42.3- ์๋ฎฌ๋ ์ดํฐ์ ์ค์ ์ฅ์น ๋ชจ๋์์ iOS๋ฅผ ์คํํ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. @ Knight704 ์ ์๋ฃจ์ ์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ์ํ๋์์ต๋๋ค.
0.42.3์์ ๋์ผ
0.43.1์์ ๋์ผ
0.40์์ ์ด๊ฒ์๋ณด๊ณ
์ด ๋ฌธ์ ๋ ์์ต๋๋ค. ๋ฌด์์๋ก ์๋ํ๋๋ก ํ ์ ์์๊ณ ์๋์ ๋ฉ์ท์ต๋๋ค.
@ Knight704 ์ ์๋ฃจ์ ์ ์ฒ์์๋ ๋๋ฅผ ์ํด ์๋ํ์ง๋ง ์ด๋ค ์ด์ ๋ก ๋ชจ๋ฌ์ ๋ค๋น๊ฒ์ดํฐ ๋ ๋ฒ์งธ ๋ ์ด์ด ๋ด๋ถ์์ ํ ๋ฒ ํธ์ถํ๋ฉด ๋ชจ๋ฌ์ ๋ซ์ ํ์๋ ํจ์๊ฐ ์๋์ ๋ฉ ์ถฅ๋ ๋ค (handleFirstConnectivityChangeIOS๋ ํธ์ถ๋์ง ์์). ๋งค์ฐ ์ด์ํ ํ๋, ์ด๊ฒ์ด ์๋ํ์ง ์๋ ์ด์ ๋๋ NetInfo์์ ์ ์๋ํ์ง ์๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ์ธ์ง ์ ์ ์์ต๋๋ค.
๋ด๊ฐ ๋ญ ๋์น๊ณ ์๋?
this.state = {
isConnected: null,
}
componentDidMount() {
console.log('first one ', this.state.isConnected)
NetInfo.isConnected.addEventListener(
'change',
this._handleConnectivityChange
);
console.log('second ', this.state.isConnected)
NetInfo.isConnected.fetch().done(
(isConnected) => {this.setState({isConnected});}
);
console.log('third ', this.state.isConnected)
}
componentWillUnmount(){
console.log('did it unmount ', this.state.isConnected)
NetInfo.isConnected.removeEventListener(
'change',
this._handleConnectionInfoChange
);
console.log('it did unmount ', this.state.isConnected)
}
_handleConnectivityChange = (isConnected) => {
this.setState({
isConnected,
});
};
render() {
console.log('fourth ', this.state.isConnected)
if(this.state.isConnected === false){
const connectAlert = (Alert.alert(
'ERROR',
'No connection bro!',
[
{text: 'OK'},
]
))
}
return ()
}
๊ทธ๋์ ๋ด๊ฐ ๊ทธ๊ฒ์ ์คํํ๋ฉด ํญ์์ ์๋์ง๋ง ๊ฐ๋ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํฉ๋๋ค ....
๋ค์์ ์ฐ๊ฒฐ์ด ์์ด๋ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ณต ํ ๋ ๋ฐํ๋๋ ์ฝ์ ๋ก๊ทธ์ ๋๋ค.
'fourth ', null
'first one ', null
'second ', null
'third ', null
'fourth ', false
'fourth ', true
https://github.com/facebook/react-native/issues/8615#issuecomment -287977178์์ @ Knight704 ์ ์์ ์ฌํญ์ ์ฌ์ฉํ ๋ @SteffeyDev ์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ ์๋ํ์ง๋ง ํธ์ ๋๋ ํ ๋ชจ๋ฌ change
์ด๋ฒคํธ๊ฐ ์ด๋ฏธ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ๋ฏ๋ก ๋์ผํ ์ฝ๋๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
๋๋ ์ด๋ฌํ ์กฐ๊ฑด์์ ๊ทธ ๋์น NetInfo.fetch()
๋ฐํ unknown
์ํ๋ฅผ (์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค false
์์ NetInfo.isConnected.fetch()
๋ด๊ฐ ๊ทธ๊ฒ์ ํด๊ฒฐํ ์ ์์๋ค ๋๋ฌธ์ ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์ต๋๋ค.
export function isNetworkConnected() {
return NetInfo.fetch().then(reachability => {
if (reachability === 'unknown') {
return new Promise(resolve => {
const handleFirstConnectivityChangeIOS = isConnected => {
NetInfo.isConnected.removeEventListener('change', handleFirstConnectivityChangeIOS);
resolve(isConnected);
};
NetInfo.isConnected.addEventListener('change', handleFirstConnectivityChangeIOS);
});
}
reachability = reachability.toLowerCase();
return (reachability !== 'none' && reachability !== 'unknown');
});
}
unknown
์กฐ๊ฑด์ Android๊ฐ UNKNOWN
๋ฐํํ๋ฏ๋ก iOS์์๋ง ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ํ NetInfo.isConnected.fetch
์ ๊ธฐ์กด ๋์์ ์ด๋ ์ ๋ ์ ์งํด์ผํ๋ฏ๋ก ์ํ๋ฅผ ๋ฐํํ๊ธฐ ์ ์ ์๋ฌธ์๋ฅผ ์ค์ฌ์ผํ๋ ์ด์ ์ด๊ธฐ๋ํฉ๋๋ค.
0.44์์ ๋์ผ
์ฒ์์๋ NetInfo๊ฐ ํ์ฃผ๊ธฐ (on-> off) ํ์ ๋ง โโ๋คํธ์ํฌ ์ํ ๋ณ๊ฒฝ์ ๋ฐํํ๋ ค๊ณ ํ๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ์๋ฎฌ๋ ์ดํฐ์์๋ง ๊ทธ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์ค์ ์ฅ์น์์๋ ์ฌ๋ฌ ์ฐ๊ฒฐ / ์ฐ๊ฒฐ ํด์ ์ฃผ๊ธฐ์๋ ์ฝ๋ฐฑ์ ์ ๋๋ก ์คํํฉ๋๋ค.
์ํ ์ฝ๋
NetInfo.addEventListener( 'change', this._onConnectivityChange );
_onConnectivityChange(connType) {
// Do something with connType...
}
์ด ๋ฌธ์ ๋ ํ๋์ ๋๋ฅผ ๊ดด๋กญ ํ๊ณ ๊ฐ์ ์ ์ผ๋ก ์ผ๋ฐ์ ์ธ React ํจํด๊ณผ redux์์ ๋ฉ์ง ํตํฉ์ ํฌํจํ๋ RN ์คํ๋ผ์ธ / ์จ๋ผ์ธ ๊ฐ์ง์ ์ด์ ์ ๋ง์ถ ์์ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ์ต๋๋ค.
์ค์ ๊ธฐ๊ธฐ, Android ๋ฐ iOS ๋ชจ๋์์ ์ ๋๋ก ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋๋ก ๋ฆฌ์ค๋๊ฐ iOS ์๋ฎฌ๋ ์ดํฐ์์ ํธ๋ฆฌ๊ฑฐ๋์ง ์๊ณ ์ฐ๊ฒฐ ์ํ๊ฐ ์ผ๊ด๋์ง ์์์ ํ์ฆ ํ ์ ์์ต๋๋ค. ๋๋ ์์ง @ knight704 ์ @Ignigena (๊ฐ๊ฐ ์ฌ๊ธฐ ์ ์ฌ๊ธฐ )๊ฐ ์ ์ํ ์๋ฃจ์ ์ ์๋ํ์ง ์์์ง๋ง ์๊ฐ์ด ๋๋ฉด ๊ณง ํ ์คํธ ํ ๊ฒ์ ๋๋ค.
๋ ๋ง์ ์ฌ๋๋ค์ด ์ด๋ฌํ ์๋ฃจ์ ์ด ๋งค๋ ฅ์ฒ๋ผ ์๋ํ๋ค๋ ๊ฒ์ ํ์ธํ๋ ๊ฒฝ์ฐ PR๋ ๋งค์ฐ ํ์ํฉ๋๋ค!
๊ณ ์ณ์ฃผ์ธ์.
์ด ๋ฌธ์ ๊ฐ ๊ณง ํด๊ฒฐ ๋ ๊ฒ ๊ฐ์ง ์๋ค๋ฉด ์ ์ด๋ iOS์์ ์๋ํ์ง ์์์ ๋ํ๋ด๋๋ก ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์์ต๋๊น?
@ jpb12 ์๋ง๋ PR์ ๋ง๋ค๊ณ ๋ณํฉํ๋์ง ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ํ์ง ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ด๊ฒ์ ๋ ์ ๋ณผ ์ ์์ต๋๋ค.
Android ๋ฒ์ ์์์ด ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค. ๋ฐฐ๊ฒฝ์ผ๋ก ์ด๋ํ๊ณ ๋ค์ ์ ๊ฒฝ์ผ๋ก ๋์ ์ค๋ ๊ฒ๊ณผ ๊ด๋ จ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ถํํ๋์ด ๋ฌธ์ ๋ฅผ ์์ ์ ์ผ๋ก ์ฌํ ํ ์๋ ์์ง๋ง ์ฌ๋ฌ ๋ฐฐ๊ฒฝ / ์ ๊ฒฝ ์ ํ ํ์ ํ์คํ ๋ฐ์ํฉ๋๋ค. ํนํ ๊ทธ ์๊ฐ์ ์ฐ๊ฒฐ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ
๊ทธ๋ด ๋
NetInfo.isConnected.fetch().then(isConnected => {...})
ํญ์ false
๋ฐํํฉ๋๋ค.
NetInfo.fetch().then((reach) => {...})
ํญ์ NONE
๋ฐํํฉ๋๋ค.
๋ฆฌ์ค๋ ์ถ๊ฐ / ์ ๊ฑฐ๋ ๋์์ด๋์ง ์์ต๋๋ค.
์ค์ ์ฐ๊ฒฐ ์ํ๋ฅผ ๊ฐ์งํ๋ ์ ๋ขฐํ ์์๋ ๋ฐฉ๋ฒ์ ๋ํด ๋งค์ฐ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
Wi-Fi์ ์ฐ๊ฒฐํ ๋ isConnected๊ฐ true๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ด์ํ ๋์์ ์ง๋ฉดํ๊ณ ์์ง๋ง (์ง๊ธ๊น์ง๋ ๊ด์ฐฎ์ต๋๋ค) ๋ชจ๋์ด ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋์ง ์์ผ๋ฉด isConnected๊ฐ ์ฌ์ ํ true์ ๋๋ค. ๋คํธ์ํฌ ์ฐ๊ฒฐ๋ฟ๋ง ์๋๋ผ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ํจ๊ณผ์ ์ผ๋ก ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๋ค ์์ด๋์ด? ๊ฐ์ฌ
@kodatech ์ด ๋ชจ๋์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค. ์ต๊ทผ์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ์ผ๋ฉฐ https://github.com/rauliyohmc/react-native-offline์ ์ ๊ทน ๊ถ์ฅํฉ๋๋ค.
@craigcoles ๋ง์ ๊ฐ์ฌ
@ Knight704 ๊ฐ์ฌํฉ๋๋ค ํ์ .
@craigcoles ๋ด๊ฐ ๋ฐ๋ฅผ ์์๋ ์์ ์ฝ๋๊ฐ ์์ต๋๊น?
@nmfzone ๋ด๊ฐ ๋ณด์ฌ์ค ์์๋ ๊ฒ์ ์์ง๋ง Readme ๐์ ๋ง์ ์ฝ๋ ์์ ๊ฐ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด Netinfo ๋ฆฌ์ค๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ ํ๋ซํผ ๋ชจ๋์์ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค.
"๋ฐ์ ๋ค์ดํฐ๋ธ": "0.43.4",
componentDidMount(){
NetInfo.isConnected.addEventListener('change', this._handleConnectivityChange);
}
componentWillUnmount(){
NetInfo.isConnected.removeEventListener('change', this._handleConnectivityChange);
}
_handleConnectivityChange = (isConnected) => {
console.warn(isConnected);
}
@ sumesh1993 ๋ด ๊ฒฝํ์ Android ์ฑ์ด ์ต์ํ ๋ ๊ฒฝ์ฐ (๋ฐฑ๊ทธ๋ผ์ด๋์์) 'change'
์ด๋ฒคํธ์ ๋ฐ์ํ์ง ์์ต๋๋ค. ๋ด Galaxy Note 5, Android 7.0์์ ํ
์คํธ๋์์ต๋๋ค.
์์์ ๊ถ์ฅ ํ ๋ชจ๋ https://github.com/rauliyohmc/react-native-offline ์ ๊ณ์ํด์ https://google.com
ํํฉ๋๋ค. ์๋ํ์ง๋ง์ด ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ์ถ์ต๋๋ค.
Android ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ๋์ ์ผ์ ์ค์ง๋๊ธฐ ๋๋ฌธ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ด๋ฒคํธ๋ฅผ ๋ฐ์ผ๋ ค๋ฉด ์ฑ์ด ์ผ์ ์ค์ง ๋ ๋์์๋ ๊ณ์ ์คํ๋๋ ์๋น์ค๋ฅผ ๋ง๋ค์ด์ผํฉ๋๋ค.
๋๋ ์ฑ์ onResume ํธ๋ค๋ฌ ๋ฅผ ์ถ๊ฐํ๊ณ ์คํ๋ผ์ธ ์ํ๋ฅผ ์ฟผ๋ฆฌ ํ ์ โโ์์ต๋๋ค. ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๊ฐ๋จํด์ผํฉ๋๋ค.
@ alsh76 ์ ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์์ ๋ ์๋ํ์ง๋ง ๋ฉํฐ ํ์คํน ๋ฉ๋ด์์ ์ฑ์ด ์ข
๋ฃ๋๋ฉด ์๋ํ์ง ์์ต๋๋ค.
ํ ํ๋ฉด์ด ์์๋ ๋๋ง๋ค ๋ค์ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
if(Platform.OS === 'android'){
NetInfo.isConnected.fetch().then(isConnected => {
if(!isConnected)
return;
//Do something
});
}
Android ๊ฐ์ ์ฅ์น์์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ์ต๋๋ค. ํ์ง๋ง ๋ฌธ์ ๋ ๋ฉฐ์น ์ ๋งํด๋ ๊ด์ฐฎ ์์ง๋ง ์ฌ์ ํ iOS ๊ธฐ๊ธฐ์ ์๋ฎฌ๋ ์ดํฐ์์ ๊ทธ๋ ๊ฒํ๊ณ ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ป๋ ์์ ์ ์ด๊ณ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๊น?
iOS์์ ๋๋ฅผ ์ํด ํธ๋ฆญ์ ํด์ค @ sumesh1993 ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
@igorarkhipenko ๊ทธ์ ์ ์์ ์๋ ํ์ต๋๊น?
์๋
ํ์ธ์, Android์ ๋ํ ๊ถํ์ ์ถ๊ฐ ํ์ต๋๊น?
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
NetInfo.fetch ๋ก @ Knight704 ๋ฐ @Ignigena ์ ์๋ฃจ์
์ ๋ํ ์์ ์
๋ฐ์ดํธ๋ ์ด์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ด๊ฒ์ ๋๋ฅผ ์ํด ํธ๋ฆญ์ํ์ต๋๋ค.
```
const isNetworkConnected = () => {
return NetInfo.getConnectionInfo (). then (reachability => {
if (reachability.type === 'unknown') {
return new Promise (resolve => {
const handleFirstConnectivityChangeIOS = isConnected => {
NetInfo.isConnected.removeEventListener ( 'connectionChange', handleFirstConnectivityChangeIOS);
ํด๊ฒฐ (isConnected);
};
NetInfo.isConnected.addEventListener ( 'connectionChange', handleFirstConnectivityChangeIOS);
});
}
return (reachability.type! == 'none'&& reachability.type! == 'unknown')
});
}
Imho NetInfo.isConnected.fetch()
๋ ์ค์ํ ๊ธฐ๋ฅ์ด๋ฏ๋ก ์ต๋ํ ๋นจ๋ฆฌ ์์ ํด์ผํฉ๋๋ค!
@javache @sahrens @davidaurelio @janicduplessis @hramos @shergin @rigdern ์ด๊ฒ์ ๋ํ ํ์ ๋ผ์ธ์ด ์์ต๋๊น?
๊ณ ๋ง์!
@pensierinmusica ์ด๊ฒ์ ์ปค๋ฎค๋ํฐ ์ค์ฌ์ ํ๋ก์ ํธ์ด๋ฏ๋ก ์ข์ PR์ํ๊ณ ์ถ์ต๋๋ค.
@shergin ์ ๋ React Native๊ฐ Facebook์์ ๋ด๋ถ์ ์ผ๋ก ์์ฑ, ์ ์ง ๊ด๋ฆฌ ๋ฐ ์ฌ์ฉ๋์์ผ๋ฉฐ ์ด๋ฌํ ์ด์ ๋ก BSD 3 ์ ๋ผ์ด์ ์ค๋ก ์ถ์๋์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋์ ์ ๋ Facebook ์ง์์ด ๋ฒ๊ทธ, ํนํ ์ค์ํ ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ์ด์จ๋ PR์ ํ์ํฉ๋๋ค!
cc @rigdern
RN ํต์ฌ ์ฝ๋์ ๋ํ ๋ง์ ๋ด์ฉ์ ์ปค๋ฎค๋ํฐ์์ ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Facebook์์ ์ฌ์ฉํ์ง ์๋ ๊ธฐ๋ฅ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๊ณ ์์ฑ์๊ฐ ๋ฒ๊ทธ / ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์์ ์ฌํญ์ ํ์ธํ ์์๋ ์ปค๋ฎค๋ํฐ PR์ ์ ํธํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
๋๋ ๋ํ ios์ 0.47.0 ๋ฐ์์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@pensierinmusica ์ด ๋ฌธ์ ๋ ๊ฐ์ฅ ํ์คํ๊ฒ ์ฐ์ ์์๊ฐ ์์ด์ผํฉ๋๋ค. .isConnected ()์์ ๋ถ์ธ ๋ฆฌํด์ ๊ฐ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ธ ์ ์์ต๋๊น?
์ฌ๊ธฐ ํธ๋ฆญ์ ์ํํด์ผํ๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ํ์ฑ ์ํ๊ฐ ๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ ์ฌ์ดํธ์ http ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ํ๊ฐํฉ๋๋ค.
์์์์ ์๋ํด์ผํ๋ ์ ์ฅ์๋ฅผ ์ด๊ธฐํํ์ต๋๋ค. https://github.com/JamesDorrian/NetInfoCheckConnection/tree/master
์ฐธ๊ณ : httpAddress ๋ณ์๋ฅผ https://www.galwaydaily.com ์์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํด์ผํฉ๋๋ค (์๋ง๋ google.com ์ผ ์๋ ์์). ์ด๊ฒ์ด ํญ์ ๋ผ์ด๋ธ๋ผ๋ ๊ฒ์ ๋ณด์ฅ ํ ์๋ ์์ต๋๋ค. ์ด๊ฒ์ด NetInfo์ ์ํด ์ข์ ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
ํธ์ ๋ด์ ๊ฐ๊ธฐ
@JamesDorrian ๊ฐ์ฌํฉ๋๋ค. ๊ฒฐ๊ตญ ๋น์ทํ ์์ ์ ์ํํ์ฌ "google.com"์ ํํ์ต๋๋ค.
์ค ๋ํซ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// /utilities/connectivity.js
import { Alert } from 'react-native';
export function warning () {
Alert.alert(
'No connection',
'Mmm... you seem to be offline'
);
};
export async function checkAsync () {
try {
const res = await fetch('https://google.com');
if (res.status === 200) return true;
} catch (e) {
warning();
}
return false;
};
๊ทธ๋๋ ์ด๊ฒ์ ์ผ์์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ฉฐ NetInfo.isConnected
๋ ์ต๋ํ ๋นจ๋ฆฌ ์์ ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค!
let isConnected = false;
Platform.OS === "ios"
? (isConnected = await fetch("https://www.google.com"))
: (isConnected = await NetInfo.isConnected.fetch());
Platform.OS === "ios" && (isConnected.status = 200)
? (isConnected = true)
: (isConnected = false);
console.log(isConnected); //Result
์ด ๋ฌธ์ ์ ๋ํ +1
์๊ฒฌ์ผ๋ก ๋ฉ์ถ ์ ์์ต๋๊น? ์ด๊ฒ์ด ๋ฐ์์ด ์ฌ์ฉ๋๋ ์ด์ ์
๋๋ค.
iOS :
์ฒซ ๋ฒ์งธ ์์ฒญ. ์๋ฒ๊ฐ ์ถฉ๋ํ๋ฉด ์ ํ์ Wi-Fi๊ฐ ์์ต๋๋ค.
NetInfo.isConnected.fetch (). then ((isConnected) => {ํญ์ false}
0.49.3.
@kddc ์๋ฃจ์ ์ด ๊ฐ๋ฐ์์ ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค ๐
์ฌ๊ธฐ ์์ ์ ๊ณตํ๋ Apple์ XCode ํ๋ก์ ํธ์ Reachability Library๋ฅผ ์ถ๊ฐํ๊ธฐ ๋งํ๋ฉด๋ฉ๋๋ค.
@fuatsengul ๋ด Xcode ํ๋ก์ ํธ์์ Reachability ํ๋ก์ ํธ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ถ๊ฐํ์ง๋ง ์ฌ์ ํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ํํด์ผ ํ ๋ค๋ฅธ ์์ ์ ๊ฐ๋ตํ
๋ฌธ์ ๋ fetch api์์๋ง ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ๋ iOS
. ๊ทธ๋ฌ๋ addEventListener๋ Android์์ ์๋ํ์ง ์์ผ๋ฏ๋ก fetch api๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. :)
๋ค์์ ๋ ์ธ๊ณ์์ ์๋ํ๋๋กํ๋ ๋ด ์ค ๋ํซ์ ๋๋ค.
function handleFirstConnectivityChange(isConnected) {
console.log('Then, is ' + (isConnected ? 'online' : 'offline'))
NetInfo.isConnected.removeEventListener(
'connectionChange',
handleFirstConnectivityChange,
)
}
if (Platform.OS === 'android') {
NetInfo.isConnected.fetch().then(isConnected => {
console.log('First, is ' + (isConnected ? 'online' : 'offline'))
})
} else {
NetInfo.isConnected.addEventListener(
'connectionChange',
handleFirstConnectivityChange,
)
}
์ฐ๊ฒฐ๋์ด ์์ด๋ IOS์์ ์คํ๋ผ์ธ์ผ๋ก ํ์
RN-0.50
NetInfo.isConnected.fetch().then(isConnected => {
console.log('First, is ' + (isConnected ? 'online' : 'offline'));
});
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด @kddc ๊ฐ์ฌํฉ๋๋ค.
๋ด iOS ์ฅ์น์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋นํ๊ธฐ ๋ชจ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋๋ ์ ์ฒด ์๊ฐ์
๋๋ค.
์ฑ์ ๋ค์ ์์ํ๋ฉด ์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด "์ก๊ธฐ"๋ฉ๋๋ค.
+1
+1
@ alburdette619 ์์ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค
๊ทธ๋์, ์ด๊ฒ์ ๋ฒ์ 0.54์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ์
๋๋ค.
@ assafb81 ํ์คํ์ง ์์ต๋๋ค. ๋ถ๋ช ํ ๊ทธ๋ค์ ๋ด๋ถ์ ์ผ๋ก ์ฐฉ๋ฅํ๊ณ ์์ผ๋ฉฐ ๊ทธ ๊ณผ์ ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
pull request๊ฐ ๋ณํฉ๋๋ฉด Facebook์ ๋จผ์ ์ด๋ฅผ ๋ด๋ถ React Native repo์ ํตํฉํ๊ณ ๋ค๋ฅธ ๊ฒ๋ค ์ค์์ ์ถ๊ฐ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค. ์ฑ๊ณตํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด GitHub ์ ์ฅ์๋ก ๋ค์ ๋ด๋ณด๋ด์ง๋๋ค.
ํ ์์ฒญ์ ํ๋์ ์ดํด๋ณด๋ฉด ์ปค๋ฐ์ด ์ด์ GitHub์ ๋ณํฉ๋์์์ ํ์ธํ ์
๋น๊ต๋ฅผ ์ํด ์ด์ ์ปค๋ฐ ์ ๋ณด๋ฉด ์ฌ๋ฌ ๋ถ๊ธฐ์ ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋งค์ ์ด์ "๋ง์คํฐ"๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆด๋ฆฌ์ค ํ๋ณด ๋ถ๊ธฐ๊ฐ ์์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ณ๊ฒฝ ์ฌํญ์ 3 ์ ์ด์ ๋ค์ ๋ฆด๋ฆฌ์ค ํ๋ณด์ ํฌํจ๋ ๊ฒ์ ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ React Native์ ์ถ์ ์ผ์
์๋ด ์ฝ ๋ฉ๋ผ
Microsoft Corp.
๋๊ตฌ๋ ์ง ์ต์ RN 54๋ก์ด ๋ฌธ์ ๋ฅผ ํ์ธ ํ์ต๋๊น? ๋์๊ฒ๋ ํญ์ iOS์ Android์์ '์ง์ค'์ ๋ฐํํ๋ฉฐ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ณธ ๋ค๋ฅธ ์ฌ๋์ด ์์ต๋๊น?
0.53 ํญ์ ๊ฑฐ์ง .. @deepaksasken .. ์๋๋ก์ด๋ ์ ์ฉ ์ฝ๋๋ฅผ ๋นํ์ฑํํด์ผํ๋ ๊ฒ ๊ฐ์ต๋๋ค. .. ๋ง์ ๋ฒ๊ทธ์ 0.54๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@ alien3d iOS์์๋ ๋นํ์ฑํํ๊ณ Android์์๋ง ์ ์งํ๋ค๋ ๋ป์ ๋๊น? Android์์ ์๋ํฉ๋๊น?
@afilp ๋๋ ์์ ios ์์ ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
if (Platform.OS === "ios") {
isConnected = await fetch("https://www.google.com");
if (isConnected) { }
} else {
NetInfo.isConnected.fetch().done(
(isConnected) => {
if (isConnected) { }
}
์์ ์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ธฐ ์ ์ ์ฌ์ ํ ๋ง์ ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค. ์ด์ ๋ค์ 0.530 ์ฌ์ฉ
@ assafb81 ๋นํ๊ธฐ ๋ชจ๋ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์
@aflip ๋ฐ์ดํฐ๊ฐ ํ์ฑํ๋์์ง๋ง ํจํค์ง๊ฐ ์์ง์๋ ๊ฒฝ์ฐ isConnected true๋ฅผ ๋ฐํํฉ๋๋ค. ํด๊ฒฐํ๋ ค๊ณ ํ์ต๋๊น?
removeEventListener๊ฐ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฑ์ด ํญ์ ๋คํธ์ํฌ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ํ๋ฉด ์๋ฉ๋๋ค. ๋๊ตฐ๊ฐ?
๋ํ ์์ ์ฌ์ฉ์์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. NetInfo ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ๋งค์ฐ ์ ๋ขฐํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ ์ ์ธ ๊ฒฐ๊ณผ์์ด ์์ ๋ง์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ํ์ต๋๋ค. ์ง๊ธ์ ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด https://google.com ๋๋ ๋ด ์๋ฒ์์ ๊ฑด๊ฐ ์๋ ํฌ์ธํธ๋ฅผ ๊ฐ์ ธ ์ค๋ ๋ฐ ์์กดํฉ๋๋ค.
@MichaelPintos ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค, ๊ฐ์ฌํฉ๋๋ค.
RN 0.54.2
์ด์์ฒด์ : iOS
ํญ์ ์๋ ค์ง์ง ์์ ๊ฐ์ ๋ฌธ์
RN์ 0.55.3์ผ๋ก ์ ๊ทธ๋ ์ด๋ ํ ๋
์ด ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ , ๋จผ์ ์ ์ ์์์ ๋ฐํ ํ ๋ค์ ์๋ํฉ๋๋ค.
NetInfo.getConnectionInfo()
.then()
.done(() => {
switch (connectionInfo.type) {
case 'none':
Alert.alert('aa', 'none');
break;
case 'wifi':
Alert.alert('aa', 'wifi');
break;
case 'cellular':
if (connectionInfo.effectiveType !== 'unknown') {
Alert.alert('aa', `cellular ${connectionInfo.effectiveType}`);
} else {
Alert.alert('aa', 'cellular unknown');
}
break;
case 'unknown':
Alert.alert('aa', 'unknown');
break;
default:
Alert.alert('aa', 'default');
break;
}
});
});
์ข์, ์ด์ ์ฝ๊ฐ์ ํธ๋ฆญ์ ํด๋ณด์.
NetInfo.getConnectionInfo()
.then()
.done(() => {
NetInfo.getConnectionInfo().then(connectionInfo => {
switch (connectionInfo.type) {
case 'none':
Alert.alert('aa', 'none');
break;
case 'wifi':
Alert.alert('aa', 'wifi');
break;
case 'cellular':
if (connectionInfo.effectiveType !== 'unknown') {
Alert.alert('aa', `cellular ${connectionInfo.effectiveType}`);
} else {
Alert.alert('aa', 'cellular unknown');
}
break;
case 'unknown':
Alert.alert('aa', 'unknown');
break;
default:
Alert.alert('aa', 'default');
break;
}
});
});
์ด๊ฒ์ ๋ด ์๋ฃจ์ ์ ๋๋ค. ๊ณต์ ์๋ฃจ์ ์ ๊ธฐ๋ํ์ญ์์ค.
ํนํ ๋ณ๊ฒฝ ๋ก๊ทธ์์์ด ๋ฌธ์ ๋ฅผ ์์ ํด์ผํ๋ค๊ณ ๋งํ๊ธฐ ๋๋ฌธ์ 55๋ก ์ ๊ทธ๋ ์ด๋๋์์ต๋๋ค. ์ฌ์ ํ ๊นจ์ก์ต๋๋ค (0.55.3).
@ yuyao110120 ๊ณผ ์ ์ฌํ ์๋ฃจ์ ์ ์ฌ์ฉํ์ฌ ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค.
NetInfo.isConnected.fetch().then(() => {
NetInfo.isConnected.fetch().then(isConnected =>
// isConnected is now the correct value
});
});
๋ ์ด์ NetInfo
์ ๋ขฐํ์ง ์์ต๋๋ค (๋ฐ์ ๋ค์ดํฐ๋ธ 0.53.3).
์ด๊ฒ์ด ์ธํฐ๋ท์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ด๊ฐํ๋ ์ผ์
๋๋ค.
async function handleConnectivityChange(status) {
const { type } = status;
let probablyHasInternet;
try {
const googleCall = await fetch(
'https://google.com', {
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
Pragma: 'no-cache',
Expires: 0,
},
});
probablyHasInternet = googleCall.status === 200;
} catch (e) {
probablyHasInternet = false;
}
console.log(`@@ isConnected: ${probablyHasInternet}`);
}
NetInfo.getConnectionInfo().then(handleConnectivityChange);
NetInfo.addEventListener('connectionChange', handleConnectivityChange);
@SudoPlz ๋๋ ๋ด ์ฑ์์ ๋๊ฐ์ ์ผ์ํ๊ณ ์ ์๋ํฉ๋๋ค. ํ์ง๋ง NetInfo
API๋ def๊ฐ ๊ณ ์ ๋์ด์ผํฉ๋๋ค. haha!
@SudoPlz ๋๋ fetch
๊ฐ Android์์ ์์ฒญ์ ์บ์ํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํค๋๋ฅผ ์ ๊ณตํด์ผํฉ๋๋ค.
const googleRequest = await fetch('https://www.google.com', {
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': 0
}
});
@AbdallaMohamed๋ฅผ ์๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๊ธ์ ์ ๋ฐ์ดํธํ์ต๋๋ค.
@kylevdr ๊ณผ ๋์ผํ์ง๋ง ์์ ์ ์ผ๋ก ์๋ํ์ง๋ง ๋ ๋ฒ์งธ ํธ์ถ ์ ์ ์์ ์๊ฐ ์ ํ์ ์ถ๊ฐํ๋ฉด ์ ๊ธ ํด์ ์งํ ๋ ๋ฒ์งธ ๋ถํ ์ ์ํด ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ๊น๋ฐ์์ ๋์์ด๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง : fwiw๋ 55.3์์ ์๋ํ์ง๋ง 55.4์์๋ ์๋ํ์ง ์์ต๋๋ค.
์ด๊ธฐ ์ฐ๊ฒฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ๋ฉด NetInfo.getConnectionInfo()
๋ฐ NetInfo.isConnected.fetch()
๊ฐ ์ฒซ ๋ฒ์งธ ํธ์ถ์์ ์ ๋๋ก ์๋ํฉ๋๋ค.
const onInitialNetConnection = isConnected => {
console.log(`Is initially connected: ${isConnected}`);
NetInfo.isConnected.removeEventListener(
onInitialNetConnection
);
};
NetInfo.isConnected.addEventListener(
'connectionChange',
onInitialNetConnection
);
// both now work on the first call.
await NetInfo.getConnectionInfo();
await NetInfo.isConnected.fetch();
๊ฐ์ฌํฉ๋๋ค # 8469
์ด ํ์ผ์ ๊ฐ์ ธ์์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์คํ๋์ง ์์ต๋๋ค.
PS fetch
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ method: 'HEAD'
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ก๋๋ ๋ฐ์ดํฐ ์์ ์ค์ด์ญ์์ค.
๋ค์ ์๋๋ฆฌ์ค์์ iPhone 8 (React Native 0.55.3, iOS 11.3.1)์์ ๋๋ฒ๊ทธ ๋ชจ๋๋ก ์ฑ์ ์คํํ ๋ ์์ ์๋ฃจ์ ์ค ์ด๋ ๊ฒ๋ ์๋ํ์ง ์์์ต๋๋ค. ์ฑ์ ๋ซ๊ณ ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ์ Wi-Fi๋ฅผ ๋ ์ํ์์ ์์ํฉ๋๋ค.
๋ชจ๋ ํ์ ์ด๋ฒคํธ๋ ์์์ ์ธ๊ธ ํ ๋ชจ๋ ์๋ฃจ์
์ผ๋ก ์์ค๋ฉ๋๋ค ( @SudoPlz ์ ๋ต๋ณ ์ ์ธ). ์ฅ์น์ ๋ฆด๋ฆฌ์ค ๋ชจ๋ ๋๋ ์๋ฎฌ๋ ์ดํฐ์ ๋๋ฒ๊ทธ ๋ชจ๋์์๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ฉด NetInfo
์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ๋์์ต๋๋ค.
@nlindroos ๊ทธ๋ ๋ค๋ฉด ์ค์ ๋ก ๋ฆด๋ฆฌ์ค ๋ฒ์ ์ ์คํํ๋ ์ฅ์น์์ NetInfo
์ด (๊ฐ) ์ ๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๊น?
์ค์ iOS ๊ธฐ๊ธฐ์์ ์คํ๋ผ์ธ ๋ชจ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ _starting_ํ๋ ํน์ ์ฌ๋ก์์ ๋ฆด๋ฆฌ์ค ๋ชจ๋์์ ์คํํ๋ ๊ฒ์ด NetInfo
์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ ํ ์์๋ ์ ์ผํ ์๋ฃจ์
์ด์์ต๋๋ค. ๋ชจ๋ NetInfo
๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ์๋ฃจ์
์ผ๋ก์ด๋ฅผ ๋ณด์ฆ ํ ๋งํผ ๋ชจ๋ ๊ด๋ จ ์๋๋ฆฌ์ค๋ฅผ ํ
์คํธํ์ง๋ ์์์ต๋๋ค.
@woodpav ์ @AbdallaMohamed ๊ฐ ๋๋ฅผ ์ํด ์ผํ ์๋ฃจ์
์ ์กฐํฉ์ด๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค.
RN ๋ฒ์ 0.55.4๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ธํฐ๋ท ์ฐ๊ฒฐ์ ํ์ธํ๋ ค๋ฉด Google ์๋ฒ์ ์์ฃผ ping์ํด์ผํฉ๋๋ค ๐
iPhone 8-11.3 ์๋ฎฌ๋ ์ดํฐ ๋ฐ RN ๋ฒ์ 0.55.4 NetInfo.isConnected.fetch (). then (isConnected => console.log ( 'isConnected', isConnected))๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ํญ์ false๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๊ฒ์ ์ ํ ์์ฐ์์๋ ๋ฌธ์ ๊ฐ๋ฉ๋๋ค. ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ์ Wi-Fi์ ๋ณํ์ ์๋ํ์ต๋๋ค.
RN ๋ฒ์ 0.55.3์ผ๋ก ๋ค์ ์ ํํ๋ฉด ๋ค์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@octopitus , @martinentelect
์ด๊ฒ์ ๋ด ์ฝ๋์ด๋ฉฐ, ๋ฐ์ ๋ค์ดํฐ๋ธ ๋ฒ์ 0.55.4๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ NetInfo
๊ฐ ์์ ๋ ๋๊น์ง ํ๋ช
ํ๊ณ ์๋ํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์
๋๋ค.
๋ด api.js ํ์ผ์์ด ์ฝ๋๊ฐ ์์ต๋๋ค.
import { NetInfo } from 'react-native';
import { url } from '[AppName]/src/config';
export const onInitialNetConnection = () => {
NetInfo.isConnected.removeEventListener(onInitialNetConnection);
};
const getDataById = async (dataId) => {
// both now work on the first call.
await NetInfo.getConnectionInfo();
const isConnected = await NetInfo.isConnected.fetch();
if (!isConnected) {
throw new Error('networkError');
}
const response = await fetch(`${url}${dataId}`, {
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
Pragma: 'no-cache',
Expires: 0,
},
});
if (response.ok) {
return response.json();
}
throw new Error('invalidCode');
};
export default getDataById;
๋ด App.js
ํ์ผ (์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ๋ด ์ง์
์ )์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
NetInfo.isConnected.addEventListener(
'connectionChange',
onInitialNetConnection,
);
@ assafb81 ๊ฐ์ฌํฉ๋๋ค! ์ด๊ฒ์ ๋ด ์ฌ์ฉ ์ฌ๋ก์ ๋์์ด๋์์ต๋๋ค.
์ ๊ฒฝ์ฐ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ iOS์์๋ ์๋ฒฝํ๊ฒ ์๋ํ์ง๋ง Android์์๋ ์ ํ ์๋ํ์ง ์์ต๋๋ค (์ ์ด๋ ์๋ฎฌ๋ ์ดํฐ์์๋).
NetInfo๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ๋์ Android์ ๋ฆฌ์ค๋์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
NetInfo.isConnected.addEventListener(
"connectionChange",
this.handleConnectionChange
);
์ฌ์ฉํ๋ค
this.count = 0
handleConnectivityChange(isConnected) {
//for iOS
this.count++
console.log(isConnected + "isConnected")
if(this.count > 1){
console.log(isConnected + "this is the right value")
}
@tannera ,
์๋ฎฌ๋ ์ดํฐ๊ฐ ์๋ ์ค์ ์๋๋ก์ด๋ ์ฅ์น์์ ํ์ธํ์ญ์์ค.
0.55.4
์ด๊ฒ์ ์ฌ์ ํ โโ๋ฒ๊ทธ์ด๊ณ , ๋ฐฉ๊ธ ํ๋ก๋์
์์ ํํธ๋ฅผ ์ณค์ต๋๋ค ๐ข
์ฌ์ ํ 0.56์์ ๊ณ ์ ๋์ง ์์
@SudoPlz 0.57 ํ ๋ก ์ค๋ ๋์ ๋ํ ๊ทํ์ ์๊ฒฌ์ ์ฃผ์ ์์ ๋ฒ์ด๋ ๊ฒ์ผ๋ก ์จ๊ฒผ์ต๋๋ค. ์์๋ค์ํผ ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ์๋ฐฑ ๊ฐ์ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๊ฐ ์์ง๋ง ํด๋น ์ค๋ ๋๋ 0.57 ๋ฆด๋ฆฌ์ค๋ฅผ ์ป๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
ํ์ ๋์ด ์ค๋ ๋๋ ๋ฉ์ธํ ์ด๋์๊ฒ ๊ฑฐ์ ๋ณด์ด์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ ์ธ ์์ ์ฌํญ์ด ๋์จ ์ง 6 ๊ฐ์์ด ์ง๋ ํ ์๋ฌด๋ ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ด์ง ์์ ๊ฒ์ ๋๋์ต๋๋ค. ์ด๊ฒ์ด ๋ง์คํฐ์์ ์์ ๋์์ผ๋ฉดํ๋ ๊ฒ์ด๋ฉด ์ธ๋ถ ์ฌํญ์ด์๋ ์ ๋ฌธ์ ๋ฅผ ์ด๊ณ ์ด์์ ์ผ๋ก๋ PR์ ๋ณด๋ด์ญ์์ค.
๋ค์์ ์ต์ํ์ ์ฌํ ๊ฐ๋ฅํ ์์ (iOS ์ฅ์น์์ ํ ์คํธ ๋จ)์ด๋ฉฐ, ์์์ ๊ณต์ ๋ @woodpav์ ์ผ๋ถ ์ฝ๋๊ฐ ์๋จ์ ์ฃผ์ ์ฒ๋ฆฌ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋์์ต๋๋ค : https://snack.expo.io/@notbrent/netinfo -repro.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@ robertodias180 ์ ์์ ๋ฐ๋ฅด๋ฉด isConnected์ ๋ํ ๋ํผ๋ฅผ
์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ํ๋์ง ๊ถ๊ธํฉ๋๋ค.