在Xamarin.Forms写设备平台特定的代码 [英] Write device platform specific code in Xamarin.Forms
问题描述
我有如下的 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();
}
}
}
我想编写平台在我的页面
登录
方法特定的代码基础上的设备的操作系统,他们使用的是在我的应用程序保存访问令牌。
I would like to write platform specific code in the MyPage
LogIn
method to save the access token based on which device OS they are using my application on.
我如何只有当用户使用他们的设备上我的应用程序运行设备特定的代码?
How do I only run device specific code when the user uses my application on their device?
推荐答案
这是这是很容易与依赖注入解决的方案。
This is a scenario which is easily resolved with dependency injection.
有一个接口所需的方法共享或PCL代码,例如
Have a interface with the desired methods on your shared or PCL code, like:
public interface IUserPreferences
{
void SetString(string key, string value);
string GetString(string key);
}
对你的应用程序属性
类的接口:
public class App
{
public static IUserPreferences UserPreferences { get; private set; }
public static void Init(IUserPreferences userPreferencesImpl)
{
App.UserPreferences = userPreferencesImpl;
}
(...)
}
你的目标项目创建特定于平台的实现:
Create platform-specific implementations on your target projects:
iOS的:
public class iOSUserPreferences : IUserPreferences
{
public void SetString(string key, string value)
{
NSUserDefaults.StandardUserDefaults.SetString(key, value);
}
public string GetString(string key)
{
(...)
}
}
Android的:
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(新iOSUserPrefernces())
和 App.Init(新AndroidUserPrefernces())
方法。
Then on each platform-specific project create an implementation of IUserPreferences
and set it using either App.Init(new iOSUserPrefernces())
and App.Init(new AndroidUserPrefernces())
methods.
最后,你可以更改您的代码:
Finally, you could change your code to:
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);
}
}
}
这篇关于在Xamarin.Forms写设备平台特定的代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!