Android 谷歌单一登录+;不使用客户经理

Android 谷歌单一登录+;不使用客户经理,android,authentication,webview,gmail,google-oauth,Android,Authentication,Webview,Gmail,Google Oauth,我正在尝试在我的一个应用程序中使用Google+登录。我正在使用WebView登录用户,在获取auth令牌后,我想获取一些用户信息,如姓名、电子邮件地址等 我知道的情景 但我希望用户使用WebView登录,成功登录后,我希望他的电子邮件id作为信息,而不是使用已经存储的帐户 我正在尝试以下短代码。但我得到了401个例外java.io.IOException:未经授权 WebView webView = (WebView) findViewById(R.id.webView); webView.g

我正在尝试在我的一个应用程序中使用Google+登录。我正在使用
WebView
登录用户,在获取
auth
令牌后,我想获取一些用户信息,如姓名、电子邮件地址等

我知道的情景

但我希望用户使用
WebView
登录,成功登录后,我希望他的电子邮件id作为信息,而不是使用已经存储的帐户

我正在尝试以下短代码。但我得到了401个例外<代码>java.io.IOException:未经授权

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();
        }
    }
}
WebView-WebView=(WebView)findViewById(R.id.WebView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(“http://mail.google.com");
setWebViewClient(新的WebViewClient(){
@凌驾
public void onPageStarted(WebView视图、字符串url、位图favicon){
//TODO自动生成的方法存根
super.onPageStarted(视图、url、favicon);
Log.d(“主页”,“Url:+Url”);
字符串requestToken=“”;
if(url.contains(“auth=”)){
requestToken+=url.substring(url.indexOf(“auth=”)+5);
Log.d(“主页”,“请求令牌:”+requestToken);
请求URL=”https://www.googleapis.com/oauth2/v1/userinfo?access_token="
+请求令牌;
view.stopLoading();
新建CustomThread().start();
}
}
公共void onPageFinished(WebView视图,字符串url){
//Log.d(“主页”,“Url:+Url”);
//Log.d(“Home”,view.getUrl());
}
});
公共类CustomThread扩展线程{
@凌驾
公开募捐{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpResponse响应;
试一试{
response=httpClient.execute(新的HttpGet(requestUrl));
StatusLine StatusLine=response.getStatusLine();
if(statusLine.getStatusCode()==HttpStatus.SC\u OK){
ByteArrayOutputStream out=新建ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
Log.d(“Home”,“Response:+out.toString());
CookieSyncManager.getInstance().sync();
//从饼干罐里拿饼干。
字符串cookie=CookieManager.getInstance().getCookie(
请求URL);
if(cookie==null){
Log.d(“Home”,“Cookie为空”);
返回;
}
//Cookie是一个类似NAME=VALUE[;NAME=VALUE]的字符串
String[]pairs=cookie.split(“;”);
对于(int i=0;i
对于Google+登录来说,使用PlusClient要容易得多,而不是使用WebView,然后一切都以本机体验运行。请参见我使用使用以下代码执行此操作

SocialAuthAdapter adapter = new SocialAuthAdapter(new ResponseListener());

imgGoogle.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        adapter.authorize(YourActivity.this, Provider.GOOGLE);
    }
});

private final class ResponseListener implements DialogListener {
    @Override
    public void onComplete(Bundle values) {
        //successful authentication..
    }

    @Override
    public void onError(SocialAuthError error) {
        error.printStackTrace();
    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onBack() {

    }
}