2014-05-17 4 views
1

내 Android 용 푸시 알림 메커니즘을 구현하고 있습니다.App engnine이있는 Python 서버의 푸시 알림

지금은 HTTP를 통해 GCM으로 푸시 알림을 보내고 android 클라이언트에서 successfuly 받기 위해 관리하는 것을보기 위해 작은 테스트를 실행하려고합니다.

클라이언트 코드는 정확히 구글의 튜토리얼과 같다 다음 messags을 처리하기위한 등록하거나 검색하기위한 책임이 DemoActivity라는 주요 활동이있다 이미 등록 ID를 존재 http://developer.android.com/google/gcm/client.html

, 2 개의 클래스 GcmIntentService 및 GcmBroadcastReceiver 책임 GCM 서버에서 앱으로 이동합니다.

물론 SENDER_ID를 올바르게 설정 했으므로 클라이언트 앱 등록 ID를 얻을 수 있습니다.

난 항상 다음과 같은 오류를받을 서버에서 : 서버에 대한 지금

은 보안상의 이유로

url = "https://android.googleapis.com/gcm/send" 
    headers = { 'Content-Type' : 'application/json', 'Authorization': 'key=' + SERVER_API_KEY } 
    values = { 'registration_ids': [CLIENT_REGID] 
    , 'data': {'test': 'test} } 


    data = urllib.urlencode(values) 
    req = urllib2.Request(url, json.loads(values), headers) 
    response = urllib2.urlopen(req) 
    the_page = response.read() 
    self.response.out.write(the_page) 

내가 서버를 생략 :

HTTP Error 401: Unauthorized 

이 내 서버 코드 api 키와 클라이언트 등록 ID (하드 코딩 됨)가 있지만 이중 및 삼중 검사를하면 정확합니다. 또한 서버 API 키가 올바르게 구성되었는지 (자격 증명 -> 새 키 만들기 -> 서버 키) "모든 IP 허용"을 확인했습니다.

인터넷에서 발견 한 모든 해결책은 서버 API 또는 이와 유사한 내용의 실수와 관련이 있지만 이미 확인했습니다. 헬퍼에게 감사드립니다!

편집 :

은 헤더에 '키 ='를 추가했지만 지금은 잘못된 요청 오류받을 (HTTP 코드 400)

또 다른 편집 :

이 값은 ABIT 객체 및 보냈 변경 json.loads을 사용하지만 클라이언트에서이 오류가없는 (마침내! 서버에서 통지를 받으면에 의미) :

Unable to instantiate receiver GcmBroadcastReceiver 

어떤 아이디어? 나는 샘플 프로젝트를 그대로 구글에서 복사 했으므로 여기에 무엇이 잘못되었는지 전혀 모른다.

+0

당신이있는 경우 클라이언트의 문제, 클라이언트 코드 (매니 페스트, 브로드 캐스트 리시버)를 게시하십시오. – Eran

답변

2

auth header should be합니다 (key= 부분을 참고) :

Authorization:key=<your_key_here> 

때문에이 같은 헤더를 설정해야합니다

headers = { 'Content-Type' : 'application/json', 'Authorization': 'key='+SERVER_API_KEY } 
+0

감사합니다. 그러나 코드 고정 후 HTTP 오류 400 : 잘못된 요청을받습니다. 어떤 생각? – Jjang

1

json을 예상하도록 서버에 알릴 때 urlencoded 페이로드를 보내는 것이 문제라고 생각합니다. 문자열로, JSON 객체에 데이터를 변경해보십시오 : data ="{ 'registration_ids':...}"

+0

값 개체를 urlencoded 개체로 변환하고 그대로 보낸 줄은 생략했지만 여전히 작동하지 않습니다.또한 json.dumps를 사용하려고했지만 여전히 잘못된 요청 오류가 발생했습니다. 코드 예제를 보여 주시겠습니까? – Jjang