2017-10-30 4 views
0

Xamarin.Authを使用して、資格情報を保存しておき、ユーザーがXamarin Formsアプリケーションにログインしています。 今、私は "スイッチのログユーザー"を実装する必要がありますが、私はそれを正しく行う方法を考え出していません。Xamarin.authを使用してログに記録されたユーザーを切り替える方法

インターネットに関する情報はありません。だから、もし誰かがこれをどうやって説明したり、見せることができれば。

IEnumerable<Account> accounts = AccountStore.Create().FindAccountsForService(InstaConstants.AppName); 

が、1つのアカウントだけでいつもと私は古い資格情報を削除せずにテストしてい:アカウントが保存されているかどうかを確認するには

+0

おそらく、SQLiteを使用してコンテンツを暗号化してからDBに保存することがあります。または、[this](https://github.com/sameerkapps/SecureStorage)のようなプラグインを使用することもできます(プラグインを試したことはありません)。または、各プラットフォームの保護されたストレージAPIにアクセスするために 'DependencyService'を使用します。 – hvaughan3

+0

SQLから各ユーザーのデータを取得するために、私はすでにやっています。私は各ユーザーからトークンを取得する方法を知りません。私はXamarin.Authでこれを行う方法を知らない。 –

+0

しかし、@ hvaughan3を助けようとしてくれてありがとう –

答えて

1

AccountStoreあなただけの別のprovider価値を提供する必要がで複数のアカウントを保存します();保存したすべてのユーザーを繰り返します。

別のきれいな方法は、jsonを使用してユーザーリストを1つのアカウントに保存することです。

//im using Constants.StoreName - you know what it is.. 

// 
//save users 
// 
List<MyUsers> MyList; // <==users here initially 
var jsonUsers = await Task.Run(() => JsonConvert.SerializeObject(MyList)); 
Account account = new Account(); 
account.Username = "AllMyUsers"; 
account.Properties.Add("users", jsonUsers); 
//cleanup previous 
var accounts = store.FindAccountsForService(Constants.StoreName).ToList(); 
accounts.ForEach(acc => store.Delete(acc, Constants.StoreName)); 
//save finally 
await store.SaveAsync(account, Constants.StoreName); 

// 
//read users 
// 
Account account = store.FindAccountsForService(Constants.StoreName).FirstOrDefault(); 
if (account == null) 
      { 
       //create new empty list of users 
       //todo 
       return false; 
      } 
      try 
      { 
      List<MyUsers> MyList = JsonConvert.DeserializeObject<List<MyUsers>>(account.Properties["users"]); 
//todo check stuff if list is valid 

return true; 
      } 
      catch 
      { 
//todo 
//create new empty list 
//something went wrong 


      } 
1

thisの例を参照してください。

​​

*編集:ためには、Completedイベントが呼び出され、ユーザがログインすると、あなたは彼らがログインしていることを確認するためにチェックし、その後、あなたはeventArgs.Account.Properties["access_token"]に格納されaccess_tokenを保存する方法を示していますあなただけの1店舗を利用しての制約を持っていない場合、あなたはiteration.ToString +ショップ「をMySupaApp」のような名前を与えることができる

//FROM 

await AccountStore.Create().SaveAsync(eventArgs.Account, "instagram"); //Saving a single general Instagram account 

//TO 

string someUniqueIdentifier = /* the user's User Id, an incremented number, some other identifier */ 

await AccountStore.Create().SaveAsync(eventArgs.Account, "instagram" + someUniqueIdentifier); //Ability to save multiple Instagram accounts, someUniqueIdentifier must change for each new account 
+0

私はこれを行う...あなたは理解していません...アプリはトークンを通常保存しています...しかし最後のログのみ...私は別のログインをすると、そのように最後のものを消去します。アカウントを取得し、常に1つだけ来る。お時間をいただきありがとうございます。 –

+0

@MCFer私は理解していると思います。編集を参照してください。 – hvaughan3

+0

私は店のアカウントは、私が読んだときにそれが内部ユーザー名を持っているので、そう... ...私はちょうどあなたがアカウントを保存するコードを確認する必要があります。この:( –

関連する問題