0

我正在尝试关注Prabir 关于 Facebook 身份验证的博客文章,并将其改编为基于 Xamarin Android 的应用程序。我有一个登录页面,其中定义了以下代码来生成 URL;

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);
}

在创建视图时,我调用此方法并将其分配给 WebView 元素:

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 时,会提示在外部打开浏览器(在 Chrome|Firefox|Opera 选项中打开),而不是通过绑定到 LoginActivity 的视图中定义的 WebView 控件登录。我不知道这里发生了什么,以及为什么会这样。如何在 webview 控件、应用程序本身而不是外部显示请求?

4

1 回答 1

1

因此,听起来系统 URL 处理正在妨碍您。你需要做的是WebViewClient在你的WebView. 这将允许您trueshouldOverrideUrlLoading(我相信这是默认设置)返回,然后允许您的应用程序加载请求的资源。

WebViewClient具体请参阅此处的相关文档shouldOverrideUrlLoading。但外卖是

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

在基于 http 的 URI 的情况下,肯定是系统浏览器。

于 2013-07-02T05:42:10.930 回答