2011-01-07 157 views
5

我有一个包含webview的应用程序。在webview中,用户必须使用默认登录按钮和身份验证登录到Facebook。在我的webview中,用户登录后oauth握手url包含“拒绝访问...用户拒绝您的请求”错误。但是,当我在核心浏览器中访问相同的URL时,一切都按预期工作,并且用户成功登录。我假设我需要在WebViewClient或WebChromeClient中实现一些方法,以使我的webview具有完整的浏览器功能。但是,我不知道该怎么做。思考?Android WebView与Facebook登录

+0

这嘿..你有没有找到解决办法?我面临着类似的问题,但找不到任何好的资源来解决它。 – 2012-06-18 09:43:03

回答

2

那么你可以使用facebook SDK来实现。

基本上在网页视图他们已经表明他们的内容是这样

private void setUpWebView(int margin) { 
     LinearLayout webViewContainer = new LinearLayout(getContext()); 
     mWebView = new WebView(getContext()); 
     mWebView.setVerticalScrollBarEnabled(false); 
     mWebView.setHorizontalScrollBarEnabled(false); 
     mWebView.setWebViewClient(new FbDialog.FbWebViewClient()); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl(mUrl); 
     mWebView.setLayoutParams(FILL); 
     mWebView.setVisibility(View.INVISIBLE); 
     mWebView.getSettings().setSavePassword(false); 

     webViewContainer.setPadding(margin, margin, margin, margin); 
     webViewContainer.addView(mWebView); 
     mContent.addView(webViewContainer); 
    } 

    private class FbWebViewClient extends WebViewClient { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      Util.logd("Facebook-WebView", "Redirect URL: " + url); 
      if (url.startsWith(Facebook.REDIRECT_URI)) { 
       Bundle values = Util.parseUrl(url); 

       String error = values.getString("error"); 
       if (error == null) { 
        error = values.getString("error_type"); 
       } 

       if (error == null) { 
        mListener.onComplete(values); 
       } else if (error.equals("access_denied") || 
          error.equals("OAuthAccessDeniedException")) { 
        mListener.onCancel(); 
       } else { 
        mListener.onFacebookError(new FacebookError(error)); 
       } 

       FbDialog.this.dismiss(); 
       return true; 
      } else if (url.startsWith(Facebook.CANCEL_URI)) { 
       mListener.onCancel(); 
       FbDialog.this.dismiss(); 
       return true; 
      } else if (url.contains(DISPLAY_STRING)) { 
       return false; 
      } 
      // launch non-dialog URLs in a full browser 
      getContext().startActivity(
        new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     }