除非单击“注销”,否则保持用户登录到xamarin.forms应用程序

除非单击“注销”,否则保持用户登录到xamarin.forms应用程序,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我正在为我的应用程序使用xamarin.forms。它允许用户通过facebook登录。我在应用程序中添加了一个注销按钮,只需导航回登录页面,但我注意到,当我退出我的应用程序而不按下注销按钮时,应用程序会在登录页面上恢复,导致用户每次必须重新打开应用程序时都会继续输入其登录详细信息。当用户关闭并重新打开应用程序时,我如何保持其登录?对此,如有任何指导,我们将不胜感激 App.cs主页是我的登录页面 FacebookRender 用户登录后出现的页面 App.cs-更新 public App()

我正在为我的应用程序使用xamarin.forms。它允许用户通过facebook登录。我在应用程序中添加了一个注销按钮,只需导航回登录页面,但我注意到,当我退出我的应用程序而不按下注销按钮时,应用程序会在登录页面上恢复,导致用户每次必须重新打开应用程序时都会继续输入其登录详细信息。当用户关闭并重新打开应用程序时,我如何保持其登录?对此,如有任何指导,我们将不胜感激

App.cs主页是我的登录页面

FacebookRender

用户登录后出现的页面

App.cs-更新

public App()
        {
            App.Current.Properties["UserDetail"] = Settings.Token;
            InitializeComponent();
            var isLoggedIn = Current.Properties.ContainsKey("UserDetail");
            if (!isLoggedIn)
            {
                MainPage = new NavigationPage(new MainPage());
            }
            else
            {
                App.Current.MainPage = (new Profile());
            }

        }

在每次应用程序启动时,您都会加载主页。您必须有条件地加载第一页

Forms实现将键值数据存储在应用程序的本地存储器中的方法

登录时:

成功登录后,将真值存储在应用程序的本地存储器中的某个键(如IsLoggedIn)中,如下所示:

Application.Current.Properties ["IsLoggedIn"] = Boolean.TrueString;
在App Launch App.cs上

注销时:

注销时,将假值存储在IsLoggedIn本地存储密钥中,然后清除导航堆栈并加载主页

存储用户详细信息:

要存储设置类对象值,请将其序列化为Json字符串对象,并将其存储在其他一些键中,例如Application.Current.Properties中的UserDetail。 当您需要返回此数据时,请从本地存储获取数据,并对其进行反序列化和使用

Store:App.Current.Properties[UserDetail]=JsonConvert.SerializeObjectSettings; 检索:设置userData=JsonConvert.DeserializeObjectApp.Current.Properti‌​es[用户详细信息]

编辑

Current.Properties.ContainsKey只检查存储中是否存在某个密钥。它不检查值是否存在。在访问任何键值之前,必须检查该键值是否存在

静态类无法序列化,所以您需要创建该类的单例实例,然后访问该单例实例进行序列化


希望这会有帮助

我通过使用设置插件解决了这个问题。很好用

非常感谢你。我已经试过了,现在当用户登录时它会打开正确的页面,但是,根据用户的登录详细信息应该显示的数据没有显示出来。我怎样才能解决这个问题?当用户通过facebook登录时,我有一个设置类来检索这些详细信息并将其存储在应用程序中使用。请检查我的编辑,我已经添加了它。当我按下后退按钮时,它确实保留了存储的数据,但当应用程序完全关闭,我重新进入应用程序时,所有数据都消失了,我再次进入登录页面。当你登录时,你应该直接加载下一页作为主页。登录后不要推下一页,而是直接将下一页分配给App.MainPage。登录页面不必保留在导航堆栈中。好的,谢谢,当用户首次登录应用程序时,我的设置值已序列化和反序列化。请检查我的编辑,我已经这样做了,但仍然不起作用:您只是将令牌值存储到UserData密钥中。不,您必须将整个设置对象像App.Current.Properties[UserDetail]=JsonConvert.SerializeObjectSettings一样存储到其中;并像设置userData=JsonConvert.DeserializeObjectApp.Current.Properties[UserDetail]那样将其取回;
namespace LoyaltyWorx
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class Profile : MasterDetailPage
    {
        public List<MasterPageItem> menuList { get; set; }
        public Profile()
        {
            InitializeComponent();
            this.lblMessage.Text = Settings.Name + " " + Settings.Surname;
            menuList = new List<MasterPageItem>();
            var page1 = new MasterPageItem() { Title = "Home", Icon = "home.png", TargetType = typeof(Page1) };
            var page2 = new MasterPageItem() { Title = "Cards", Icon = "card.png", TargetType = typeof(Cards) };
            var page3 = new MasterPageItem() { Title = "Transactions", Icon = "settings.png", TargetType = typeof(Transactions) };
            var page4 = new MasterPageItem() { Title = "My Profile", Icon = "profile.png", TargetType = typeof(UpdateProfile) };
            var page5 = new MasterPageItem() { Title = "Log out", Icon = "signout.png", TargetType = typeof(MainPage) };



            menuList.Add(page1);
            menuList.Add(page2);
            menuList.Add(page3);
            menuList.Add(page4);
            menuList.Add(page5);


            navigationDrawerList.ItemsSource = menuList;
            Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(Page1)));

        }
        private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var item = (MasterPageItem)e.SelectedItem;
            Type page = item.TargetType;

            Detail = new NavigationPage((Page)Activator.CreateInstance(page));
            IsPresented = false;
        }

    }
}
 public static class Settings
    {
        public static string Token;
        public static int CustId;
        public static string Name;
        public static string Surname;
        public static string Email;
        public static string MobileNo;
        public static string PhoneNo;


    }
public App()
        {
            App.Current.Properties["UserDetail"] = Settings.Token;
            InitializeComponent();
            var isLoggedIn = Current.Properties.ContainsKey("UserDetail");
            if (!isLoggedIn)
            {
                MainPage = new NavigationPage(new MainPage());
            }
            else
            {
                App.Current.MainPage = (new Profile());
            }

        }
Application.Current.Properties ["IsLoggedIn"] = Boolean.TrueString;
public App()
{
    InitializeComponent();
    bool isLoggedIn = Current.Properties.ContainsKey("IsLoggedIn") ? Convert.ToBoolean(Current.Properties["IsLoggedIn"]) : false;
    if (!isLoggedIn)
    {
        //Load if Not Logged In
        MainPage = new NavigationPage(new MainPage());
    }
    else
    {
        //Load if Logged In
        MainPage = new NavigationPage(new YourPageToLoadIfUserIsLoggedIn());
    }
}
Application.Current.Properties ["IsLoggedIn"] = Boolean.FalseString;