2016-12-07 8 views
0

こんにちは私はxamarinアプリにログインしてユーザーを保存しようとしています。ユーザーをxamarinにログインさせ続ける方法

公式のチュートリアルは、ログインしているユーザーを維持する方法でログインしなくする方法について話しています。 Microsoft Tutorial xamarin Tutorial

私の問題は、ログイン方法は、アプリが起動しますどの立ち上げ直されるたびに実行されなければならないということです落ちる前にしばらく空白の画面が表示されます。

ログイン方法

async void Login() 
     { 
      if(App.Authenticator != null && authenticated == false) 
      { 
       authenticated = await App.Authenticator.Authenticate(); 
      } 
     } 

認証方法

public async Task<bool> Authenticate() 
     { 
      var success = false; 
      var message = string.Empty; 

      try 
      { 

        //Sign in with Active Directory Service 
       user = await ShopItemManager.DefaultManager.CurrentClient.LoginAsync(this, 
        MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory); 



       if (user != null) 
       { 
        message = string.Format("You are now signed in as {0}", user.UserId); 
        success = true; 
        //store token 
       } 
      } 
      catch (Exception ex) 
      { 
       message = ex.Message; 
      } 

      //Display the success or failure message 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.SetMessage(message); 
      builder.SetTitle("Sign-in Result"); 
      builder.Create().Show(); 

      return success; 
     } 
+0

ログインクッキーを設定しようとしましたか? –

+0

私は本当にどのように手掛かりがないだろう。 – xerotolerant

+0

https://developer.xamarin.com/api/property/System.Web.HttpRequest.Cookies/ –

答えて

0

はXamrinについて多くを知らないが、ネイティブのAndroidに、我々は状態を保存するためにログインSharedPreferencesを使用しています。 SharedPreferencesは、いくつかのデータを前もって保存するためにアンドロイドで使用されます(つまり、アプリケーションの終了後も保持されます)。ユーザーが次回の起動時に正常にログインしたかどうかを検出するブール値を設定できます。

SharedPreferencesのXamarin.Android相当品は、ISharedPreferencesと呼ばれるインターフェイスです。

同じ方法で使用すると、簡単にAndroidコードを移植することができます。


例えば、いくつかのContextでは、次の操作を行うことができます使用して、真/偽boolを保存します。このことから

ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext); 
mBool = prefs.GetBoolean ("key_login_successfully", <default value>); 

ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext); 
ISharedPreferencesEditor editor = prefs.Edit(); 
editor.PutBoolean ("key_login_successfully", true); 
// editor.Commit(); // applies changes synchronously on older APIs 
editor.Apply();  // applies changes asynchronously on newer APIs 

アクセスが使用して値を保存サンプルを使用すると、使用する正しいC#インターフェイスがわかると、残りは簡単です。より複雑な状況でSharedPreferencesを使用する方法については、多くのAndroid Javaの例があります。これらは、ISharedPreferencesを使用すると非常に簡単に移植できます。詳細については

、このスレッドを読んで:

+0

これは私が次に行うことです。問題は、アプリの再起動時にユーザーがログインしていないことです。 Azureモバイルアプリのapiは、ログインメソッドを再実行するまでアプリケーションにアクセスできません。 – xerotolerant

+0

私はAzureモバイルアプリのAPIについてはわかりません。しかし、白い画面を隠すために、スプラッシュ画面の背景をいくつか設定し、プログレスバーを表示して、何かが起こっていることをユーザーに知らせるようにしてください。 – Nitesh

+0

最後に私があなたが言及したものに関連する解決策を見つけました。しかし、xamarinとazureの特徴のために、それはかなり複雑なプロセスでした。提案していただきありがとうございます。 – xerotolerant

0

のでThis tutorialは、その中の情報を持っています。それは少し複雑です。

このコードはキーを格納します。別のユーザーが実際に言及したものこれはクロスプラットフォームですが。 public static class Settings { プライベート静的ISettings AppSettings => CrossSettings.Current;

const string UserIdKey = "userid"; 
    static readonly string UserIdDefault = string.Empty; 

    const string AuthTokenKey = "authtoken"; 
    static readonly string AuthTokenDefault = string.Empty; 

    public static string AuthToken 
    { 
     get { return AppSettings.GetValueOrDefault<string>(AuthTokenKey, AuthTokenDefault); } 
     set { AppSettings.AddOrUpdateValue<string>(AuthTokenKey, value); } 
    } 

    public static string UserId 
    { 
     get { return AppSettings.GetValueOrDefault<string>(UserIdKey, UserIdDefault); } 
     set { AppSettings.AddOrUpdateValue<string>(UserIdKey, value); } 
    } 

    public static bool IsLoggedIn => !string.IsNullOrWhiteSpace(UserId); 
} 

しかし、クライアントのコンストラクタに渡され、この認証ハンドラは、いずれかが保存されている場合は保存された資格情報が使用されることを保証します。

関連する問題