Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

カスタムユーザーデータ - Swift SDK

項目一覧

  • ユーザーのカスタム データの読み取り
  • ユーザーのカスタム データ ドキュメントの作成
  • ユーザーのカスタム データの更新

現在ログインしているユーザーのカスタム ユーザー データは、そのユーザーの Userオブジェクトから読み取ることができます。 Userオブジェクトを使用してカスタム ユーザー データを編集することはできません。 カスタム ユーザー データを編集するには、「カスタム ユーザー データの更新」を参照してください。 データを読み取るには、ログイン ユーザーのUserオブジェクトのcustomDataプロパティにアクセスします。

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", error);
return;
}
// If the user data has been refreshed recently, you can access the
// custom user data directly on the user object
NSLog(@"User custom data: %@", [user customData]);
// Refresh the custom data
[user refreshCustomDataWithCompletion:^(NSDictionary *customData, NSError *error) {
if (error != nil) {
NSLog(@"Failed to refresh custom user data: %@", error);
return;
}
NSLog(@"Favorite color: %@", customData[@"favoriteColor"]);
}];
}];
let appId = YOUR_APP_SERVICES_APP_ID // replace this with your App ID
let app = App(id: appId)
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
// If the user data has been refreshed recently, you can access the
// custom user data directly on the user object
print("User custom data: \(user.customData)")
// Refresh the custom user data
user.refreshCustomData { (result) in
switch result {
case .failure(let error):
print("Failed to refresh custom data: \(error.localizedDescription)")
case .success(let customData):
// favoriteColor was set on the custom data.
print("Favorite color: \(customData["favoriteColor"] ?? "not set")")
return
}
}
}
}

警告

カスタム データは古い可能性があります

Atlas App Services は、基礎となるデータが変更されたときにすぐに、クライアント側のユーザー カスタム データ ドキュメントの値を動的に更新しません。 代わりに、ユーザーがアクセス トークンを更新するたびに、App Services は最新バージョンのカスタム ユーザー データを取得します。このトークンは App Services バックエンドにアクセスするほとんどの SDK 操作で使用されます。 トークンがデフォルトの30分の有効期限前に更新されない場合、Swift SDK はバックエンドに対する次回の呼び出しでトークンを更新します。 カスタム ユーザー データは、最大30分、バックエンドへの次の SDK 呼び出しが発生するまでの時間古くなる可能性があります。

注意

最新バージョンのカスタム ユーザー データが必要な場合は、 refreshCustomDataWithCompletionメソッドを使用して、ユーザーのカスタム データの最新バージョンをリクエストしてください。

ユーザーのカスタム ユーザー データを作成するには、カスタム ユーザー データ コレクションに MongoDB ドキュメントを作成します。 ドキュメントの ユーザー ID フィールドには、ユーザーのユーザー ID が含まれている必要があります。

Tip

Atlas App Services UI で、 Custom User Dataタブの下の App Usersページを確認して、次のようなカスタム ユーザー データ設定を検索して構成します。

  • カスタムユーザーデータクラスター、データベース、コレクション

  • カスタムユーザーデータドキュメントをユーザーにマッピングするために使用されるユーザーID フィールド

次の例では、 MongoDBリモート アクセスを使用して、現在ログインしているユーザーのユーザー ID とfavoriteColor値を含むドキュメントをカスタム ユーザー データ コレクションに挿入します。

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", error);
return;
}
RLMMongoClient *client = [user mongoClientWithServiceName:@"mongodb-atlas"];
RLMMongoDatabase *database = [client databaseWithName:@"my_database"];
RLMMongoCollection *collection = [database collectionWithName:@"users"];
[collection insertOneDocument:
@{@"userId": [user identifier], @"favoriteColor": @"pink"}
completion:^(id<RLMBSON> newObjectId, NSError *error) {
if (error != nil) {
NSLog(@"Failed to insert: %@", error);
}
NSLog(@"Inserted custom user data document with object ID: %@", newObjectId);
}];
}];
let appId = YOUR_APP_SERVICES_APP_ID // replace this with your App ID
let app = App(id: appId)
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
let client = user.mongoClient("mongodb-atlas")
let database = client.database(named: "my_database")
let collection = database.collection(withName: "users")
// Insert the custom user data object
collection.insertOne([
"userId": AnyBSON(user.id),
"favoriteColor": "pink"
]) { (result) in
switch result {
case .failure(let error):
print("Failed to insert document: \(error.localizedDescription)")
case .success(let newObjectId):
print("Inserted custom user data document with object ID: \(newObjectId)")
}
}
}
}

カスタム ユーザー データ ドキュメントの作成時に、任意の数のフィールドと値を追加できます。 ユーザー ID フィールドは、ドキュメントがカスタム ユーザー データとしてUserオブジェクトで使用可能になるための 唯一 の要件です。

MongoDB Data AccessAtlas Device SyncMongoDB Compass 、またはMongoDB Atlas Data Explorer を使用して、カスタムユーザー データをアップデートできます。

MongoDB Data Access を使用してユーザーのカスタム ユーザー データを更新するには、ユーザーのユーザー ID がユーザーのユーザー ID フィールドに含まれる MongoDB ドキュメントを編集します。 次の例ではMongoDB Data Accessを使用して、カスタム ユーザー データ コレクション内の現在ログインしているユーザーのユーザー ID を含むドキュメントのfavoriteColorフィールドを更新します。

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", error);
return;
}
RLMMongoClient *client = [user mongoClientWithServiceName:@"mongodb-atlas"];
RLMMongoDatabase *database = [client databaseWithName:@"my_database"];
RLMMongoCollection *collection = [database collectionWithName:@"users"];
// Update the user's custom data document
[collection updateOneDocumentWhere:@{@"userId": [user identifier]}
updateDocument: @{@"favoriteColor": @"cerulean"}
completion:^(RLMUpdateResult *updateResult, NSError *error) {
if (error != nil) {
NSLog(@"Failed to insert: %@", error);
}
NSLog(@"Matched: %lu, modified: %lu", [updateResult matchedCount], [updateResult modifiedCount]);
}];
}];
let appId = YOUR_APP_SERVICES_APP_ID // replace this with your App ID
let app = App(id: appId)
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
// Access the custom user document remotely to update it.
let client = user.mongoClient("mongodb-atlas")
let database = client.database(named: "my_database")
let collection = database.collection(withName: "users")
collection.updateOneDocument(
filter: ["userId": AnyBSON(user.id)],
update: ["favoriteColor": "cerulean"]
) { (result) in
switch result {
case .failure(let error):
print("Failed to update: \(error.localizedDescription)")
return
case .success(let updateResult):
// User document updated.
print("Matched: \(updateResult.matchedCount), updated: \(updateResult.modifiedCount)")
}
}
}
}

Tip

ユーザーの ID を確認するには、 App Users User.idプロパティにアクセスするか、App Services UI で [] ページの [ Users ] タブでユーザーを見つけます。

戻る

ユーザーの認証