2017-09-19 4 views
1

firebase cloud messaging을 사용하여 푸시 알림을 보내려고합니다. 공유 환경 설정에서 액세스 토큰을 성공적으로 저장했습니다.발리를 사용하여 firebase 푸시 알림 보내기

서버로 요청을 보내기 위해 발리 (Volley)를 사용하고 있지만 요청 (Volley)은 요청을 보낸 후 com.android.volley.Server 오류을 표시합니다.

참고 : 요청의 본문에 전달 된 액세스 토큰이 같은 (현재) 사용자이기 때문에 난 그냥 같은 장치에 중포 기지 푸시 알림을 보내고

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    String token= Helper.getAccessToken(this); 
    if(token!=null){ 
     sendRequest(); 
    } 

} 

private void sendRequest() { 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 

    String url= "https://fcm.googleapis.com/fcm/send"; 
    StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();//Here ServerError shows 
     } 
    }) 
    { 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      HashMap<String,String> params = new HashMap<>(); 
      String accessToken = Helper.getAccessToken(MainActivity.this); 
      params.put("to",accessToken); 
      params.put("title", "This is string message"); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String,String> header = new HashMap<>(); 
      header.put(""Authorization,"key=" + "Here is my server key"); 
      header.put("Content-Type","application/json"); 
      return header; 
     } 
    } 
      ; 

      requestQueue.add(request); 
} 

답변

0

나는 아래의 코드에서 문제가 있다고 생각 : -

@Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     HashMap<String,String> params = new HashMap<>(); 
     String accessToken = Helper.getAccessToken(MainActivity.this); 
     params.put("to",accessToken); 
    //change this 
     params.put("notification", "This is string message"); 
     return params; 
    } 
+0

변경 한 후에도 동일한 오류가 발생합니다. –

+0

어떤 오류가 있습니까? 푸시 알림을위한 장치 토큰을 가지고 있는지 확인하십시오. –

+0

com.android.volley.ServerError, 예 밀어 넣기 알림을위한 액세스 토큰이 있습니다. –

2

단순한 POST 작업을하기에는 다소 과장된 것처럼 보입니다. 이 작업을 수행하려면 OkHTTP와 같은 것을 사용하는 것이 더 좋을 것이라고 생각합니다. 매우 간단한 POST 작업이어야합니다.

private void sendRequestByOk() { 
    final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 
    new AsyncTask<Void,Void,Void>(){ 

     @Override 
     protected Void doInBackground(Void... voids) { 
       OkHttpClient client = new OkHttpClient(); 
       JSONObject json = new JSONObject(); 
       JSONObject jsonData = new JSONObject(); 
       try { 
        jsonData.put("body","Hi!! This is the message from device"); 
        jsonData.put("title","dummy title"); 
        json.put("notification",jsonData); 
        json.put("to",Helper.getAccessToken(MainActivity.this)); 

        RequestBody body = RequestBody.create(JSON,json.toString()); 
        okhttp3.Request request = new okhttp3.Request.Builder() 
          .header(AUTHORIZATION_KEY,AUTH_VALUE) 
          .url("https://fcm.googleapis.com/fcm/send") 
          .post(body) 
          .build(); 

        okhttp3.Response response = client.newCall(request).execute(); 
        String finalResponse = response.body().string(); 
       // Toast.makeText(MainActivity.this, finalResponse,Toast.LENGTH_SHORT).show(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
       } 
       return null; 
     } 
    }.execute(); 
}