0

I'm doing the oauth2 for google i'm able to getting the authorization code but i can't able to get the accesstoken from the authorization code.

i'm getting invalid json_response like

{

"error":"invalid_client"
}   

I have tried with by updating the product name of the application. by this solution. But it not helped.

Here is the code to obtain the get the AccessToken. GetAccessToken

public class GetAccessToken {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
public GetAccessToken() {}
List < NameValuePair > params = new ArrayList < NameValuePair > ();
Map < String, String > mapn;
DefaultHttpClient httpClient;
HttpPost httpPost;
public JSONObject gettoken(String address, String token, String client_id, String client_secret, String redirect_uri, String grant_type) {
    // Making HTTP request
    try {
        // DefaultHttpClient
        httpClient = new DefaultHttpClient();
        httpPost = new HttpPost(address);
        params.add(new BasicNameValuePair("code", token));
        params.add(new BasicNameValuePair("client_id", client_id));
        params.add(new BasicNameValuePair("client_secret", client_secret));
        params.add(new BasicNameValuePair("redirect_uri", redirect_uri));
        params.add(new BasicNameValuePair("grant_type", grant_type));
        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
        httpPost.setEntity(new UrlEncodedFormEntity(params));
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
            is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
        Log.e("JSONStr", json);
    } catch (Exception e) {
        e.getMessage();
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    // Parse the String to a JSON Object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }
    // Return JSON String
    return jObj;
}}

Code to parse the json_response.

TokenGet.class

 private class TokenGet extends AsyncTask < String, String, JSONObject > {
     private ProgressDialog pDialog;
     String Code;@
     Override
     protected void onPreExecute() {
         super.onPreExecute();
         pDialog = new ProgressDialog(MainActivity.this);
         pDialog.setMessage("Contacting Google ...");
         pDialog.setIndeterminate(false);
         pDialog.setCancelable(true);
         Code = pref.getString("Code", "");
         pDialog.show();
     }@
     Override
     protected JSONObject doInBackground(String...args) {
         GetAccessToken jParser = new GetAccessToken();
         JSONObject json = jParser.gettoken(TOKEN_URL, authCode, CLIENT_ID, CLIENT_SECRET, REDIRECT_URI, GRANT_TYPE);
         return json;
     }@
     Override
     protected void onPostExecute(JSONObject json) {
         pDialog.dismiss();
         if (json != null) {
             try {
                 String tok = json.getString("access_token");
                 String expire = json.getString("expires_in");
                 String refresh = json.getString("refresh_token");
                 Log.d("json", json.toString());
                 Log.d("Token Access", tok);
                 Log.d("Expire", expire);
                 Log.d("Refresh", refresh);
                 auth.setText("Authenticated");
                 Access.setText("Access Token:" + tok + "\nExpires:" + expire + "\nRefresh Token:" + refresh);
             } catch (JSONException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
         } else {
             Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show();
             pDialog.dismiss();
         }
     }
 }

Give Me,Any Suggestion...

Community
  • 1
  • 1
user12378334
  • 117
  • 1
  • 14

1 Answers1

0

Ok, i had some troubles like you using AsyncTask:

So, i recommend you to use VolleY, its very easy to do what you are doing with this library...

I think your problema is that you are not using the correct Charset... try adding this to your code:

httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

if it doesnt work, lets me know...

If you are interested to use Volley lets me know.... i am not an expert, but i can help you, actually i am using this.

Max Pinto
  • 1,463
  • 3
  • 16
  • 29