Xamarin IOS facebook auth

时间:2015-10-15 09:48:29

标签: ios facebook xamarin

我是xamarin移动开发的新手。我在Xamarin ios项目中对facebook auth有疑问。

我在后端有webapi,它有外部登录方法(ExternalLogin,RegisterExternal等)。据我所知,我不应该使用我的webapi,我应该使用https://components.xamarin.com/view/facebookios中的组件。

它工作正常,据我所知,它适用于webview。问题是在注册外部用户之前我需要更多关于用户的信息来获取用户应该由他自己输入的用户电话。

我在第一个视图控制器的mainstoryboard中使用导航控制器我有按钮“Facebook auth”,点击用户后转到FacebookAuthViewController我有3个文本字段(姓氏,姓名,电话号码)。当用户访问此viewcontroller时,我想要下一个魔术用户将看到facebook auth页面,在获得访问令牌后,他将看到3个文本字段(姓氏,姓名,电话号码),我将从他的Facebook帐户填写姓氏和姓名。电话号码用户应该自己输入。当我在视图控制器上添加3个输入并且没有将Name绑定到文本字段时它工作(首先用户在成功认证后看到带有facebook auth的webview他看到三个输入文本框),但是当我为任何输入字段键入名称时webview没有出现并在Facebook Auth按钮上单击主窗口后,我只看到3个文本字段。我做错了什么? 在默认构造函数中,我接下来做:

        _fb = new FacebookClient();
        nsUrl = new NSUrl(GetFacebookLoginUrl(AppId, ExtendedPermissions));

        // We delete cache and cookies so it does not remember our login information
        DeleteCacheandCookies();

        web = new UIWebView(UIScreen.MainScreen.ApplicationFrame)
        {
            BackgroundColor = UIColor.White,
            AutoresizingMask = UIViewAutoresizing.All,
        };

        web.LoadStarted += (webview, e) =>
        {
            NetworkActivity = true;
            //FacebookLoader.Hidden = true;
        };

        web.LoadFinished += (webview, e) =>
        {
            NetworkActivity = false;
            //FacebookLoader.Hidden = false;
            var wb = webview as UIWebView;
            FacebookOAuthResult oauthResult;
            if (!_fb.TryParseOAuthCallbackUrl(new Uri(wb.Request.Url.ToString()), out oauthResult))
            {
                return;
            }

            if (oauthResult.IsSuccess)
            {
                web.Hidden = true;
                // Facebook Granted Token
                var accessToken = oauthResult.AccessToken;
                //NavigationController.PushViewController(new FacebookRegisterViewController(), true);
                LoginSucceded(accessToken);
            }
            else
            {
                // user cancelled login
                LoginSucceded(string.Empty);
            }
        };

        web.LoadError += (webview, args) =>
        {
            NetworkActivity = false;
            //FacebookLoader.Hidden = false;
            if (web != null)
                web.LoadHtmlString(
                    String.Format("<html><center><font size=+5 color='red'>{0}:<br>{1}</font></center></html>",
                               "An error occurred: ", args.Error.LocalizedDescription), null);
        };

        View.AddSubview(web);
        web.LoadRequest(NSUrlRequest.FromUrl(nsUrl));

0 个答案:

没有答案