コンテンツにスキップ

ユーザ属性

FANSHIP では、性別や年齢層、趣味などといった属性をエンドユーザーに設定することができます。

設定された属性は、「 属性絞り込み配信 」などで利用することができます。

エンドユーザーに提示する属性および選択肢は、利用開始時に申請 する必要があり、SDK側から変更することはできません。

属性を設定する方法は2通りあり、エンドユーザーが属性設定画面から視覚的に設定する方法と、API を経由して設定する方法があります。


画面からユーザ属性を設定する

PopinfoSegmentSettingsViewController、または PopinfoSegmentSettingsV2ViewController を使い、エンドユーザーの属性を設定することができます。

デリゲートプロトコルを宣言する

PopinfoSegmentSettingsViewController での宣言方法は以下の通りです。

PopinfoSegmentSettingsViewController を使用するクラスに PopinfoSegmentSettingsViewControllerDelegate プロトコルを記述します。UIViewControllerを継承した ViewController クラスを例にすると、以下のようにプロトコルの使用を宣言します。

// ViewController.h

@interface ViewController : UIViewController <PopinfoSegmentSettingsViewControllerDelegate>

@end
// ViewController.swift

class ViewController : UIViewController, PopinfoSegmentSettingsViewControllerDelegate {

}

PopinfoSegmentSettingsV2ViewController での宣言方法は以下の通りです。

PopinfoSegmentSettingV2ViewController を使用するクラスに PopinfoSegmentSettingsV2BaseViewControllerDelegate プロトコルを記述します。UIViewControllerを継承した ViewController クラスを例にすると、以下のようにプロトコルの使用を宣言します。

// ViewController.h

@interface ViewController : UIViewController <PopinfoSegmentSettingsV2BaseViewControllerDelegate>

@end
// ViewController.swift

class ViewController : UIViewController, PopinfoSegmentSettingsV2BaseViewControllerDelegate {

}

初期化方法

PopinfoSegmentSettingsViewController の初期化方法は以下の通りです。

PopinfoSegmentSettingsViewController *segmentVC = [[PopinfoSegmentSettingsViewController alloc] initWithNibName:@"PopinfoSegmentSettingsViewController" bundle:[NSBundle mainBundle]];
segmentVC.delegate = self;
let segmentVC = PopinfoSegmentSettingsViewController(nibName:"PopinfoSegmentSettingsViewController", bundle:Bundle.main)
segmentVC.delegate = self

PopinfoSegmentSettingsViewControllerについて

PopinfoSegmentSettingsViewControllerはWKWebViewベースのViewControllerです。

PopinfoSegmentSettingsV2ViewController の初期化方法は以下の通りです。

PopinfoSegmentSettingsV2ViewController *segmentVC = [[PopinfoSegmentSettingsV2ViewController alloc] initWithNibName:@"PopinfoSegmentSettingsV2ViewController" bundle:[NSBundle mainBundle]];
segmentVC.delegate = self;
let segmentVC = PopinfoSegmentSettingsV2ViewController(nibName:"PopinfoSegmentSettingsV2ViewController", bundle:Bundle.main)
segmentVC.delegate = self

PopinfoSegmentSettingsV2ViewControllerについて

PopinfoSegmentSettingsV2ViewControllerはUITableViewベースのViewControllerです。

デリゲートメソッドを実装する

属性設定処理が終了したときに呼ばれるデリゲートメソッドを実装してください。

PopinfoSegmentSettingsViewControllerDelegate の実装は以下の通りです。

/// 属性設定が完了したタイミングを他クラスにデリゲートする。
- (void)popinfoSegmentSettingsViewControllerDidFinishSetting:(PopinfoSegmentSettingsViewController *)viewController;

PopinfoSegmentSettingsViewController では、通信失敗などのエラーアラート画面の「閉じる」ボタンを押したときに呼ばれます。メソッド内では画面を閉じる処理などを実装してください。

