在 Xamarin 中存储和检索用户凭据 iOS

Storing and Retrieving User Credentials in Xamarin iOS

我有一个 Xamarin.iOS 应用程序需要用户登录才能查看内容。我有两个文本字段,一个用于用户名,一个用于密码。一旦用户登录并且 API 返回成功。如何保存用户凭据,以便他们在启动应用程序时自动登录?

我试过了,但是,我不知道如何在用户注销时检索值或重新保存凭据

void StoreKeysInKeychain(string key, string value)
    {

        var s = new SecRecord(SecKind.GenericPassword)
        {
            ValueData = NSData.FromString(value),
            Generic = NSData.FromString(key)
        };
        var err = SecKeyChain.Add(s);
    }

谢谢。

您可以安装此插件,所有工作都已为您完成:https://github.com/sameerkapps/SecureStorage, nuget: https://www.nuget.org/packages/sameerIOTApps.Plugin.SecureStorage/

如果您使用该插件,它非常简单:

CrossSecureStorage.Current.SetValue("SessionToken", "1234567890");
var sessionToken = CrossSecureStorage.Current.GetValue ("SessionToken");

如果您不想使用它,请查看 github 存储库,看看他们是如何为 iOS 使用它的: https://github.com/sameerkapps/SecureStorage/blob/master/SecureStorage/Plugin.SecureStorage.iOSUnified/SecureStorageImplementation.cs

public override string GetValue(string key, string defaultValue)
{
    SecStatusCode ssc;
    var found = GetRecord(key, out ssc);
    if (ssc == SecStatusCode.Success)
    {
        return found.ValueData.ToString();
    }

    return defaultValue;
}

private SecRecord GetRecord(string key, out SecStatusCode ssc)
{
    var sr = new SecRecord(SecKind.GenericPassword);
    sr.Account = key;
    return SecKeyChain.QueryAsRecord(sr, out ssc);
}

最好使用 iOS 默认值 NSUserDefaults.StandardUserDefaults 来存储您的凭据。

检查登录 ViewController 中的存储值,如果不存在则在成功登录后将用户名和密码设置为 "GetStoredCredentials" 否则获取保存的凭据并使用。

public String GetStoredCredentials
{
    get { 
        string value = NSUserDefaults.StandardUserDefaults.StringForKey("Key"); 
        if (value == null)
            return "";
        else
            return value;
    }
    set {
        NSUserDefaults.StandardUserDefaults.SetString(value.ToString (), "Key"); 
        NSUserDefaults.StandardUserDefaults.Synchronize ();
    }
}

您可以保存为字符串数组或逗号分隔值。 让我知道任何进一步的帮助。 供您参考:https://developer.xamarin.com/guides/ios/application_fundamentals/user-defaults/