sumini dev

posts

[React Native] Android Release버전에서 fetch가 작동하지 않는 현상 (해결)

profile-image

Choi su min

오늘 SkyCloset의 Release버전을 처음으로 테스트해봤는데,

SplashScreen에서 HomeScreen으로 화면전환이 되지 않았다.

원인을 살펴본 결과 _getWeather() 함수에서 isLoaded state를 true로 업데이트 해주지 못하고 있었다.

this.fetch_retry(`http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?stationName=${json5.list[0].stationName}&dataTerm=daily&ServiceKey=${airkoreaKey}&ver=1.0&_returnType=json`, 10)
  .then(response6 => response6.json())
  .then(json6 => {
    this.props.onSetDust(json6.list[0]);
    this.setState({isLoaded: true}); // 작동 안 함!!
  })
})
문제의 코드

2020/09/19 추가 : 문제가 정말 많은 코드네요.. 😱


검색결과 Android Pie부터 HTTP 연결이 막혔다고한다!! 참고링크

하지만 다행히도 수동으로 특정 URL에 대한 접근을 허용할 수 있다.

특정 URL에 대한 HTTP request 허용하는 법

android/app/src/main/res/xml/network_security_config.xml 파일을 다음과 같이 생성한다.

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
        <domain includeSubdomains="true">insecure.example2.com</domain>
    </domain-config>
</network-security-config>

(insecure.example.com 부분에 접속할 url을 입력하면된다.)


android/app/src/main/res/AndroidManifest.xml 파일에 다음 코드를 추가해준다.

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">

추가)

아래와 같은 방법으로 모든 url에 대한 http 접속을 허용할 수 있으나, 보안상의 이유로 추천하지 않는다.

<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

Ref


REACT-NATIVE8개 더보기

모든 글 보기

다음 글

[React Native] Failed to capture fingerprint of output files for task ':app:processDebugResources' property 'sourceOutputDir' (fixed)

profile-image

Choi su min

Sogang Univ.

AWESOME.DEV Lead

Anyang, Gyeong-gi, Republic of Korea

github-iconmail-iconrss-icon