GCM(Google cloud message) third party server를 python으로 짜기
내가 처음 만든 GCM 써드파티 서버는 PHP로 만든 서버였다. (사실 서버라고 하기엔 민망한 것이 웹서버에다가 PHP 파일 하나 올려서 이용하던 서서버였다.) 당시 gcm 검색을 하면 대부분이 써드파티 서버를 PHP로 만들어 놓은 예제들이였기 때문이다. 그 후 Python으로 다시 만들려는 시도를 하긴 했었으나 잘 안되서 오늘에서야 진짜 Python으로 포팅을 하게 되었다.
gcm third party server python 뭐 이런식으로 검색을 하면 생각 밖으로 자료들이 잘 안 나온다. 내가 서버 쪽으로는 지식이 미비해서 그런 것일 수도 있지만.... 어쨌든 GCM 써드파티 서버에서 해줘야 할 것은 꽤 심플하기 때문에 원리를 잘 파악하기만 하면 어떤 언어로 만들든 상관 없다. 중요한 것은 HTTP Post에다 api key 같은 것들과 헤더, 그리고 정해진 형식에 맞게 JSON 데이터를 넣어주는 것이니깐. 내가 이 부분을 몰라서 헤맸었는데 결국 오늘 해낸 것이다! (고수분들에게는 식은 죽 먹기지만.)
소스는 아래와 같다.
import urllib2
import json
url = 'https://android.googleapis.com/gcm/send'
apiKey = 'AIza....' # 본인의 api key
myKey = "key=" + apiKey
regid = 'APA....' # 기기의 registration id
# make header
headers = {'Content-Type': 'application/json', 'Authorization': myKey}
# make json data
data = {}
data['registration_ids'] = (regid,)
data['data'] = {'data':'i love changong'}
json_dump = json.dumps(data)
# print json.dumps(data, indent=4)
req = urllib2.Request(url, json_dump, headers)
result = urllib2.urlopen(req).read()
print json.dumps(result)
api key나 registration id가 무엇인지는 당연히 알겠지? 보면 상당히 심플한 소스인 것을 알 수 있는데 테스트용으로 내 디바이스에 gcm 메세지가 잘 오는지 안 오는지만 확인하기 위한 소스이기 때문이다. 뭔가 변명하는 것 같지만.... 이걸 좀 더 범용적으로 사용하기 위해서는 소스 변경이 필요할 것이다. 특정 registration id을 찾는 작업, json data 부분에 본인이 원하는 형식으로 데이터를 넣는 작업 등 말이다.