Xamarin Auth аккаунт магазина - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь реализовать 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, строка) или AccountStore.Create (строка);"

Я попытался передать параметр методу AccountStore.Create (), но он, похоже, не принимает его. Примерно так:

#if ANDROID
   _accountStore = AccountStore.Create(Application.Context);
#else
   _accountStore = AccountStore.Create();
#endif

Нужно ли писать специальный код для Android, чтобы расширить метод создания.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Мне удалось заставить его работать, реализовав метод 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();
0 голосов
/ 15 мая 2018

Я понимаю, почему вы удалили не ответ, я думал, что это проявит интерес к вопросу. Я полагаю, что вместо этого я должен был проголосовать за вопрос. В любом случае вот ответ, который я нашел.

Вы не можете использовать версию 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;
    }
...