Xamarin Auth аккаунт магазина
Я пытаюсь реализовать Xamairn Auth с моим приложением. Я установил пакет nuget с https://www.nuget.org/packages/Xamarin.Auth.
Следуя их примеру, у меня есть следующий код в общем проекте.
public void SaveCredentials (string userName, string password)
{
if (!string.IsNullOrWhiteSpace (userName) && !string.IsNullOrWhiteSpace (password)) {
Account account = new Account {
Username = userName
};
account.Properties.Add ("Password", password);
AccountStore.Create ().Save (account, App.AppName);
}
}
При запуске на Android, он сохраняет имя пользователя и пароль, но я получаю следующее сообщение в консоли:
"Эта версия небезопасна из-за пароля по умолчанию. Пожалуйста, используйте версию с предоставленным паролем для AccountStore. AccountStore.Create(Contex, string) или AccountStore.Create (string);"
Я попытался передать параметр в метод AccountStore.Create(), но он, похоже, не принимает его. Что-то вроде этого:
#if ANDROID
_accountStore = AccountStore.Create(Application.Context);
#else
_accountStore = AccountStore.Create();
#endif
Нужно ли писать специальный код Android для расширения метода создания.
2 ответа
Я понимаю, почему вы удалили не ответ, я думал, что это проявит интерес к вопросу. Я думаю, что я должен был поставить вопрос вместо этого. В любом случае, вот ответ, который я нашел.
Вы не можете использовать версию PCL для Android. У него нет возможности добавить пароль. Я использовал версию для Android. Назову это используя службу зависимости.
Вот пример:
Account account = null;
try
{
//account = AccountStore.Create(Application.ApplicationContext, "System.Char[]").FindAccountsForService("My APP").FirstOrDefault();
var aStore = AccountStore.Create(Application.ApplicationContext, "myownpassword");
// save test
account = aStore.FindAccountsForService(Constants.AppName).FirstOrDefault();
if (account == null)
account = new Account();
account.Username = "bobbafett";
account.Properties["pswd"] = "haha";
aStore.Save(account, Constants.AppName);
// delete test, doesn't seem to work, account is still found
var accts = aStore.FindAccountsForService(Constants.AppName);
int howMany = accts.ToList().Count;
foreach (var acct in accts)
{
aStore.Delete(acct, Constants.AppName);
}
account = aStore.FindAccountsForService(Constants.AppName).FirstOrDefault();
}
catch (Java.IO.IOException ex)
{
// This part is not invoked anymore once I use the suggested password.
int i1 = 123;
}
Я смог заставить его работать, реализовав метод getAccountStore в Android, который имеет возможность добавить пароль, а затем использовать DependencyService для его вызова.
public AccountStore GetAccountStore()
{
try
{
var acctStore = AccountStore.Create(Application.Context, "somePassword");
return acctStore;
}
catch (Java.IO.IOException ex)
{
throw ex;
}
}
Тогда в вашем проекте pcl назовите это так:
if (Device.RuntimePlatform == Device.Android)
_accountStore = DependencyService.Get<IAccountStoreHelper>().GetAccountStore();
else
_accountStore = AccountStore.Create();