应用程序需要谷歌刷新令牌,我尝试基于谷歌OAuth2 doc调用服务。
https://developers.google.com/identity/protocols/OAuth2InstalledApp
步骤5:交换刷新和访问令牌的授权码
服务投掷例外。
" java.io.FileNotFoundException: https://www.googleapis.com/oauth2/v4/token"
使用服务,如:
POST / oauth2 / v4 / token HTTP / 1.1主机:www.googleapis.com Content-Type: 应用程序/ x-WWW窗体-urlencoded
代码= 4 / P7q7W91a-oMsCeLvIaQm6bTrgtp7&安培; CLIENT_ID = your_client_id&安培; client_secret = your_client_secret&安培; REDIRECT_URI = https://oauth2.example.com/code& grant_type = authorization_code
示例代码:
class getTokenAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String JsonResponse = "";
BufferedReader reader = null;
HttpURLConnection urlConn;
try {
URL url = new URL("https://www.googleapis.com/oauth2/v4/token");
String client_id = "******9-tt3qav2d2rp45sgjqp5helrsbvc22kdq.apps.googleusercontent.com";
String client_secret = ""; //This value is not needed for clients registered as Android, iOS, or Chrome applications.
String redirect_uri = "http://localhost";
String grant_type = "authorization_code";
String code = params[0]; // serverAuthCode code
HashMap<String, String> params1 = new HashMap<String, String>();
params1.put("client_id", client_id);
params1.put("client_secret", client_secret);
params1.put("grant_type", grant_type);
params1.put("redirect_uri", redirect_uri);
params1.put("code", code); // your code received
Set set = params1.entrySet();
Iterator i = set.iterator();
StringBuilder postData = new StringBuilder();
for (Map.Entry<String, String> param : params1.entrySet()) {
if (postData.length() != 0) {
postData.append('&');
}
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postDataBytes);
reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null; ) {
builder.append(line).append("\n");
}
reader.close();
conn.disconnect();
System.out.println("token returned: " + builder.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
请建议我,如何在Android应用程序中调用服务并收到刷新令牌ID。
答案 0 :(得分:0)
conn.setRequestMethod("GET");
应该是
conn.setRequestMethod("POST");
因为您正在发送发帖请求。