好的,所以使用xamarin mvvmcross。试图创建一个使用pcl项目的跨应用程序android ios应用程序。
我正在尝试在pcl项目中本地保存用户数据。是否有捷径可寻?
我尝试使用AccountStore.Create()但得到以下内容:
便携式诱饵和开关是nuget功能,因此必须在所有项目中安装包。 NotImplementedException将指示使用来自PCL的可移植代码而不是特定于平台的实现。请检查平台特定组件是否已正确安装。无法在便携式个人资料中保存帐户 - 咬合和切换错误。请在https://bugzilla.xamarin.com
中提交错误我是否必须使用sqllite dbs在本地存储数据而不是accoutstore内容?
答案 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