Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Xamarin iOS中存储和检索用户凭据_C#_Ios_Xamarin.ios_Keychain - Fatal编程技术网

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

C# 在Xamarin iOS中存储和检索用户凭据,c#,ios,xamarin.ios,keychain,C#,Ios,Xamarin.ios,Keychain,我有一个Xamarin.iOS应用程序,需要用户登录才能查看内容。我有两个文本字段,一个是用户名,一个是密码。用户登录且API返回成功后。如何保存用户凭据,以便在用户启动应用程序时自动登录 我尝试了这个,但是,如果用户注销,我不知道如何检索值或重新保存凭据 void StoreKeysInKeychain(string key, string value) { var s = new SecRecord(SecKind.GenericPassword)

我有一个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);
    }

谢谢。

您可以安装此插件,所有工作都已为您完成:,nuget:

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

CrossSecureStorage.Current.SetValue("SessionToken", "1234567890");
var sessionToken = CrossSecureStorage.Current.GetValue ("SessionToken");
如果您不想使用它,请查看github repo,看看他们是如何在iOS上使用它的:


最好使用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 ();
    }
}
可以另存为字符串数组或逗号分隔值。 让我知道任何进一步的帮助。
请参考:

效果很好。根据你提供的xamarin网站,唯一的问题是苹果不再建议同步。我认为NSUserDefaults不安全(或者不如KeyChain安全)。如果这是真的,我会犹豫是否将密码存储在NSUserDefaults中的clear中。
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 ();
    }
}