2019년 10월 31일 목요일

react-native-webrtc ICE candidates 이상증상

시스템 구성 환경

  1. 서버 : janus-gateway
  2. 클라이언트
    • react-native
    • react-native-webrtc
  3. STUN 서버
    • google
  4. 테스트 Mobile
    • 갤럭시 S9+
    • Android 9


이상 증상에 따른 대처 내용 들

  1. 발견
    • 로컬 로그 분석
    • 서버 로그 분석
    • 분석 결과 onicecandidate 의 데이터가 부족한것으로 확인
    • Android 로그 분석
    • react-native-webrtc 에서 dependency 하고 있는 org.webrtc 에서 오류 뿜뿜
    • ICE candidate 데이터 교환 이상은 org.webrtc 에서 발생 하는 오류로 확인
  2. 처리
    • Unable to obtain permission to request a cellular network. 로그 발생
      • Android 의 시스템 작성 권한이 없어서 발생 하는 로그 로 확인
      • <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 추가해주고 수동으로 앱 설정의 시스템 권한 부여 함으로 해결. 추후 사용자에게 알림 진행 후 설정 화면으로 이동하여 부여 하도록 안내 해야 함.
      • 직접적인 request 후 해당 권한을 부여 할수있는 prcess 가 없음. 안드로이드의 가이드에 의하면 설정화면으로 보내서 사용자에게 수동으로 권한 부여하도록 안내 해야 함.
    • Null interface name for network. 로그 발생
      • 실질적은 문제는 요놈 이었다.
      • org.webrtc.NetworkMonitorAutoDetect.java.java 에 보면 networkToInfo method 가 있는데 name 가져오다 오류 발생 해서 ICE candidate 정보에 누락이 발생 한 것이다.
      • 처리 방법은 뭐 더 찾아 볼 예정.



2019년 10월 16일 수요일

spring boot deploy to jboss issues

상황

  1. spring boot 프로젝트를 jar 디플로이로 생성한다.
  2. 임베디드 톰캣 쓰다가 jboss 로 디플로이를 위해 war 로 변경한다.
  3. war 변경 잘 됐고 jboss 에 war 올려서 테스트 해본다.
  4. 오잉. class 파일 로드가 안된다.
  5. context-path 가 이상한가? index.html 파일로 테스트 해본다. 잘 됨.
  6. 음..뭐지.. spring boot 생성 시 war 디플로이로 선택 해서 해본다.
  7. war 말아서 jboss 올려보니 잘 된다. 뭐징..
  8. pom.xml 및 각종 설정 class 들 다 뒤져서 비교 해본다. 다른데 없다.
  9. 이런 XX 뭐가 잘못 된거야!
  10. jboss 에 디플로이 target 폴더 뒤져 본다.
  11. 잘 돌아가는 놈은 WEB-INF/classes 안에 class 파일들 있다... ㅠㅠ
  12. eclipse 의 .settings 들어가서 설정 파일들 비교 해본다.
  13. 빙고! org.eclipse.wst.common.component 파일에 deploy path 가 다르다!!

처리
  1. 프로젝트 properties -> Deployment Assembly -> java, resources 의 Deploy Path 를 'WEB-INF/classes' 로 변경한다.

깨달은 것

  • 무조건 구글링 하지말고 기초를 생각해자 ㅋ


끝!

이거 찾느라 4시간 걸림 휴..

아참. 임베디드 톰캣 scope 설정하는거나 war 파일 설정하는건 다른 블로그들에 많음

react-native 처음 사용하는 친구들에게

안녕하세요?
React-Native RN 은 처음이지?
CLI 로 할때 오류 나서 접고 싶지?
ㅇㅇ 나도 처음에 힘들었음.
근데 계속 하다보면 무슨 오류인지 보임.

예를 들어 Windows OS 환경에서
react-native run-android 명령 날리면
어쩔때는 한방에 build 되는데 (라이브러리 설치 등의 오류 없다는 가정 하에)
어쩔때는 Could not read path 등
read, delete 못한다고 하면서 안될때 있음.
이럴때는 그냥 무시하고 될때까지
react-native run-android 커맨드 날리샘.
그러다 보면 build 성공 함. ㅋㅋ
음.. build thread 가 한 tread 로 돈다고는 하는데
아마도 폴더에 lock 걸려서 그러는게 아닌가 싶기도 하고..

Mac OS 로 하면 저런 오류 안보이긴 함.

그냥 Mac 사서 하샘. ㅎ

은 아니고 나중에 찾아보니까 android clean 시키는게 있더라
역시 공부 해야 함... 무지했어... ㅋㅋ
project 폴더 내 android 폴더에서
gradlew clean 한번씩 날려주면 windows 에서도 오류 안남.

2019년 10월 14일 월요일

react-native background process

react-native 에서 background 작업을 찾아보면
react-native-backgroud-task 가 많이 나오는데
해당 라이브러리는 Android 28 에서 사용 불가능 하다.

background-fetch 를 사용하는
https://github.com/transistorsoft/react-native-background-fetch
를 사용하도록.

Android, IOS 모두 가능.

단 IOS 는 OS 단에서 사용자 패턴을 분석하여 background fetch 를 하는데
설명에 의하면 그냥 기다리랜다
설치하고 몇일 있으면 잘 작동 한다고... ㅋㅋ


주의사항
1. IOS 에서는 30s 이내에 프로세스 finish 신호가 없으면 자동으로 종료 처리 함.
2. 예제에는 forceReload 옵션 없음. 넣어서 android 테스트 진행.
   android 에서 forceReload deprecated 되었다고 headless 쓰라네
   https://github.com/transistorsoft/react-native-background-fetch/issues/179

react-native app icon, splash image auto make

https://github.com/bamlab/react-native-make

사이즈에 맞게 이미지 생성 후 command 날리면
자동으로 android, ios 만들어줌.
개꿀.

-- 19.10.16 추가
RN cli 0.60 대버전에서 오류남.
1.0.2 버전으로 처리.
yarn add -D @bam.tech/react-native-make@1.0.2


-- 19.10.17 추가
Android 의 패키지를 변경할 경우
android/app/src/main/java/... 하위 폴더가 패키지 명을 따라 변경 되는데
splash screen 설정시 자동으로 react-native project 기본 패키지 명을 찾아가 MainActivity.java 파일을 변경 하려고 한다.
음.. 패키지 변경 하면서 설정값들은 다 바꿔 준것 같은데 해당 라이브러리가 어떤값 참고 하는지를 모르겠네
우선 변경 전 폴더로 MainActivity.java 파일 복사 하고 수정 하게 해준 다음 내용 옮김.
ex)
android/app/src/main/java/com.xxxx.xxxx.test/MainActivity.java 를
android/app/src/main/java/test/MainActivity.java 로 복사 후 수정 하게 해줌.