0

我正在尝试允许我的 android 应用程序中的用户登录到他们的 google 帐户,以便我可以访问他们的联系人以创建朋友列表,并且我正在尝试使用 OAuth 来执行此操作。到目前为止,我已经形成了 URL 并创建了加载页面的 webview。我继续登录,但我不知道如何将 URL 中的代码分配给我活动中的代码值。我也不知道我的 Onpagestarted 方法是否正常工作

有人可以告诉我使用 OAuth2 向 google 进行身份验证的替代方法/技术,或者告诉我当前方式有什么问题,因为一旦我到达带有代码的页面,我的视图仍然是 WebView 而不是带有代码的 textview我想要吗?

在用户登录到我的 WebView 中的谷歌页面后,我想自动化整个过程,但到目前为止,我的代码一直卡在带有 Authcode 的页面上,这让我相信我的程序没有检测到 Authcode。

注意:我不想简单地使用登录到 Android 设备的帐户(除非用户显然选择输入相同的帐户)

这是 Activity 中的代码,我想在其中获取 Auth Code/Token 并为我的用户获取联系人,尽管我不介意在以后的活动中显示联系人。

WebView browser;
final String username = "gotsingh@gmail.com";
 private myWebViewClient client;
String code;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_friends);
    browser = (WebView) findViewById(R.id.webview);
    client = new myWebViewClient();
    WebSettings webSettings = browser.getSettings();
    webSettings.setJavaScriptEnabled(true);
    browser.setWebViewClient(client);
    getAuthCode(client);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.add_friends, menu);
    return true;

}


public void getAuthCode(myWebViewClient myClient){
    browser.loadUrl(url4);
    while (myClient.authCode!= null){
    showCode(myClient);}
}

public void showCode(myWebViewClient myClient){
        code = myClient.authCode;
        TextView text = new TextView(this);
        text.setText(code);
        setContentView(text);
}

下面是我修改后的 WebViewClient 类

public class myWebViewClient extends WebViewClient{
boolean authComplete = false;

String authCode = null;

@Override public void onPageStarted(WebView view, String url, Bitmap favicon){
    super.onPageStarted(view, url, favicon);
    if (url.contains("?code=") && authComplete != true) {

        int codeStart = url.indexOf("?code=")+6;


        authCode = url.substring(codeStart);    

        Log.i("", "AUTHCODE : " + authCode);
        authComplete = true;

        System.out.println(authCode);

    }else if(url.contains("error=access_denied")){
        Log.i("", "ACCESS_DENIED_HERE");
        authComplete = true;
    }


   }

}

另外,如果我能获得一些关于在 java 中执行 POST/GET 请求以从谷歌接收 JSON 数据的一般指导。我对 android 开发非常陌生,处理 html/http 请求的经验接近 0。

4

1 回答 1

0

看看这个样本。它不反对谷歌,但原则是一样的。您可能需要考虑在 OAuth 中使用“隐式”流程来避免在设备中存储机密。

于 2013-07-18T16:16:49.207 回答