관리 메뉴

180bpm

클라이언트의 접속지역 정보를 Rest API로 받아오기. 본문

Develop/Web ETC

클라이언트의 접속지역 정보를 Rest API로 받아오기.

powdersnow 2015. 9. 16. 12:36
반응형

1. 이슈

어제, 지금 만드는 게임의 배포국가가 추가되었다.

기존 뉴질랜드, 싱가폴, 필리핀에서 + 캐나다.


이에 따라, 캐나다에 웹서버를 한대 더 두기로 결정을 했는데 클라이언트에서는 지역에 따라 A 서버와 B 서버를 구분해서 접속을 시도해야하는 기능을 구현해야 한다.



2. 방법 모색 & 문제점

- SIM 정보를 가져와서 처리

-> SIM 정보를 얻어 올 수 없는 경우가 많다. (타블렛등)


- 핸드폰의 언어 정보를 가져와서 처리

-> 한국인인데 영어를 쓰는 경우 생각보다 많다.


- 지금 사용중인 akamai에서 area 정보를 받아서 처리

-> 정보를 알려줄 방법이 없다고 한다..


3. Geo IP

ip 찾는 사이트 보면 내가 접속한 지역을 찍어주는 기능이 있는데, 이걸 우리도 쓸 수 있지 않을까 해서 찾아봤다. Geo IP 라는 기능이 있다고 한다.

http://php.net/manual/kr/book.geoip.php


설치하고 셋팅해줘야 한다고 한다.

일단 지금은 셋팅 할 시간도 없고 해서


4.http://www.telize.com/

구글링 검색은 "how to find ip address region json data"

GeoIP를 rest API로 내려주는 사이트 몇몇개가 있는데 telize.com으로 선택

이유는

-> 무료

-> 콜 수 제한 없음


나중에 우리서버에 구축을 해야하나..? 란 생각이 들었는데 이건 알아서 업데이트 해줄거 같으니 그때 가서 생각하기로.

기부를 받고 있으니 감사하게 생각하시면 기부를.

서버 개발자의 하루 일당 정도를 줘도 괜찮지 않을까.


5. 사용법

매우 씸플하다.

유니티의 WWW 클래스에 담아서 리스폰스 메시지를 json으로 파싱.

private IEnumerator getGeoIP()
    {
        WWW www = new WWW("http://www.telize.com/geoip");
 
        while (!www.isDone)
        {
            yield return new WaitForSeconds(0.1f);
        }
 
        SimpleJSON.JSONNode node = SimpleJSON.JSONNode.Parse(www.text);
 
        Debug.Log(node);
    }


{"dma_code":"0","ip":"x.xx.xxx.xxx","asn":"AS3786","city":"Seoul","latitude":37.5985,"country_code":"KR","offset":"9","country":"Korea, Republic of","region_code":"11","isp":"안알랴쥼ㅋ","timezone":"Asia\/Seoul","area_code":"0","continent_code":"AS","longitude":126.9783,"region":"Seoul-t'ukpyolsi","country_code3":"KOR"}


우리에게 필요한건 country_code (국가코드)랑 continent_code(대륙코드)

대륙코드의 값은 PHP 레퍼런스에서 확인 할 수 있다.

http://php.net/manual/kr/function.geoip-continent-code-by-name.php


북미+남미 / 아시아 에 따라 주소만 다르게 넣어주면 끝.


끝!



반응형
Comments