カスタムユーザーデータ - .NET SDK
Overview
Realm にはユーザーに関する任意のカスタム ユーザー データを保存できます。 たとえば、ユーザーの希望言語、誕生日、ローカル タイムゾーン を保存できます。 このデータを読み書きする前に、バックエンドでカスタム ユーザー データを有効にする必要があります。 詳しくは、「 カスタム ユーザー データの有効化 」を参照してください。
重要
カスタム ユーザー データを使用するには、まずカスタム ユーザー データを有効にする 必要があります。
カスタム ユーザー データを作成、更新、または削除するには、カスタム ユーザー データ構成の次の情報が必要です。
カスタムユーザーデータクラスター
カスタムユーザーデータベース
カスタムユーザーデータドキュメントが保存される コレクション
カスタム ユーザー データ ドキュメントをユーザーにマッピングするために使用されるユーザー ID フィールド(ユーザー ID 経由)
この情報は、App Services UI で確認できます。 左側のサイドバーで、[ App Usersをクリックし、[ Custom User Data ] タブを選択します。
ユーザーのカスタム ユーザー データの読み取り
カスタム ユーザー データを取得するには、ログイン ユーザーの User
オブジェクトでGetCustomData()メソッドを呼び出します。
await user.RefreshCustomDataAsync(); // Tip: define a class that represents the custom data // and use the gerneic overload of GetCustomData<>() var customUserData = user.GetCustomData<CustomUserData>(); Console.WriteLine($"User has pets: {customUserData.HasPets}"); Console.WriteLine($"User's favorite color is {customUserData.FavoriteColor}"); Console.WriteLine($"User's timezone is {customUserData.LocalTimeZone}");
警告
カスタム データは古い可能性があります
App Services は、基礎となるデータが変更されたときにすぐにCustomData
の値を動的に更新しません。 代わりに、ユーザーがアクセス トークンを更新するたび、またはRefreshCustomDataAsync()メソッドを明示的に呼び出すと、App Services は最新バージョンのカスタム ユーザー データを取得します。これにより、アプリが最新のカスタム ユーザー データを保持するようになります。
ユーザーのカスタムユーザーデータドキュメントの作成
ユーザーのカスタム ユーザー データを作成するには、カスタム ユーザー データ コレクションに MongoDB ドキュメントを作成します。 ドキュメントの ユーザー ID フィールドには、ユーザーのユーザー ID が含まれている必要があります。 次の例では、 MongoDB Data Accessを使用して、現在ログインしているユーザーのユーザー ID といくつかのカスタム プロパティを含むドキュメントをカスタム ユーザー データ コレクションに挿入します。
app = App.Create(myRealmAppId); user = await app.LogInAsync(Credentials.Anonymous()); mongoClient = user.GetMongoClient("mongodb-atlas"); dbTracker = mongoClient.GetDatabase("tracker"); userDataCollection = dbTracker.GetCollection<CustomUserData>("user_data"); var cud = new CustomUserData(user.Id) { FavoriteColor = "pink", LocalTimeZone = "+8", HasPets = true }; var insertResult = await userDataCollection.InsertOneAsync(cud);
カスタム ユーザー データ オブジェクトを表す C# クラス (POCO) を作成すると便利な場合があります。 SDK は、プロパティの書き込み、読み取り、更新時に、このクラスを BSON との間で直列化または逆直列化します。 上記の例では、次の クラスを使用して プロパティをマッピングします。
public class CustomUserData { public string _id { get; private set; } public string _partition { get; private set; } public string FavoriteColor { get; set; } public string LocalTimeZone { get; set; } public bool HasPets { get; set; } public CustomUserData(string id, string partition = "myPart") { this._id = id; this._partition = partition; } }
ユーザーのカスタム データの更新
カスタム ユーザー データのアップデートには、書き込みと同じコードが使用されます。 次の例では、 UpdateOneAsync()メソッドを使用してデータを検索して更新し、その後データを更新して最新の変更が利用可能になるようにします。
var updateResult = await userDataCollection.UpdateOneAsync( new BsonDocument("_id", user.Id), new BsonDocument("$set", new BsonDocument("HasPets", false))); await user.RefreshCustomDataAsync(); var customUserData = user.GetCustomData<CustomUserData>(); Console.WriteLine($"User has pets: {customUserData.HasPets}"); Console.WriteLine($"User's favorite color is {customUserData.FavoriteColor}"); Console.WriteLine($"User's timezone is {customUserData.LocalTimeZone}");
ユーザーのカスタム データの削除
カスタム ユーザー データを削除するには、書き込みおよび更新と同じアプローチを使用します。 次の例では、 DeleteOneAsync()メソッドを使用してデータを検索して削除します。
var deleteResult = await userDataCollection.DeleteOneAsync( new BsonDocument("_id", user.Id)); // The `DeletedCount` should be 1 Console.WriteLine(deleteResult.DeletedCount); // There should no longer be a custom user document for the user var customData = await userDataCollection.FindOneAsync( new BsonDocument("_id", user.Id)); Console.WriteLine(customData == null);