カスタムフィールド

開発者は、既定フィールドに加え、任意のフィールド(年齢、性別、誕生日等)を追加できます。ただし、SDK により予約されているフィールド名は使用できません。予約されているフィールド名については appledoc を参照してください。

カスタムフィールドは UserFields インスタンスに設定してください。

カスタムフィールドの設定と変更

ユーザーのカスタムフィールドを設定・変更する例を以下に挙げます。

Swift:

  • // Set custom fields.
    let userFields = KiiUserFields()
    userFields.setObject(NSNumber(value: 20 as Int32), forKey: "age")
    userFields.setObject("male", forKey: "gender")
    userFields.setObject(NSNumber(value: 170.5 as Float), forKey: "height")
    userFields.setObject(NSNumber(value: true as Bool), forKey: "isMember")
    
    // Remove custom fields.
    userFields.removeFromServer(forKey: "weight")
    userFields.removeFromServer(forKey: "chest")
    
    // Get the currently logged-in user.
    let user = KiiUser.current()!
    
    do {
      // Update the user attributes.
      try user.update(withUserFieldsSynchronous: userFields)
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Set custom fields.
    let userFields = KiiUserFields()
    userFields.setObject(NSNumber(value: 20 as Int32), forKey: "age")
    userFields.setObject("male", forKey: "gender")
    userFields.setObject(NSNumber(value: 170.5 as Float), forKey: "height")
    userFields.setObject(NSNumber(value: true as Bool), forKey: "isMember")
    
    // Remove custom fields.
    userFields.removeFromServer(forKey: "weight")
    userFields.removeFromServer(forKey: "chest")
    
    // Get the currently logged-in user.
    let user = KiiUser.current()!
    
    // Update the user attributes.
    user.update(with: userFields) { (retUser :KiiUser?, error : Error?) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    }

Objective-C:

  • // Set custom fields.
    KiiUserFields *userFields = [[KiiUserFields alloc] init];
    [userFields setObject:[NSNumber numberWithInt:20] forKey:@"age"];
    [userFields setObject:@"male" forKey:@"gender"];
    [userFields setObject:[NSNumber numberWithFloat:170.5f] forKey:@"height"];
    [userFields setObject:[NSNumber numberWithBool:YES] forKey:@"isMember"];
    
    // Remove custom fields.
    [userFields removeFromServerForKey:@"weight"];
    [userFields removeFromServerForKey:@"chest"];
    
    NSError *error = nil;
    
    // Get the currently logged-in user.
    KiiUser *user = [KiiUser currentUser];
    
    // Update the user attributes.
    [user updateWithUserFieldsSynchronous:userFields error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Set custom fields.
    KiiUserFields *userFields = [[KiiUserFields alloc] init];
    [userFields setObject:[NSNumber numberWithInt:20] forKey:@"age"];
    [userFields setObject:@"male" forKey:@"gender"];
    [userFields setObject:[NSNumber numberWithFloat:170.5f] forKey:@"height"];
    [userFields setObject:[NSNumber numberWithBool:YES] forKey:@"isMember"];
    
    // Remove custom fields.
    [userFields removeFromServerForKey:@"weight"];
    [userFields removeFromServerForKey:@"chest"];
    
    // Get the currently logged-in user.
    KiiUser *user = [KiiUser currentUser];
    
    // Update the user attributes.
    [user updateWithUserFields:userFields block:^(KiiUser *user, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    }];

既存のフィールドを更新対象として指定しない場合、そのフィールドはそのまま Kii Cloud 上に保持されます。

updateWithUserFields:block: メソッドが正常に完了すると、フィールドが Kii Cloud および KiiUser インスタンスで更新されます。

また既定フィールドとカスタムフィールドの設定・変更は同時に行えます。

ユーザー属性の変更は、基本的にログイン中のユーザー本人に対してのみ実行できます。詳しくは ユーザー属性 をご覧ください。

注意:[KiiUser saveSynchronous:][KiiUser save:withCallback:] は deprecated になりました。 今後は [KiiUser updateWithIdentityDataSynchronous:userFields:error:], [KiiUser updateWithUserFieldsSynchronous:error], または [KiiUser updateWithIdentityData:userFields:block:], [KiiUser updateWithUserFields:block:], を利用してください。

カスタムフィールドの参照

ユーザーのカスタムフィールドを取得する例を以下に挙げます。

Swift:

  • // Get the currently logged-in user.
    let user = KiiUser.current()!
    
    do {
      // Refresh the user to get the latest user info from Kii Cloud.
      try user.refreshSynchronous()
    } catch let error as NSError {
      // Handle the error.
      return
    }
    
    // Get custom fields.
    let age = (user.getObjectForKey("age") as! NSNumber).intValue
    let gender = user.getObjectForKey("gender") as! String
    let height = (user.getObjectForKey("height") as! NSNumber).floatValue
    let isMember = (user.getObjectForKey("isMember") as! NSNumber).boolValue
  • // Get the currently logged-in user.
    let user = KiiUser.current()!
    
    // Refresh the user to get the latest user info from Kii Cloud.
    user.refresh { (user :KiiUser?, error : Error?) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Get custom fields.
      let age = (user!.getObjectForKey("age") as! NSNumber).intValue
      let gender = user!.getObjectForKey("gender") as! String
      let height = (user!.getObjectForKey("height") as! NSNumber).floatValue
      let isMember = (user!.getObjectForKey("isMember") as! NSNumber).boolValue
    }

Objective-C:

  • // Get the currently logged-in user.
    KiiUser *user = [KiiUser currentUser];
    
    NSError *error = nil;
    
    // Refresh the user to get the latest user info from Kii Cloud.
    [user refreshSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Get custom fields.
    int age = [[user getObjectForKey:@"age"] integerValue];
    NSString *gender = [user getObjectForKey:@"gender"];
    double height = [[user getObjectForKey:@"height"] doubleValue];
    BOOL isMember = [[user getObjectForKey:@"isMember"] boolValue];
  • // Get the currently logged-in user.
    KiiUser *user = [KiiUser currentUser];
    
    // Refresh the user to get the latest user info from Kii Cloud.
    [user refreshWithBlock:^(KiiUser *user, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Get custom fields.
      int age = [[user getObjectForKey:@"age"] integerValue];
      NSString *gender = [user getObjectForKey:@"gender"];
      double height = [[user getObjectForKey:@"height"] doubleValue];
      BOOL isMember = [[user getObjectForKey:@"isMember"] boolValue];
    }];

例のように getObjectForKey メソッドを利用して値を取得します。

ユーザー作成時のカスタムフィールドの設定

ユーザーの作成を行うタイミングで、カスタムフィールドの初期値を設定する例を以下に挙げます。

KiiUser のインスタンスを生成した後に setObject:forKey: メソッドを使って、カスタムフィールドを設定することができます。

Swift:

  • // Create a user.
    let username = "user_123456"
    let password = "123ABC"
    let user = KiiUser(username: username, andPassword: password)
    
    // Set custom fields.
    user.setObject(NSNumber(value: 30 as Int32), forKey: "age")
    user.setObject(NSNumber(value: 0 as Int32), forKey: "score")
    
    do {
      // Register the user.
      try user.performRegistrationSynchronous()
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Create a user.
    let username = "user_123456"
    let password = "123ABC"
    let user = KiiUser(username: username, andPassword: password)
    
    // Set custom fields.
    user.setObject(NSNumber(value: 30 as Int32), forKey: "age")
    user.setObject(NSNumber(value: 0 as Int32), forKey: "score")
    
    // Register the user.
    user.performRegistration { (retUser :KiiUser?, error : Error?) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    }

Objective-C:

  • // Create a user.
    NSString *username = @"user_123456";
    NSString *password = @"123ABC";
    NSError *error = nil;
    KiiUser *user = [KiiUser userWithUsername:username andPassword:password];
    
    // Set custom fields.
    [user setObject:[NSNumber numberWithInt:30] forKey:@"age"];
    [user setObject:[NSNumber numberWithInt:0] forKey:@"score"];
    
    // Register the user.
    [user performRegistrationSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Create a user.
    NSString *username = @"user_123456";
    NSString *password = @"123ABC";
    KiiUser *user = [KiiUser userWithUsername:username andPassword:password];
    
    // Set custom fields.
    [user setObject:[NSNumber numberWithInt:30] forKey:@"age"];
    [user setObject:[NSNumber numberWithInt:0] forKey:@"score"];
    
    // Register the user.
    [user performRegistrationWithBlock:^(KiiUser *user, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    }];