2011-01-07 6 views
5

webview가 포함 된 애플리케이션이 있습니다. webview에서 사용자는 기본 로그인 버튼과 인증을 사용하여 Facebook에 로그인해야합니다. 내 webview에서 사용자가 oauth 핸드 셰이크 URL에 로그인 한 후 "액세스가 거부되었습니다 ... 사용자가 요청을 거부했습니다"오류가 있습니다. 그러나 코어 브라우저에서 동일한 URL을 방문하면 모든 것이 예상대로 작동하고 사용자가 성공적으로 로그인하게됩니다. WebViewClient 또는 WebChromeClient에서 구현해야하는 몇 가지 메소드가 있다고 가정합니다. 그러나, 나는 무엇을 해야할지 모른다. 생각?Android WebView with Facebook 로그인

+0

이봐 .. 당신이 이제까지 발견 솔루션 등의 콘텐츠를 보여 주었다? 나는 비슷한 문제에 직면하고 있지만 해결할 수있는 좋은 자원을 찾을 수 없다. –

+0

코드 샘플을 추가 할 수 있습니까? –

답변

2

잘 구현을 위해 페이스 북 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; 
     }