如何使用Xamarin.Forms与Xamarin.Auth存储和检索Account对象

时间:2015-02-25 00:02:57

标签: c# xamarin.ios xamarin xamarin.forms xamarin.auth

在Xamarin.Forms项目中,我想使用Xamarin.Auth来安全地存储和检索Account对象。请注意,我没有考虑与Facebook,Google或任何其他提供端到端oAuth登录体验的服务集成。

3 个答案:

答案 0 :(得分:2)

如果您只是在安全存储对象之后,那么XLabs.Platform具有ISecureStorage接口,该接口适用于iOS,Android和iPad。 WP。如果您正在使用Forms,我建议从NuGet安装XLabs.Forms包,然后使用Ioc(XLabs.Ioc)将实现注入PCL代码。您还可以使用XLabs.Serialization来序列化/反序列化使用Json.NET,ServiceStack或其他序列化程序(如ProtoBuffer)(可用作XLabs.Serialization插件)的字节。

https://github.com/XLabs/Xamarin-Forms-Labs/blob/master/src/Platform/XLabs.Platform/Services/ISecureStorage.cs

https://www.nuget.org/packages?q=XLabs

答案 1 :(得分:1)

Xamarin论坛正在讨论这个主题。您可能需要查看thread there

Xamarin.Auth不是PCL和平台特定的。您需要使用自定义渲染器。首先为您的登录创建一个表单页面:

public class LoginPage : ContentPage
{
}

然后为平台实现它,例如iOS:

[assembly: ExportRenderer (typeof (LoginPage), typeof (LoginPageRenderer))]

namespace Demo.XForms.iOS
{
    public class LoginPageRenderer : PageRenderer
    {
        public override void ViewDidAppear (bool animated)
        {
            base.ViewDidAppear (animated);

            var auth = new OAuth2Authenticator (
                clientId: ...,
                scope: "basic",
                authorizeUrl: new Uri ("..."),
                redirectUrl: new Uri ("..."));

            auth.Completed += (sender, eventArgs) => {
                DismissViewController (true, null);
                if (eventArgs.IsAuthenticated) {
                    App.SaveToken(eventArgs.Account.Properties["access_token"]);
                } else {
                    // The user cancelled
                }
            };

            PresentViewController (auth.GetUI (), true, null);
        }
    }
}

有了这个,你可以在Forms中使用它:

this.MainPage = new LoginPage ();

答案 2 :(得分:1)

在2019年,您可以使用 Xamarin.Essentials 中的 SecureStorage 存储帐户信息。在后台,它使用平台标准:iOS上的Keychain,Android上的Keystore。因此,它还支持备份到云,但也需要权限。

https://docs.microsoft.com/en-us/xamarin/essentials/secure-storage

AccountStore in Xamarin.Auth is deprecated now还建议他们现在使用Xamarin.Essentials的SecureStorage。