// MARK: - PopinfoSegmentSettingsViewControllerDelegate
- (void)popinfoSegmentSettingsViewControllerDidFinishSetting:(PopinfoSegmentSettingsViewController *)viewController {
    // 属性設定画面を閉じる
    [self dismissViewControllerAnimated:YES completion:nil];
}
// MARK: - PopinfoSegmentSettingsViewControllerDelegate
func popinfoSegmentSettingsViewControllerDidFinishSetting(_ viewController: PopinfoSegmentSettingsViewController) {
    // 属性設定画面を閉じる
    dismiss(animated: true, completion: nil)
}

PopinfoSegmentSettingsV2BaseViewControllerDelegate の実装は以下の通りです。

/// 属性設定処理が終了したときに呼ばれる
- (void)popinfoSegmentSettingsV2BaseViewControllerDidFinishSetting:(PopinfoSegmentSettingsV2BaseViewController *)viewController;

PopinfoSegmentSettingsV2ViewController では、画面下部の「キャンセル」「送信」ボタンを押したときに呼ばれます。メソッド内では画面を閉じる処理などを実装してください。

// MARK: - PopinfoSegmentSettingsV2BaseViewControllerDelegate
- (void)popinfoSegmentSettingsV2BaseViewControllerDidFinishSetting:(PopinfoSegmentSettingsV2BaseViewController *)viewController {
    // 属性設定画面を閉じる
    [self dismissViewControllerAnimated:YES completion:nil];
}
// MARK: - PopinfoSegmentSettingsV2BaseViewControllerDelegate
func popinfoSegmentSettingsV2BaseViewControllerDidFinishSetting(_ viewController: PopinfoSegmentSettingsV2BaseViewController) {
    // 属性設定画面を閉じる
    dismiss(animated: true, completion: nil)
}

画面をカスタマイズする

PopinfoSegmentSettingsBaseViewController を継承したクラスを作成して独自の処理を実装してください。PopinfoSegmentSettingsViewController を直接編集することも可能です。

PopinfoSegmentSettingsV2BaseViewController を継承したクラスを作成して独自の処理を実装してください。PopinfoSegmentSettingsV2ViewController を直接編集することも可能です。


APIからユーザ属性を設定する

ユーザーの属性を設定する場合、PopinfoReceiver クラスの setSegments:forKey:completion: メソッドを利用します。

  1. 属性キー 200 に属性値 4 をセットする例です。

    NSDictionary<NSString *, NSArray<NSString *> *> *dict = @{
            @"200": @[@"4"]
    };
    [[PopinfoReceiver sharedReceiver]setSegmentsWithParameters:dict completion:^(BOOL isOk, NSString * _Nullable errorCode) {
        // 設定の結果をダンプ
        NSLog(@"setSegments isOk = %d, errorCode = %@", isOk, errorCode);
    }];
    
    PopinfoReceiver.shared.setSegments(parameters: ["200": ["4"]]) { isOk, errorCode in
        // 設定の結果をダンプ
        print("setSegments isOk = \(String(describing: isOk)), errorCode = \(String(describing: errorCode))")
    }
    
  2. 属性キー 800 に属性値 218 と 219 をセットする例です。

    NSDictionary<NSString *, NSArray<NSString *> *> *dict = @{
            @"800": @[@"218", @"219"]
    };
    [[PopinfoReceiver sharedReceiver]setSegmentsWithParameters:dict completion:^(BOOL isOk, NSString * _Nullable errorCode) {
        // 設定の結果をダンプ
        NSLog(@"setSegments isOk = %d, errorCode = %@", isOk, errorCode);
    }];
    
    PopinfoReceiver.shared.setSegments(parameters: ["800": ["218", "219"]]) { isOk, errorCode in
        // 設定の結果をダンプ
        print("setSegments isOk = \(String(describing: isOk)), errorCode = \(String(describing: errorCode))")
    }
    
  3. 属性キー 200 の属性値をクリアする例です。

    NSDictionary<NSString *, NSArray<NSString *> *> *dict = @{
            @"200": @[]
    };
    [[PopinfoReceiver sharedReceiver]setSegmentsWithParameters:dict completion:^(BOOL isOk, NSString * _Nullable errorCode) {
        // 設定の結果をダンプ
        NSLog(@"setSegments isOk = %d, errorCode = %@", isOk, errorCode);
    }];
    
    PopinfoReceiver.shared.setSegments(parameters: ["200": []]) { isOk, errorCode in
        // 設定の結果をダンプ
        print("setSegments isOk = \(String(describing: isOk)), errorCode = \(String(describing: errorCode))")
    }
    

