Builder/Appgyver

[Appgyver] 휴대폰 GPS값을 이용한 날씨 정보 조회 (2편)

꼰대 2021. 6. 11. 21:08

1편 마지막에서 언급했듯이 GPS 좌표값을 못가져 왔을 때를 대비해 네트워크 정보를 통해 좌표값을 가져와 OpenWeather에 보내는 로직을 추가하겠습니다.

2021.06.11 - [Builders/Appgyver] - [Appgyver] 휴대폰 GPS값을 이용한 날씨 정보 조회 (1편)

 

[Appgyver] 휴대폰 GPS값을 이용한 날씨 정보 조회 (1편)

Appgyver가 어렵긴 하지만 지원하는 옵션들이 많아 이것저것 만들어 볼 수 있습니다. 이번에는 GPS 좌표를 이용한 현재 위치의 날씨 정보를 조회하여 보여주는 앱을 만들어 보겠습니다. 우선 날씨

ggondae.tistory.com

 

먼저 네트워크 정보로 좌표값을 주는 곳은 아래와 같습니다.

https://ipwhois.app/

 

IP Geolocation API - IPWHOIS.io

Free IP Geolocation and IP Location Lookup API

ipwhois.io

 

회원가입이나 API KEY가 필요하지 않고 요청 URL로 간단하여 쉽게 이용이 가능합니다.

그럼 Data Resource를 추가합니다. 상단 DATA 메뉴를 클릭하고 우측 ADD DATA RESOURCE > REST API direct intergration을 선택합니다.

적당한 ResourceID를 정의하고 ResourceURL에 https://ipwhois.app/json/ 을 입력합니다. 

 

좌측 메뉴 GET COLLECTION (GET)에서 Method enabled를 선택해서 해제하고 GET RECORD (GET)을 선택하여 TEST탭을 클릭하고 RUN TEST를 진행합니다.

 

응답값 중 latitude, longitude 값을 확인할 수 있습니다. 이제 SET SCHEMA FROM RESPONSE를 눌러 스키마를 저장합니다.

 

이제 변수를 생성합니다. DATA를 클릭하여 창을 닫고 상단 VARIABLE를 선택합니다. 우측 상단 ADD DATA VARIABLE을 선택하고 새로 추가한 Data Resource를 선택합니다.

다음으로 우측 Data variable type에서 Single data record를 선택합니다. 이 변수는 현재 네크워크 위치의 GPS 좌표값을 조회하여 저장하는 변수입니다.

 

다음으로 네트워크를 통해 조회된 좌표값으로 OpenWeather을 조회하는 변수를 만들겠습니다. 저 같은 경우 휴대폰 GPS 좌표 입력값이 NULL일 경우 네트워크로 조회된 좌표값 넣으면 되지 않나? 생각했지만 아니더군요.

일단 휴대폰 GPS 좌표값으로 조회되는 getWeatherGPS의 경우 Get record 시 입력 받는 변수가 하나로 휴대폰에서만 받게 되어 있어 불가능합니다.

결론은 별도로 만들어줘야 합니다.

 

우측 ADD DATA VARIABLE을 클릭하여 변수를 하나 생성하고 Data variable type는 Single data record로 선택, GPS 좌표값은 위에서 설정한 getIpGPS에서 받는 좌표값을 넣습니다. 또한 NUMBER형 변수이므로 formula를 통해 형변환 합니다.

 

다음으로 해당 변수의 로직을 약간 변경해야합니다. 왜냐하면 화면에서 값을 불러올 때 GPS 좌표값이 없으면 네트워크 좌표값으로 조회하는데 휴대폰 GPS 좌표값을 불러와 처리하는 속도가 더 빨라 프로세스가 일찍 끝나버립니다. 따라서 페이지 마운트 후 약간의 딜레이를 줘야 합니다.

아래 그림과 같이 마운트 후 1초 Delay 후 Get record를 진행합니다.

 

이제 변수 설정은 끝났고 화면에서 값을 넣을 때 GPS 좌표값이 NULL이여서 조회된 값도 NULL일 경우 (실내에 있어서 GPS 좌표값을 못 받아와도 Appgyver의 GPS 모듈은 정상값으로 NULL을 리턴합니다. 에러가 나지 않습니다.) 네트워크 좌표값으로 조회하는 formula를 정의해야 합니다.

화면으로 돌아와 최상단 도시이름 값을 선택합니다. 우측 content 버튼을 클릭하고 formula를 선택해서 아래와 같이 입력합니다.

IF(IS_UNDEFINED(data.getWeatherGPS.name), data.getWeatherIP.name, data.getWeatherGPS.name)

휴대폰 GPS 좌표값으로 조회한 데이터 (getWeatherGPS)가 undefined이면 (IS_NULL은 안됩니다.) 네트워크 좌표값으로 조회한 데이터 (getWeatherIP)를 표시하고 아니면 getWearher로 조회된 데이터를 표시한다는 내용입니다.

나머지 값들도 위와 같은 패턴으로 모두 변경합니다.

 

이제 저장하고 앱을 실행해보면 지금 위치가 실내이며 기존에 읽은 좌표값을 통해 날씨 정보를 출력합니다.

 

이제 휴대폰을 재부팅하여 기존 GPS값을 없애고 네트워크 좌표값으로 조회되는지 확인해보겠습니다.

위치 도시와 온도가 다른 값이 조회됩니다.

반응형