检索Facebook用户的电子邮件,Xamarin.Forms

时间:2017-09-19 06:44:27

标签: facebook-graph-api xamarin xamarin.forms

我有一个应用程序,要求用户通过Facebook登录。我需要检索用户的电子邮件,但是当我尝试获取它时应用程序会中断:System.NullReferenceException:对象引用未设置为对象的实例。我检查了我的Facebook帐户,看看我的电子邮件是否可供公众访问,而且不确定为什么它会返回空值。这是我的代码:

 public FacebookRender()
        {

            String error;
            var activity = this.Context as Activity;

            var auth = new OAuth2Authenticator(
                clientId: "",
                scope: "",
                authorizeUrl: new Uri("https://www.facebook.com/dialog/oauth/"),
                redirectUrl: new Uri("https://www.facebook.com/connect/login_success.html")
                );

            auth.Completed += async (sender, eventArgs) =>
                {
                    try
                    {
                        if (eventArgs.IsAuthenticated)
                        {
                            await AccountStore.Create().SaveAsync(eventArgs.Account, "FacebookProviderKey");

                            var accessToken = eventArgs.Account.Properties["access_token"].ToString();
                            var expiresIn = Convert.ToDouble(eventArgs.Account.Properties["expires_in"]);
                            var expiryDate = DateTime.Now + TimeSpan.FromSeconds(expiresIn);

                            var request = new OAuth2Request("GET", new Uri("https://graph.facebook.com/me?fields=email,first_name,last_name,gender,picture"), null, eventArgs.Account);
                            var response = await request.GetResponseAsync();
                            var obj = JObject.Parse(response.GetResponseText());

                            var id = obj["id"].ToString().Replace("\"", "");
                            var name = obj["first_name"].ToString().Replace("\"", "");
                            var surname = obj["last_name"].ToString().Replace("\"", "");
                            var gender = obj["gender"].ToString().Replace("\"", "");
                            var email = obj["email"].ToString().Replace("\"", "");



                            App.NavigateToProfile(string.Format(name));


                        }
                        else
                        {
                            App.NavigateToProfile("Invalid Login");
                        }
                    }
                    catch(Exception ex)
                    {
                        error = ex.Message;
                    }
                };
            activity.StartActivity(auth.GetUI(activity));
        }

0 个答案:

没有答案