ユーザ属性
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: メソッドを利用します。
-
属性キー 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))") } -
属性キー 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))") } -
属性キー 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))") }
ユーザーの属性を取得する
-
現在設定されているユーザーの属性を取得する例です。
[[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"]))") } } -
ユーザーが設定していない属性も含め全ての属性を取得する例です。
[[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"]))") } }