2012-06-29 2 views
1

C2DM을 대체하기 위해 새로운 GCM 서비스를 사용하기 위해 앱의 특정 부분을 정밀 조사하고 있습니다. 간단히 테스트를 위해 Java 프로그램에서 JSON 요청을 작성한 다음 응답을 읽는 것입니다. 현재로서는 JSON 요청에 대한 형식 문제를 찾을 수 없으며 Google 서버는 항상 내 JSON에 문제가 있음을 나타내는 코드 400을 반환합니다. http://developer.android.com/guide/google/gcm/gcm.html#server새로운 GCM 용 Android HttpsURLConnection 및 JSON

JSONObject obj = new JSONObject(); 
    obj.put("collapse_key", "collapse key"); 
    JSONObject data = new JSONObject(); 
    data.put("info1", "info_1"); 
    data.put("info2", "info 2"); 
    data.put("info3", "info_3"); 
    obj.put("data", data); 
    JSONArray ids = new JSONArray(); 
    ids.add(REG_ID); 
    obj.put("registration_ids", ids); 
    System.out.println(obj.toJSONString()); 

내가 이클립스 콘솔에 내 요청이

내가 그 오류 401 발생하는 것처럼 내 API 키가 올바른지 확신을 포맷하는 것 확인하기 위해 인쇄, 그래서 구글 문서를 말한다 . JSON을 처음 사용하는 것이지만 간단하기 때문에 이해하기 쉽습니다. 누구든지 내가 항상 코드 400을받는 이유에 대한 아이디어가 있습니까?

업데이트 : gcm에 제공된 Google 서버 예제 클래스를 테스트 했으므로 문제는 내 코드와 반드시 일치해야합니다.

{"collapse_key":"new-test-notification","data":{"info1":"info_1","info3":"info_3","info2":"info 2"},"registration_ids":["APA91bG3bmCSltzQYl_yOcjG0LPcR1Qemwg7osYJxImpSuWZftmmIjUGH_CSDG3mswKuV3AAb8GSX7HChOKGAYHz1A_spJus5mXFtfOrK0fouBD7QBpKnfc_ly0t3S8vSYWRjuGxtXrt"]} 
+0

나는 내가 개발자 콘솔 검사에서 구글 서비스에 등록되지 않았 음을 의미 옛 C2DM으로이 문제를했을 때 : 1. 콘솔에서 프로젝트를 창조 하셨 는가? 2. 개발자 콘솔에서 프로젝트에 대한 Google 클라우드 서비스를 사용 설정 했습니까?3.i는 유효한 API 키가있는 trival이라고 가정합니다. – codeScriber

+0

요청의 JSON 문자열을 게시 할 수 있습니다. temp1.toJSONString()의 출력 내용 만 출력하면됩니다. – azgolfer

+0

방금 ​​JSON String으로 업데이트되었습니다. 고마워, 아직도이 문제가있다 –

답변

1

다른 접근법을 사용하여 해결 했으므로 원래 구현 된 것이 틀림 없습니다.

List<NameValuePair> list = new ArrayList<NameValuePair>(); 
     list.add(new BasicNameValuePair("username",username)); 
     list.add(new BasicNameValuePair("deviceId",regId)); 
     list.add(new BasicNameValuePair("deviceType","AndroidPhone")); 
     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost("example.url.com"); 
     post.setEntity(new UrlEncodedFormEntity(list)); 
     ResponseHandler<String> handler = new BasicResponseHandler(); 
     HttpResponse response = client.execute(post); 
     String responseString = handler.handleResponse(response); 
     JSONObject jsonResponse = new JSONObject(responseString); 
+0

handler.handleResponse (응답)의 응답은 무엇입니까? 그것은 서버에서 응답을 처리하는 콜백 함수입니까? 샘플 코드를 게시 할 수 있습니까? 감사 – CuriousCoder

0

나는 당신이 우리가 제거 할 수 컬 또는 다른 명령 줄 도구를 사용하여 오류를 재현하기 위해 (주석) GCM with PHP (Google Cloud Messaging)

+0

서버 앱의 핵심 요소와 반대되는 점은 무엇입니까? 시도해 보겠습니다. –

0

시도 '브라우저 애플 리케이션을위한 키'당신을 사용해야 여기 읽고 있어요 자바에 우리가 모두 빠져있는 버그가 있다는 가능성.