tafuji's blog

C#, Xamarin, Azure DevOps を中心に書いています。

Xamarin.Essentials 入門 - #2 ユーザー設定

はじめに

Xamarin.Essentials が提供する、ユーザー設定機能について記載します。この API を利用することで、プラットフォーム固有の API について知らなくても、ユーザー設定を保存・取得するためのコードを簡単に書くことができます。

使ってみよう

Xamarin.Essentials のユーザー設定機能は、Preferences クラスで提供されており、以下のことができます。

  • 保存
  • 取得
  • 削除
  • 全削除
  • 存在チェック

使い方は、キーと値のペアで設定値の保存、取得ができます。(Set, Get メソッド)

// 保存
Preferences.Set("key", "value");
Preferences.Set("key", "value", "preference_name");

// 取得
var foo = Preferences.Get("key", "value");
var bar = Preferences.Get("key", "value", "preference_name");

キー指定による値の削除、存在チェックができ、すべての設定値を削除することも可能です。

// 削除
Preferences.Remove("key");
Preferences.Remove("key", "preference_name");

// 全削除
Preferences.Clear();
Preferences.Clear("preference_name");

// 存在チェック
bool exists = Preferences.ContainsKey("key");
bool exists = Preferences.ContainsKey("key", "preference_name");

メソッドの引数に、preference_name が指定された場合は、その名前の設定値を保存するデータストアが作成されます。

読んでみよう

Preferences のコードを読んで、プロットフォーム固有の処理を見ていきます。

iOS

iOS ではユーザーの設定値を保存・取得するために、NSUserDefaults が利用されていることがわかります。

iOS-codes

設定名が指定されていないときは、NSUserDefaultsStandardUserDefaults が返されています。これは、ユーザ設定を保存するためのデフォルトのオブジェクトで、アプリで利用する設定データの既定の保存場所です。

一方で、設定名を指定したときには、new NSUserDefaults(sharedName, NSUserDefaultsType.SuiteName)のように、共有名を指定して、ユーザー設定用のオブジェクトを生成しています。

値の取得・設定を行うときには、NSUserDefaults のメソッドが利用可能です。

  • 値の保存
    • SetXxx(SetBool, SetDouble, SetFloat, SetString 等)
  • 値の取得
    • XxxForKey(DoubleForKey, FloatForKey, StringForKey, IntForKey 等)

ユーザー設定の iOS 向けのコードみると、実際にこれらのメソッドが利用されていることがわかります。

Android

Android では、Shared Preferences が利用されていることがわかります。

android-codes

設定名が指定されていないときは、PreferenceManager.GetDefaultSharedPreferences(context) で既定のデータストアを取得していることがわかります。

設定名が指定されているときには、context.GetSharedPreferences(sharedName, FileCreationMode.Private) を利用して、指定した名前のデータストアを作成しています。

値の取得・保存を行うときには、ISharedPreferences インタフェーズの以下のメソッドを利用しています。

  • 値の取得
    • GetXxx メソッドを利用している(GetBoolean, GetFloat, GetInt, GetLong, GetString)
  • 値の保存
    • ISharedPreferences.Edit() を呼び出して ISharedPreferencesEditor を取得
    • ISharedPreferencesEditor の PutXxx メソッドを利用(PutBoolean, PutFloat, PutInt, PutLong, PutString 等)
    • 最後に ISharedPreferencesEditor.Apply() メソッドを呼び出して変更を確定

Android 向けのコードstatic void PlatformSet<T>(string key, T value, string sharedName), static T PlatformGet<T>(string key, T defaultValue, string sharedName) メソッドの中の処理を見ると、Android での設定値の取得・保存方法が分かります。

UWP

UWP では、ApplicatinDataContainer が利用されています。

uwp-codes

設定名なしのときは、ApplicationData.Current.LocalSettings というローカルアプリデータストア内にある既定のコンテナを返します。

設定名が指定されたときには、localSettings.CreateContainer(sharedName, ApplicationDataCreateDisposition.Always) を使って、名前をつきのコンテナを生成し、それを返してます。

値の取得・保存

  • 値の保存
    • ApplicationDataContainer の Values プロパティにキーを指定して保存 します。(appDataContainer.Values[“Key_Name"] = “Value"
  • 値の保存
  • ApplicationDataContainer の Values プロパティにキーを指定して取得します (var value = appDataContainer.Values[“Key_Name"]

まとめ

この記事では、Xamarin.Essentials のユーザ設定機能について紹介しました。 内部で利用されているプラットフォーム固有の API を紹介し、その使い方についても簡単に記載しました。

参考