2013-07-02 2 views
0

Prabir's blog post about Facebook authentication을 따르고 Xamarin Android 기반 애플리케이션에 적용하려고합니다. URL을 생성하도록 정의 된 다음 코드가있는 로그인 페이지가 있습니다. 뷰의 생성에Android Facebook C# 로그인이 내부적으로로드되지 않습니다.

private Uri GenerateLoginUrl(string appId, string extendedPermissions) 
{ 
    var parameters = new Dictionary<String, Object>(); 

    parameters.Add("client_id", appId); 
    parameters.Add ("redirect_uri", "https://www.facebook.com/connect/login_success.html"); 
    parameters.Add("response_type", "token"); 

    parameters.Add("display", "popup"); 

    if (!string.IsNullOrWhiteSpace(extendedPermissions)) 
     parameters.Add("scope", extendedPermissions); 

    var fb = new FacebookClient(); 
    return fb.GetLoginUrl(parameters); 
} 

, 나는이 방법을 호출하고 웹보기 요소에 할당 : 뷰에서

var browser = this.FindViewById<WebView>(Resource.Id.LoginView); 
Uri url = GenerateLoginUrl("<app id>", ""); 
browser.LoadUrl (url.ToString()); 

, 나는 정의 된 다음 한 :

<WebView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/LoginView" /> 

때 LoadUrl이 호출되면 LoginActivity에 연결된 내보기에 정의 된 WebView 컨트롤을 통해 로그인하지 않고 외부에서 브라우저를 열라는 메시지가 표시됩니다 (Chrome | Firefox | Opera 옵션에서 열림). 나는 여기서 무슨 일이 일어나고 있는지, 왜 이런 일이 일어나고 있는지 모른다. 요청을 웹 뷰 컨트롤 내에서, 응용 프로그램 자체 내에서 그리고 외부에서 표시하지 않으려면 어떻게해야합니까?

답변

1

시스템 URL 처리가 방해 받고있는 것 같습니다. 당신이해야 할 일은 WebViewWebViewClient을 설정하는 것입니다. 이것은 trueshouldOverrideUrlLoading (나는 이것이 기본이라고 생각한다)에서 돌려 줄 것이다. 그러면 요청 된 리소스가 애플리케이션에 의해로드 될 수있다.

자세한 내용은 WebViewClient, shouldOverrideUrlLoading의 관련 문서를 참조하십시오. 그러나 테이크 아웃은 HTTP 기반 URI의 경우, 가장 확실하게 시스템 브라우저가 될 것

If WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the url.

입니다.

+0

흥미 롭습니다. 나는 그것을 오늘 밤에 시험 할 것이다. 고마워. –

+0

그게 전부 고마워요! –

관련 문제