2015-01-27 7 views
0

이 코드는 Android 디바이스에서 푸시 알림을 보내는 데 사용됩니다. http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/ 그 작품. 하지만 그들은 서버 측에서 PHP를 사용하고 있습니다. 내 서버 쪽은 JAVA입니다. 그래서 나는 그것을 위해 jUnit 테스트를 만들려고 노력하고있다. 그래서 내 서버는 푸시 알림을 보냅니다. 그러나 나는 그것에 대해 모른다. 나는 post 메서드로 시도했지만 작동하지 않았다. 401 오류가 발생했습니다.jUnit 테스트를 사용하여 서버 측에서 푸시 알림을 보내는 방법

String regID = "";

 pairs.add(new BasicNameValuePair("registration_ids",regID)); 
     pairs.add(new BasicNameValuePair("data","test")); 
     pairs.add(new BasicNameValuePair("key","my key")); 

     String url = "https://android.googleapis.com/gcm/send"; 

     String data = makePostCall(url, pairs); 

제발 나에게 제발 제안 해주세요.

답변

0

잘못된 매개 변수를 전달 중입니다. 헤더와 본문이어야합니다. 이것은 내가 사용하고 일하는 좋은 방법입니다.

public class SendPushNotification { 

public static void main(String[] arg){ 
    PushNotification pushNoti = new PushNotification(); 

    //collect the device_tokens into JSONArray. 
    // device_tokens is the tokens of user where we needs to send the push Messages. 

    String id = "APA9******WVWA"; 

    JSONArray deviceTokenArray = new JSONArray(); 
    // if you want to send more than one device then you have to 
    // add more ids into JSONArray by using put method. 
    deviceTokenArray.put(id); 
    try { 
     pushNoti.sentPushIntoAndroid(deviceTokenArray, "I Love to my sister and sending a push message in Android Device"); 

    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

그리고 이것은 HTTPHeader 및 HTTPBody를 사용하는 다른 클래스입니다.

public class PushNotification { 

public void sentPushIntoAndroid(JSONArray device_token, String message) 
     throws JSONException { 


    HttpPost httppost = new HttpPost("https://android.googleapis.com/gcm/send"); 

    StringEntity stringentity = new StringEntity(generateJSONBodyForHTTPBody(device_token, message).toString(), "UTF-8"); 

    httppost.addHeader("Content-Type", "application/json"); 
    httppost.addHeader("Authorization", "key=AI**********Mo""); 

    httppost.setEntity(stringentity); 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response; 
    try { 
     response = httpclient.execute(httppost); 

     HttpEntity entity = response.getEntity(); 

     String strresponse = null; 
     if (entity != null) { 
      strresponse = EntityUtils.toString(entity); 

      displayLog("HTTP Response ", strresponse); 
     } 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

private JSONObject generateJSONBodyForHTTPBody(JSONArray device_token, String message) throws JSONException { 

    JSONObject jObj = new JSONObject(); 
    jObj.put(CommonUtilities.REGISTRATION_ID, device_token); 

    JSONObject dataJson = new JSONObject(); 

//NOTE:- In Client side, you have to retrieve below param by using getBundle().getString("id") like it. so it will retrieve the id and do for other params too like as i did for id. 
    dataJson.put("id", "testingID"); 
    dataJson.put("type", "testingType"); 
    dataJson.put("imglink", "testingimgLink"); 
    dataJson.put("seolink", "testingseoLink"); 
    dataJson.put("msg", "Lata Bhulli"); 

    jObj.put("data", dataJson); 

    displayLog("JSONObject", jObj.toString()); 

    return jObj; 
} 

private void displayLog(String tag, String message) { 
    System.out.println(tag+" "+message); 
} 

참고 : - 당신은 당신이 다음 빌드 경로에있는 모든 폴더 추가 libs가에서 사용되는 최신 HTTP 라이브러리 등을 사용하는 것보다 컴파일 에러를 받고있는 경우.