gpt4 book ai didi

c# - 在 Xamarin.Forms 中编写特定于设备平台的代码

转载 作者:IT王子 更新时间:2023-10-29 04:28:44 25 4
gpt4 key购买 nike

我有以下 Xamarin.Forms.ContentPage 类结构

public class MyPage : ContentPage
{
public MyPage()
{
//do work to initialize MyPage
}

public void LogIn(object sender, EventArgs eventArgs)
{
bool isAuthenticated = false;
string accessToken = string.Empty;

//do work to use authentication API to validate users

if(isAuthenticated)
{
//I would to write device specific code to write to the access token to the device
//Example of saving the access token to iOS device
NSUserDefaults.StandardUserDefaults.SetString(accessToken, "AccessToken");

//Example of saving the access token to Android device
var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);
var prefsEditor = prefs.Edit();

prefEditor.PutString("AccessToken", accessToken);
prefEditor.Commit();
}
}
}

我想在 MyPage LogIn 方法中编写特定于平台的代码,以根据他们使用我的应用程序的设备操作系统保存访问 token 。

当用户在他们的设备上使用我的应用程序时,我如何只运行设备特定代码?

最佳答案

这是一个很容易通过依赖注入(inject)解决的场景。

在您的共享或 PCL 代码上有一个与所需方法的接口(interface),例如:

public interface IUserPreferences 
{
void SetString(string key, string value);
string GetString(string key);
}

在该接口(interface)的 App 类上有一个属性:

public class App 
{
public static IUserPreferences UserPreferences { get; private set; }

public static void Init(IUserPreferences userPreferencesImpl)
{
App.UserPreferences = userPreferencesImpl;
}

(...)
}

在您的目标项目上创建特定于平台的实现:

苹果:

public class iOSUserPreferences : IUserPreferences 
{
public void SetString(string key, string value)
{
NSUserDefaults.StandardUserDefaults.SetString(key, value);
}

public string GetString(string key)
{
(...)
}
}

安卓:

public class AndroidUserPreferences : IUserPreferences
{
public void SetString(string key, string value)
{
var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);
var prefsEditor = prefs.Edit();

prefEditor.PutString(key, value);
prefEditor.Commit();
}

public string GetString(string key)
{
(...)
}
}

然后在每个特定于平台的项目上创建一个 IUserPreferences 的实现,并使用 App.Init(new iOSUserPrefernces())App.Init 对其进行设置(新的 AndroidUserPrefernces()) 方法。

最后,您可以将代码更改为:

public class MyPage : ContentPage
{
public MyPage()
{
//do work to initialize MyPage
}

public void LogIn(object sender, EventArgs eventArgs)
{
bool isAuthenticated = false;
string accessToken = string.Empty;

//do work to use authentication API to validate users

if(isAuthenticated)
{
App.UserPreferences.SetString("AccessToken", accessToken);
}
}
}

关于c# - 在 Xamarin.Forms 中编写特定于设备平台的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com