ユーザーの属性を取得する

  1. 現在設定されているユーザーの属性を取得する例です。

    [[PopinfoReceiver sharedReceiver]getSegmentsWithCompletion:^(BOOL isOk, NSString * _Nullable errorCode, NSArray<NSDictionary *> * _Nullable segmentArray) {
        // segmentArray 内に取得した属性が入っている。取得した属性をダンプ
        for (NSDictionary *segment in segmentArray) {
            NSLog(@"is_default=%@", [segment objectForKey:@"is_default"]);
            NSLog(@"value_name=%@", [segment objectForKey:@"value_name"]);
            NSLog(@"is_multiple=%@", [segment objectForKey:@"is_multiple"]);
            NSLog(@"value_id=%@", [segment objectForKey:@"value_id"]);
            NSLog(@"key_id=%@", [segment objectForKey:@"key_id"]);
            NSLog(@"key_name=%@", [segment objectForKey:@"key_name"]);
            NSLog(@"is_set=%@", [segment objectForKey:@"is_set"]);
            NSLog(@"is_visible=%@", [segment objectForKey:@"is_visible"]);
        }
    }];
    
    PopinfoReceiver.shared.getSegmentsWithCompletion { isOk, errorCode, segmentAry in
        guard let segmentArray: [[AnyHashable: Any]] = segmentAry else {
            return
        }
        // segmentArray 内に取得した属性が入っている。取得した属性をダンプ
        for segment in segmentArray {
            print("is_default=\(String(describing: segment["is_default"]))")
            print("value_name=\(String(describing: segment["value_name"]))")
            print("is_multiple=\(String(describing: segment["is_multiple"]))")
            print("value_id=\(String(describing: segment["value_id"]))")
            print("key_id=\(String(describing: segment["key_id"]))")
            print("key_name=\(String(describing: segment["key_name"]))")
            print("is_set=\(String(describing: segment["is_set"]))")
            print("is_visible=\(String(describing: segment["is_visible"]))")
        }
    }
    
  2. ユーザーが設定していない属性も含め全ての属性を取得する例です。

    [[PopinfoReceiver sharedReceiver]getSegmentsAllWithCompletion:^(BOOL isOk, NSString * _Nullable errorCode, NSArray<NSDictionary *> * _Nullable segmentArray) {
        // segmentArray 内に取得した属性が入っている。取得した属性をダンプ
        for (NSDictionary *segment in segmentArray) {
            NSLog(@"is_default=%@", [segment objectForKey:@"is_default"]);
            NSLog(@"value_name=%@", [segment objectForKey:@"value_name"]);
            NSLog(@"is_multiple=%@", [segment objectForKey:@"is_multiple"]);
            NSLog(@"value_id=%@", [segment objectForKey:@"value_id"]);
            NSLog(@"key_id=%@", [segment objectForKey:@"key_id"]);
            NSLog(@"key_name=%@", [segment objectForKey:@"key_name"]);
            NSLog(@"is_set=%@", [segment objectForKey:@"is_set"]);
            NSLog(@"is_visible=%@", [segment objectForKey:@"is_visible"]);
        }
    }];
    
    PopinfoReceiver.shared.getSegmentsAll { isOk, errorCode, segmentAry in
        guard let segmentArray: [[AnyHashable: Any]] = segmentAry else {
            return
        }
        // segmentArray 内に取得した属性が入っている。取得した属性をダンプ
        for segment in segmentArray {
            print("is_default=\(String(describing: segment["is_default"]))")
            print("value_name=\(String(describing: segment["value_name"]))")
            print("is_multiple=\(String(describing: segment["is_multiple"]))")
            print("value_id=\(String(describing: segment["value_id"]))")
            print("key_id=\(String(describing: segment["key_id"]))")
            print("key_name=\(String(describing: segment["key_name"]))")
            print("is_set=\(String(describing: segment["is_set"]))")
            print("is_visible=\(String(describing: segment["is_visible"]))")
        }
    }