Xamarin pcl存储用户数据如何?

时间:2017-05-02 05:46:32

标签: android ios xamarin.ios

好的,所以使用xamarin mvvmcross。试图创建一个使用pcl项目的跨应用程序android ios应用程序。

我正在尝试在pcl项目中本地保存用户数据。是否有捷径可寻?

我尝试使用AccountStore.Create()但得到以下内容:

便携式诱饵和开关是nuget功能,因此必须在所有项目中安装包。 NotImplementedException将指示使用来自PCL的可移植代码而不是特定于平台的实现。请检查平台特定组件是否已正确安装。无法在便携式个人资料中保存帐户 - 咬合和切换错误。请在https://bugzilla.xamarin.com

中提交错误

我是否必须使用sqllite dbs在本地存储数据而不是accoutstore内容?

2 个答案:

答案 0 :(得分:0)

使用此插件 https://www.nuget.org/packages/Xam.Plugins.Settings/ 这使用平台特定方法(如android中的共享首选项)而不使用sqlite来存储数据。

答案 1 :(得分:0)

出于安全原因,我不建议将其存储在SharedPreferences或本地Sqlite数据库中。

在核心项目中,您应该拥有安全服务,如下所示:

namespace CustomerMobile.Core.Services.Interfaces
{
    public interface ISecureStorageService
    {
        void Store(string key, string value);
        void Delete(string key);
        string GetValue(string key);
    }
}

然后,对于Android项目,我推荐Plugin.SecureStorage nuget包。实现应该如下所示:

namespace CustomerMobile.Droid.Services
{
    public class SecureStorageService : ISecureStorageService
    {
        public SecureStorageService()
        {
            SecureStorageImplementation.StoragePassword = "security_password";
        }

        public void Delete(string key)
        {
            CrossSecureStorage.Current.DeleteKey(key);
        }

        public string GetValue(string key)
        {
            return CrossSecureStorage.Current.GetValue(key);
        }

        public void Store(string key, string value)
        {
            CrossSecureStorage.Current.SetValue(key, value);
        }

    }
}

最后,这个适用于iOS,我推荐使用Square.Valet nuget包:

namespace CustomerMobile.iOS.Services
{
    public class SecureStorageService : ISecureStorageService
    {
        private const string _userKey = "GlobalApp";

        public void Delete(string key)
        {
            var valet = new Valet(_userKey, Accessibility.WhenUnlocked);

            valet.RemoveObject(key);
        }

        public void Store(string key, string value)
        {
            var valet = new Valet(_userKey, Accessibility.WhenUnlocked);

            valet.SetString(value, key);
        }

        public string GetValue(string key)
        {
            string value = string.Empty;

            var valet = new Valet(_userKey, Accessibility.WhenUnlocked);

            value = valet.GetString(key);

            return value;
        }
    }
}

参考文献: 代客Nuget套餐:Square.Valet

Android SecureStorage:SecureStorage