You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Auth账户存储功能实现技术咨询

Xamarin.Auth 凭据保存实现指南与关键细节

嘿,我看到你正在用Xamarin.Auth实现应用的凭据存储功能,已经搞定了NuGet安装,还在共享项目里写了基础代码,我来帮你补全并梳理下关键注意事项,避免踩坑:

首先,先把你写的代码补全并规范一下,完整的实现应该是这样的:

using Xamarin.Auth;

public void SaveCredentials(string userName, string password)
{
    // 先校验输入是否合法,避免空值存入
    if (!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(password))
    {
        // 创建Account实例,用来存储用户名
        Account account = new Account { Username = userName };
        // 将密码添加到Properties字典中,这个字典用来存储额外的用户信息
        account.Properties.Add("Password", password);
        
        // 这里要注意:共享项目中直接调用AccountStore.Create()会有平台适配问题
        // 后面我会讲如何用依赖服务处理,先看完整的保存逻辑
        var accountStore = AccountStore.Create();
        // 保存时必须指定一个ServiceId,相当于凭据的分组标识,后续查询也要用同一个
        accountStore.Save(account, "YourAppUniqueServiceId");
    }
}

接下来是几个必须注意的关键点,不然很容易出问题:

  • 平台上下文的适配处理
    共享项目里直接用AccountStore.Create()在Android上会报错,因为Android需要传入Context,而iOS不需要。最好用依赖服务来封装平台特定的创建逻辑:

    1. 先定义一个接口:
      public interface IAccountStoreService
      {
          AccountStore GetAccountStore();
      }
      
    2. Android端实现:
      [assembly: Dependency(typeof(AccountStoreServiceAndroid))]
      namespace YourAppNamespace.Droid
      {
          public class AccountStoreServiceAndroid : IAccountStoreService
          {
              public AccountStore GetAccountStore()
              {
                  // 传入Android应用的上下文
                  return AccountStore.Create(Android.App.Application.Context);
              }
          }
      }
      
    3. iOS端实现:
      [assembly: Dependency(typeof(AccountStoreServiceiOS))]
      namespace YourAppNamespace.iOS
      {
          public class AccountStoreServiceiOS : IAccountStoreService
          {
              public AccountStore GetAccountStore()
              {
                  // iOS直接创建即可,不需要额外参数
                  return AccountStore.Create();
              }
          }
      }
      
    4. 共享项目中调用:
      var accountStore = DependencyService.Get<IAccountStoreService>().GetAccountStore();
      accountStore.Save(account, "YourAppUniqueServiceId");
      
  • ServiceId的作用
    这个ID是用来区分不同服务/应用的凭据的,比如你的应用叫"TodoApp",就可以用"TodoApp_UserCredentials"作为ServiceId,保存和查询的时候必须用同一个,不然找不到之前存的凭据。

  • 密码的安全性建议
    虽然Xamarin.Auth会在平台层面加密存储凭据(Android用Keystore,iOS用Keychain),但还是建议不要直接存明文密码,最好先做哈希处理(比如用SHA256加盐)再存入Properties。

  • 如何读取保存的凭据
    后续如果要读取用户的登录信息,可以用这段代码:

    public Account GetSavedUserCredentials()
    {
        var accountStore = DependencyService.Get<IAccountStoreService>().GetAccountStore();
        // 查询指定ServiceId下的所有账户,这里假设一个用户对应一个账户
        return accountStore.FindAccountsForService("YourAppUniqueServiceId").FirstOrDefault();
    }
    

如果还有具体的报错或者功能需求,随时说细节哦!

内容的提问来源于stack exchange,提问作者ClueSelecter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:08:58