在Xamarin.Forms项目中,我想使用Xamarin.Auth来安全地存储和检索Account对象。请注意,我不会考虑与Facebook、谷歌或任何其他提供端到端oAuth登录体验的服务集成。
如果你只想安全存储对象,那么XLabs。平台有ISecureStorage接口,该接口适用于iOS、Android和Android;WP。如果您使用Forms,我建议您从NuGet安装XLabs.Forms包,然后使用Ioc(XLabs.Ioc)将实现注入PCL代码。您还可以使用XLabs.Serialization使用Json.NET、ServiceStack或ProtoBuffer等其他序列化程序(可作为XLabs.Sserialization插件使用)对字节进行序列化/反序列化。
https://github.com/XLabs/Xamarin-Forms-Labs/blob/master/src/Platform/XLabs.Platform/Services/ISecureStorage.cs
https://www.nuget.org/packages?q=XLabs
Xamarin论坛正在讨论这个主题。你可能想看看那里的线程。
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 ();
2019年,您可以使用Xamarin.Essentials的SecureStorage来存储帐户信息。在引擎盖下,它使用平台标准:iOS上的Keychain,Android上的Keystore。因此,它还支持备份到云,但也需要权限。
https://learn.microsoft.com/en-us/xamarin/essentials/secure-storage
此外,Xamarin.Auth中的AccountStore现在已被弃用,他们建议现在使用Xamarin.Essentials中的SecureStorage。