我正在为Azure Mobile App开发具有.NET背景的Xamarin Forms App。我在客户端上遇到了一些问题,我想知道如何处理用户令牌,即移动服务用户。
我应该如何保留令牌的数据并通过客户端应用程序使用它?
我成功登录了用户。现在,用户转到另一个页面并尝试检索信息。我为每个表/对象创建了一个像"TodoItemManager"这样的管理器。所以现在我正在使用FoodItemManager,但是MobileServiceClient的MobileServiceUser为空,因为我使用LoginItemManager登录了用户。所以数据丢失了。我是否应该为整个应用程序使用一个管理器来保持移动服务用户的活动?最好的方法是什么?
谢谢。
应为整个应用使用单一实例MobileServiceClient
对象,这将在所有视图中保留登录用户。创建多个客户端对象通常是一个坏主意。
如果还想在应用重启后保留用户令牌,可以使用 Xamarin.Auth
库,该库将安全地存储令牌。下面是 Xamarin.Forms 的示例:https://github.com/azure-appservice-samples/ContosoMoments/blob/master/src/Mobile/ContosoMoments/Helpers/AuthStore.cs。
根据您想要实现的目标,有不同的方法和最佳实践。如果用户每次启动应用时都应重新进行身份验证,则可以创建一个保存身份验证属性的单一实例类。我选择"AzureData"这个名字是因为你的主题。
例:
使用系统;
public class AzureData
{
private static AzureDatainstance;
private AzureData() {}
public static AzureDataInstance
{
get
{
if (instance == null)
{
instance = new AzureData();
}
return instance;
}
}
public string MobileServiceUser { get; set; }
}
现在,在确定移动服务用户的代码中,您可以执行如下调用:
AzureData.AzureDatainstance.MobileServiceUser = <yourUser>;
然后,可以访问应用程序的每个位置上的内容,这些位置对类 AzureData 具有可见性。
如果要以监视应用程序重新启动的方式存储数据,则需要考虑其他方法来存储数据。根据数据的大小,可以使用每个平台提供的本地存储(例如 NSUserDefaults for iOS)或者您创建文件或使用本地数据库。