我解決了這個問題。
首先,如果您從應用程序中心製作移動應用程序,則不需要client_secret。
我將代碼URLConnection更改爲HttpClient。 URLConnection更簡單,但不起作用。
添加的gradle從這個Android的代碼使用的HttpClient
useLibrary 'org.apache.http.legacy'
,並更改代碼Downloadurl新代碼
public String executeClient() {
ArrayList<NameValuePair> post = new ArrayList<NameValuePair>();
post.add(new BasicNameValuePair("client_id", getString(R.string.client_id)));
post.add(new BasicNameValuePair("redirect_uri", r_uri));
// post.add(new BasicNameValuePair("client_secret", getString(R.string.client_secret)));
post.add(new BasicNameValuePair("code", code));
post.add(new BasicNameValuePair("grant_type", "authorization_code"));
// 연결 HttpClient 객체 생성
HttpClient client = new DefaultHttpClient();
// 객체 연결 설정 부분, 연결 최대시간 등등
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 5000);
// Post객체 생성
HttpPost httpPost = new HttpPost("https://login.live.com/oauth20_token.srf");
HttpGet httpget = new HttpGet("https://login.live.com/oauth20_token.srf");
try {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(post, "UTF-8");
// UrlEncodedFormEntity entity = new UrlEncodedFormEntity(post, "UTF-8");
httpPost.setEntity(entity);
// Log.d(TAG, "executeClient: " + entity);
HttpResponse hr = client.execute(httpPost);
//HttpResponse hr = client.execute(httpget);
HttpEntity resEntitiy = hr.getEntity();
String x = EntityUtils.toString(resEntitiy);
Log.d(TAG, "executeClient: " + x);
return x;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
,我用StringRequest代替JsonObjectRequset
StringRequest tokenRequest = new StringRequest(Request.Method.POST, uurl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("반응1", response.toString());
JsonAccessTokenExtractor jate = new JsonAccessTokenExtractor();
accessToken = jate.extractAccessToken(response.toString());
refreshToken = jate.extractRefreshToken(response.toString());
MainActivity.editor.putString("access_token", accessToken);
MainActivity.editor.putString("refresh_token", refreshToken);
MainActivity.editor.apply();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("반응1", error.toString());
Log.d("반응1", ""+error.networkResponse.headers.toString());
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("client_id", getString(R.string.client_id));
params.put("redirect_uri", r_uri);
params.put("refresh_token", MainActivity.sharedPreferences.getString("refresh_token", "hi"));
params.put("grant_type", "refresh_token");
Log.d(TAG, params.toString());
return params;
}
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
};