アプリケーションの 1 つでGoogle+ にログインしようとしています。WebView
ユーザーのログインに使用していますauth
。トークンを取得した後、名前、メールアドレスなどのユーザー情報を取得したいと思います。
AccountManagerのシナリオを知っています。
しかし、既に保存されているアカウントを使用する代わりに、ユーザーに を使用してログインしてWebView
もらい、ログインに成功した後、彼の電子メール ID を情報として取得します。
私は短いコードをたどろうとしています。しかし、401例外が発生しています。java.io.IOException: Unauthorized
WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://mail.google.com");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
Log.d("Home", "Url :" + url);
String requestToken = "";
if (url.contains("auth=")) {
requestToken += url.substring(url.indexOf("auth=") + 5);
Log.d("Home", "Request Token : " + requestToken);
requestUrl = "https://www.googleapis.com/oauth2/v1/userinfo?access_token="
+ requestToken;
view.stopLoading();
new CustomThread().start();
}
}
public void onPageFinished(WebView view, String url) {
// Log.d("Home", "Url :" + url);
// Log.d("Home", view.getUrl());
}
});
public class CustomThread extends Thread {
@Override
public void run() {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response;
try {
response = httpClient.execute(new HttpGet(requestUrl));
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
Log.d("Home", "Response : " + out.toString());
CookieSyncManager.getInstance().sync();
// Get the cookie from cookie jar.
String cookie = CookieManager.getInstance().getCookie(
requestUrl);
if (cookie == null) {
Log.d("Home", "Cookie is Null");
return;
}
// Cookie is a string like NAME=VALUE [; NAME=VALUE]
String[] pairs = cookie.split(";");
for (int i = 0; i < pairs.length; ++i) {
String[] parts = pairs[i].split("=", 2);
// If token is found, return it to the calling activity.
if (parts.length == 2
&& parts[0].equalsIgnoreCase("oauth_token")) {
Log.d("Home", "Token :" + parts[1]);
}
}
} else {
Log.d("Home", "Error : " + statusLine.getStatusCode());
// Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}