2016-07-15 10 views
3

私は、Azure Mobile AppのXamarin Forms Appと.NETのバックグラウンドで作業しています。私はクライアントにいくつかの問題があります。ユーザートークンMobileServiceUserをどのように処理すればいいのでしょうか。Azure Mobile App for Xamarinフォームでユーザートークンを処理する方法は?

トークンのデータを保持し、それをクライアントアプリケーションで使用する方法を教えてください。

私は正常にログオンしました。ユーザーは別のページに移動し、情報を取得しようとします。私はすべてのテーブル/オブジェクトに対して "TodoItemManager"のようなマネージャーを作成しました。今はFoodItemManagerを使用していますが、MobileItemのMobileServiceUserはnullです。これは、LoginItemManagerを使用してユーザーをログに記録したためです。したがって、データは失われます。 MobileServiceUserを存続させるために、完全に1つのマネージャを使用する必要がありますか?最善のアプローチは何ですか?

ありがとうございました。

+1

あなたはマネージャークラスをシングルトン(または静的ですが、最初のものをお勧めします)にすることができます。これにより、プログラム全体でアクセスできます。 –

答えて

5

シングルトンMobileServiceClientオブジェクトをアプリケーション全体に使用する必要があります。これにより、すべてのビューにログインユーザーが保持されます。一般に、複数のクライアントオブジェクトを作成することは悪い考えです。

また、ユーザーのトークンをアプリの再起動時に永続化したい場合は、トークンを安全に保存するXamarin.Authライブラリを使用できます。ここにXamarin.Formsのサンプルがあります:https://github.com/azure-appservice-samples/ContosoMoments/blob/master/src/Mobile/ContosoMoments/Helpers/AuthStore.cs

+0

特に、MobileServiceClientをシングルトンにしてください! –

+0

ありがとうございました。 MobileServiceClientオブジェクトは1つだけ使用します。私はそれをAppクラスに追加することを簡単に決めました。そうすれば、その方法で簡単にアクセスできます。 – ajmena

0

達成したい目的に応じて、さまざまなアプローチとベストプラクティスがあります。アプリを起動するたびにユーザーが再認証される場合は、singleton classを作成して認証プロパティを保持することができます。私はあなたのトピックのために "AzureData"という名前を選んだ。

例:

using System;あなたがMobileServiceUserを決める今、あなたのコード内の

public class AzureData 
{ 
    private static AzureDatainstance; 

    private AzureData() {} 

    public static AzureDataInstance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new AzureData(); 
     } 
     return instance; 
     } 
    } 

    public string MobileServiceUser { get; set; } 

} 

あなたは、このような呼び出しを行います。

AzureData.AzureDatainstance.MobileServiceUser = <yourUser>; 

あなたは、クラスAzureDataへの可視性を持っているアプリケーションのそれぞれの場所でコンテンツにアクセスすることができます。

アプリケーションを再起動するための方法でデータを保存する場合は、データを格納する他の方法を検討する必要があります。データのサイズに応じて、各プラットフォームが提供するローカルストレージ(例: NSUserDefaults for iOS)を使用するか、ファイルを作成するかlocal databaseを使用します。

関連する問題