我是Xamarin的新手。
在我的Xamarin Forms应用程序中,我只想在满足条件的情况下通过推送通知通知用户(即使应用程序在后台)。用户在注册时由用户选择条件。
目前,我使用SQL Lite在手机上本地存储该选项。
在我的应用程序中,我通知用户的速度至关重要。在接收到通知时我必须检查该条件,因此我将用户的选择从本地数据库中拉出来以查看是否要通知它们,但这可能需要几秒钟。
是否有更快的方法来检索该选择/条件,这是一种替代方法,而不仅仅是将其存储在本地db文件中?这些首选项必须适用于PCL以及Android和iOS项目。
先感谢您。
Xamarin Forms有一个内置的Properties字典,可用于存储简单类型
bool myKey;
// retrieve value
if (Application.Current.Properties.Exists("mykey")) {
myKey = (bool)Application.Current.Properties["mykey"];
}
//set value if it already exists in Dictionary
Application.Current.Properites["mykey"] = myKey;
// or add it if it doesn't
Application.Current.Properties.Add("mykey",myKey);
// properties will auto-save, but you can force save with
await Application.Current.SavePropertiesAsync();
您可以使用@MichaelMontero提到的SharedPreferences。您需要将其实现到Android / iOS / UWP。然后使用依赖服务将其检索到您的shared / pcl / netstandard代码。
通过Android简单实现它:
void SetValue(string key, string value)
{
var settings = Application.Context.GetSharedPreferences("PreferenceName", FileCreationMode.Private);
var holder = settings.Edit();
holder.PutString(key, value);
}
string GetValue(string key)
{
var settings = Application.Context.GetSharedPreferences("PreferenceName", FileCreationMode.Private);
return settings.GetString(key, string.Empty);
}
您可以研究将其实现到iOS / UWP,因为它们具有不同类型的实现。
由于您不需要任何数据结构,因此更快,更简单的方法是Shared preferences
。
受到你们家伙的回答的启发,我研究并最终使用了微软的Xamarin Essentials NuGet软件包。它目前是预发行版,只有在NuGet包中检查解决方案中的预发布选项时才能看到它。
看起来非常容易使用,到目前为止PCL和Android中都有首选项。我还没有尝试过iOS。链接在这里:
https://docs.microsoft.com/en-us/xamarin/essentials/?context=xamarin/xamarin-forms
您所做的只是存储键值对:
private void SaveUserPreferences (string value1, string value2, string value3)
{
Preferences.Set("Key1",value1);
Preferences.Set("Key2",value2);
Preferences.Set("Key3",value3);
...............................
}
为了在添加“使用Xamarin.Essentials”后在类中检索它们(例如在Android项目中)
var preferenceValue = Preferences.Get("key", "defaultValueIfNotExists");
要安装Android,请确保在所有Activity类中添加此项。例如,在MainActivity.cs中:
protected override void OnCreate(Bundle bundle)
{
//...
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, bundle); // add this line to your code
}
iOS没有什么需要做的。
还要确保将其安装在所有项目中。
希望它也能帮助其他人。