ビーコン管理

ビーコン管理機能はBluetooth Low Energy(BLE)を利用したビーコン端末と端末設置場所を管理する基本的な仕組みを提供します。

アプリで受信したビーコン端末の識別情報をBaaS@rakuza SDKに問い合わせすることで、ユーザーが端末設置場所に来場したことを検知することができます。

このページでは、ビーコン管理機能を利⽤する実装例を紹介します。

ヒント

BaaS@rakuza SDKではビーコン検知を行う処理はサポートしていません。ビーコン検知を行うには、iOSの場合Core Locationopen in new window、Androidの場合Android Beacon Libraryopen in new windowなどのライブラリを使用してください。

注意

ビーコン管理機能はライトプラン、ベーシックプランではご利用いただけません。利用したい場合は、製品サイトopen in new windowよりお問い合わせください。

ビーコン端末情報を登録する

ビーコン端末情報はビーコン端末の識別情報です。

管理画面の「ビーコン管理」→「ビーコン端末一覧」を開くと、ビーコン端末の一覧を確認できます。また、同画面の「新規登録」よりビーコン端末の新規作成をすることができます。

「ビーコンタイプ」はビーコンの規格です。例えば、iBeaconopen in new windowを選択した場合、ビーコンID(UUID)、major、minorを識別情報として入力してください。

スポット情報を登録する

スポット情報はビーコン端末の端末設置場所の情報です。

管理画面の「ビーコン管理」→「スポット一覧」を開くと、スポットの一覧を確認できます。また、同画面の「新規登録」よりスポットの新規作成をすることができます。

「設置ビーコン端末」は設置したビーコン端末を選択してください。

また、「ビーコン検知範囲」で検知するビーコンの範囲を制御することができます。ビーコン検知範囲は検知対象としたいRSSI(受信信号強度)の閾値を入力してください。

ビーコン端末情報を検索する

一般的にアプリからビーコン検知する際は、検知するビーコンの識別情報を指定します。例えば、iBeaconの場合はビーコンID(UUID)、major、minorを指定します。

ビーコン識別情報の検索はgetBeaconListメソッド(JavaScript・FlutterはBeaconQuery.findメソッド)で⾏います。

検索条件、ソート条件を指定することができます。指定可能な条件については検索条件ソート条件を参照してください。

// 検索条件
let searchConditions = [
    // beacon_type_cdが"0001"(iBeacon)のレコードに絞り込む
    RKZSearchCondition(RKZSearchConditionEqual, searchColumn: "beacon_type_cd", searchValueArray: ["0001"])
]
// ソート条件
let sortConditions = [
    // sort_noの昇順にソート
    RKZSortCondition(RKZSortTypeAsc, sortColumn: "sort_no")
]

RKZService.sharedInstance().getBeaconList(searchConditions, sortConditionArray: sortConditions) { beacons, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        // 取得したビーコンID、major、minorのビーコン検知を行う
        beacons.forEach { item in
            print("code:", item.code ?? "")
            print("name:", item.name ?? "")
            print("beacon_type_cd:", item.beacon_type_cd ?? "") // ビーコンタイプ
            print("beacon_id:", item.beacon_id ?? "") // ビーコンID
            print("major:", item.major ?? "") // major
            print("minor:", item.minor ?? "") // minor
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    // beacon_type_cdが"0001"(iBeacon)のレコードに絞り込む
    [[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionEqual searchColumn:@"beacon_type_cd" searchValueArray:@[@"0001"]]
];
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
    // sort_noの昇順にソート
    [[RKZSortCondition alloc] initWithSortType:RKZSortTypeAsc sortColumn:@"sort_no"]
];

[[RKZService sharedInstance] getBeaconList:searchConditions sortConditionArray:sortConditions withBlock:^(NSArray<RKZBeaconData *> * _Nonnull beacons, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        // 取得したビーコンID、major、minorのビーコン検知を行う
        for (RKZBeaconData *item in beacons) {
            NSLog(@"code: %@", item.code);
            NSLog(@"name: %@", item.name);
            NSLog(@"beacon_type_cd: %@", item.beacon_type_cd); // ビーコンタイプ
            NSLog(@"beacon_id: %@", item.beacon_id); // ビーコンID
            NSLog(@"major: %@", item.major); // major
            NSLog(@"minor: %@", item.minor); // minor
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
// 検索条件
val searchConditions = listOf(
    // beacon_type_cdが"0001"(iBeacon)のレコードに絞り込む
    RKZSearchCondition(RKZSearchCondition.EQUAL, "beacon_type_cd", listOf("0001"))
)
// ソート条件
val sortConditions = listOf(
    // sort_noの昇順にソート
    RKZSortCondition(RKZSortCondition.ASC, "sort_no")
)

RKZClient.getInstance().getBeaconList(searchConditions, sortConditions) { beacons, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        // 取得したビーコンID、major、minorのビーコン検知を行う
        beacons.forEach {
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "name: ${it.name}")
            Log.d(TAG, "beaconTypeCd: ${it.beaconTypeCd}") // ビーコンタイプ
            Log.d(TAG, "beaconId: ${it.beaconId}") // ビーコンID
            Log.d(TAG, "major: ${it.major}") // major
            Log.d(TAG, "minor: ${it.minor}") // minor
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    // beacon_type_cdが"0001"(iBeacon)のレコードに絞り込む
    new RKZSearchCondition(RKZSearchCondition.EQUAL, "beacon_type_cd", Arrays.asList("0001"))
);
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
    // sort_noの昇順にソート
    new RKZSortCondition(RKZSortCondition.ASC, "sort_no")
);

RKZClient.getInstance().getBeaconList(searchConditions, sortConditions, new OnGetBeaconListListener() {
    @Override
    public void onGetBeaconList(List<Beacon> beacons, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            // 取得したビーコンID、major、minorのビーコン検知を行う
            for (Beacon item : beacons) {
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "name: " + item.getName());
                Log.d(TAG, "beaconTypeCd: " + item.getBeaconTypeCd()); // ビーコンタイプ
                Log.d(TAG, "beaconId: " + item.getBeaconId()); // ビーコンID
                Log.d(TAG, "major: " + item.getMajor()); // major
                Log.d(TAG, "minor: " + item.getMinor()); // minor
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
// 検索条件
var searchConditions = [
  // beacon_type_cdが"0001"(iBeacon)のレコードに絞り込む
  RKZSearchCondition.equal('beacon_type_cd', '0001')
]
// ソート条件
var sortConditions = [
  // sort_noの昇順にソート
  RKZSortCondition.asc('sort_no')
]

RKZClient.getBeaconList(searchConditions, sortConditions, function (beacons) {
  // 成功時
  // 取得したビーコンID、major、minorのビーコン検知を行う
  beacons.forEach(function (item) {
    console.debug('code:', item.code)
    console.debug('name:', item.name)
    console.debug('beacon_type_cd:', item.beacon_type_cd) // ビーコンタイプ
    console.debug('beacon_id:', item.beacon_id) // ビーコンID
    console.debug('major:', item.major) // major
    console.debug('minor:', item.minor) // minor
  })
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const result = await RKZ.Beacon.query()
    .equalTo('beacon_type_cd', '0001') // beacon_type_cdが"0001"(iBeacon)のレコードに絞り込む
    .asc('sort_no') // sort_noの昇順にソート
    .find()

// 取得したビーコンID、major、minorのビーコン検知を行う
result.forEach(item => {
  console.debug('code:', item.code)
  console.debug('name:', item.name)
  console.debug('beacon_type_cd:', item.beacon_type_cd) // ビーコンタイプ
  console.debug('beacon_id:', item.beacon_id) // ビーコンID
  console.debug('major:', item.major) // major
  console.debug('minor:', item.minor) // minor
})
final query = RKZClient.instance.beaconQuery()
  ..equalTo('beacon_type_cd', '0001') // beacon_type_cdが"0001"(iBeacon)のレコードに絞り込む
  ..asc('sort_no'); // sort_noの昇順にソート
final beacons = await query.find();

// 取得したビーコンID、major、minorのビーコン検知を行う
beacons.forEach((item) {
  print('code: ${item.code}');
  print('name: ${item.name}');
  print('beaconTypeCd: ${item.beaconTypeCd}'); // ビーコンタイプ
  print('beaconId: ${item.beaconId}'); // ビーコンID
  print('major: ${item.major}'); // major
  print('minor: ${item.minor}'); // minor
});

スポット情報を検索する

検知したビーコン情報でスポット情報を検索することで、端末設置場所を特定することができます。

スポット情報の検索はgetSpotListメソッド(JavaScript・FlutterはSpotQuery.findメソッド)で⾏います。

検索条件、ソート条件を指定することができます。指定可能な条件については検索条件ソート条件を参照してください。

// 検索条件
let searchConditions = [
    // 設置ビーコン端末が"DB000001"のレコードに絞り込む
    RKZSearchCondition(RKZSearchConditionLikeOr, searchColumn: "beacon", searchValueArray: ["DB000001"])
]
// ソート条件
let sortConditions = [
    // sort_noの昇順にソート
    RKZSortCondition(RKZSortTypeAsc, sortColumn: "sort_no")
]

RKZService.sharedInstance().getSpotList(searchConditions, sortConditionArray: sortConditions) { spots, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        spots.forEach { item in
            print("code:", item.code ?? "")
            print("name:", item.name ?? "")
            print("beacon:", item.beacon ?? "") // 設置ビーコン端末
            print("beacon_range_for_iphone:", item.beacon_range_for_iphone ?? "") // ビーコン検知範囲(iOS用)
            print("beacon_range_for_android:", item.beacon_range_for_android ?? "") // ビーコン検知範囲(Android用)
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    // 設置ビーコン端末が"DB000001"のレコードに絞り込む
    [[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionLikeOr searchColumn:@"beacon" searchValueArray:@[@"DB000001"]]
];
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
    // sort_noの昇順にソート
    [[RKZSortCondition alloc] initWithSortType:RKZSortTypeAsc sortColumn:@"sort_no"]
];

[[RKZService sharedInstance] getSpotList:searchConditions sortConditionArray:sortConditions withBlock:^(NSArray<RKZSpotData *> * _Nonnull spots, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZSpotData *item in spots) {
            NSLog(@"code: %@", item.code);
            NSLog(@"name: %@", item.name);
            NSLog(@"beacon: %@", item.beacon); // 設置ビーコン端末
            NSLog(@"beacon_range_for_iphone: %@", item.beacon_range_for_iphone); // ビーコン検知範囲(iOS用)
            NSLog(@"beacon_range_for_android: %@", item.beacon_range_for_android); // ビーコン検知範囲(Android用)
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
// 検索条件
val searchConditions = listOf(
    // 設置ビーコン端末が"DB000001"のレコードに絞り込む
    RKZSearchCondition(RKZSearchCondition.LIKE_OR, "beacon", listOf("DB000001"))
)
// ソート条件
val sortConditions = listOf(
    // sort_noの昇順にソート
    RKZSortCondition(RKZSortCondition.ASC, "sort_no")
)

RKZClient.getInstance().getSpotList(searchConditions, sortConditions) { spots, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        spots.forEach {
            Log.d(TAG, "code: ${it.code}")
            Log.d(TAG, "name: ${it.name}")
            Log.d(TAG, "beacon: ${it.beacon}") // 設置ビーコン端末
            Log.d(TAG, "beaconRangeForIphone: ${it.beaconRangeForIphone}") // ビーコン検知範囲(iOS用)
            Log.d(TAG, "beaconRangeForAndroid: ${it.beaconRangeForAndroid}") // ビーコン検知範囲(Android用)
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    // 設置ビーコン端末が"DB000001"のレコードに絞り込む
    new RKZSearchCondition(RKZSearchCondition.LIKE_OR, "beacon", Arrays.asList("DB000001"))
);
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
    // sort_noの昇順にソート
    new RKZSortCondition(RKZSortCondition.ASC, "sort_no")
);

RKZClient.getInstance().getSpotList(searchConditions, sortConditions, new OnGetSpotListListener() {
    @Override
    public void onGetSpotList(List<Spot> spots, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (Spot item : spots) {
                Log.d(TAG, "code: " + item.getCode());
                Log.d(TAG, "name: " + item.getName());
                Log.d(TAG, "beacon: " + item.getBeacon()); // 設置ビーコン端末
                Log.d(TAG, "beaconRangeForIphone: " + item.getBeaconRangeForIphone()); // ビーコン検知範囲(iOS用)
                Log.d(TAG, "beaconRangeForAndroid: " + item.getBeaconRangeForAndroid()); // ビーコン検知範囲(Android用)
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
// 検索条件
var searchConditions = [
  // 設置ビーコン端末が"DB000001"のレコードに絞り込む
  RKZSearchCondition.likeOr('beacon', ['DB000001'])
]
// ソート条件
var sortConditions = [
  // sort_noの昇順にソート
  RKZSortCondition.asc('sort_no')
]

RKZClient.getSpotList(searchConditions, sortConditions, function (beacons) {
  // 成功時
  // 取得したビーコンID、major、minorのビーコン検知を行う
  beacons.forEach(function (item) {
    console.debug('code:', item.code)
    console.debug('name:', item.name)
    console.debug('beacon:', item.beacon) // 設置ビーコン端末
    console.debug('beacon_range_for_iphone:', item.beacon_range_for_iphone) // ビーコン検知範囲(iOS用)
    console.debug('beacon_range_for_android:', item.beacon_range_for_android) // ビーコン検知範囲(Android用)
  })
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const result = await RKZ.Beacon.spotQuery()
    .containsInArray('beacon', ['DB000001']) // 設置ビーコン端末が"DB000001"のレコードに絞り込む
    .asc('sort_no') // sort_noの昇順にソート
    .find()

result.forEach(item => {
  console.debug('code:', item.code)
  console.debug('name:', item.name)
  console.debug('beacon:', item.beacon) // 設置ビーコン端末
  console.debug('beacon_range_for_iphone:', item.beacon_range_for_iphone) // ビーコン検知範囲(iOS用)
  console.debug('beacon_range_for_android:', item.beacon_range_for_android) // ビーコン検知範囲(Android用)
})
final query = RKZClient.instance.spotQuery()
  ..containsInArray('beacon', ['DB000001']) // 設置ビーコン端末が"DB000001"のレコードに絞り込む
  ..asc('sort_no'); // sort_noの昇順にソート
final spots = await query.find();

spots.forEach((item) {
  print('code: ${item.code}');
  print('name: ${item.name}');
  print('beacon: ${item.beacon}'); // 設置ビーコン端末
  print('beacon_range_for_iphone: ${item.beaconRangeForIphone}'); // ビーコン検知範囲(iOS用)
  print('beacon_range_for_android: ${item.beaconRangeForAndroid}'); // ビーコン検知範囲(Android用)
});

返却されたビーコン検知範囲と実際に受信したビーコンのRSSI(受信信号強度)を比較することで、検知するビーコンの範囲を制御することができます。

ビーコン検知コンタクトを追加する

ビーコンを検知した時に、コンタクト履歴(ビーコン検知コンタクト)を残すことができます。

ビーコン検知コンタクトの追加はaddDetectBeaconContactメソッドで行います。

メソッドの引数に検知したビーコンの情報を設定して呼び出してください。

RKZService.sharedInstance().getSystemDate { now, responseStatus in
    guard responseStatus.isSuccess, let now = now else { return }
    
    let userAccessToken = "xxx"
    let beaconId = "c6e210e1-85da-4871-af2c-2ecdeaad205e" // 検知したビーコンのビーコンID
    let beaconSpotCd = "0001" // 検知したビーコンのスポットコード
    let rssi = "-50" // 検知したビーコンのRSSI
    let remarks = "備考" // 備考

    RKZService.sharedInstance().addDetectBeaconContact(userAccessToken, beaconId: beaconId, contactDate: now, beaconSpotCd: beaconSpotCd, rssi: rssi, remarks: remarks) { statusCode, responseStatus in
        if responseStatus.isSuccess {
            // 成功時
            print("登録完了")
        } else {
            // 失敗
            print("statusCode:", responseStatus.statusCode.rawValue)
            print("message:", responseStatus.message ?? "")
        }
    }
}
[[RKZService sharedInstance] getSystemDateWithBlock:^(NSDate * _Nullable now, RKZResponseStatus * _Nonnull responseStatus) {
    if (!responseStatus.isSuccess) return;
    
    NSString *userAccessToken = @"xxx";
    NSString *beaconId = @"c6e210e1-85da-4871-af2c-2ecdeaad205e"; // 検知したビーコンのビーコンID
    NSString *beaconSpotCd = @"0001"; // 検知したビーコンのスポットコード
    NSString *rssi = @"-50"; // 検知したビーコンのRSSI
    NSString *remarks = @"備考"; // 備考
    
    [[RKZService sharedInstance] addDetectBeaconContact:userAccessToken beaconId:beaconId contactDate:now beaconSpotCd:beaconSpotCd rssi:rssi remarks:remarks withBlock:^(RKZApiStatusCode statusCode, RKZResponseStatus * _Nonnull responseStatus) {
        if (responseStatus.isSuccess) {
            // 成功時
            NSLog(@"登録完了");
        } else {
            // 失敗
            NSLog(@"statusCode: %ld", responseStatus.statusCode);
            NSLog(@"message: %@", responseStatus.message);
        }
    }];
}];
RKZClient.getInstance().getSystemDate { now, rkzResponseStatus ->
    if (!rkzResponseStatus.isSuccess) return@getSystemDate

    val userAccessToken = "xxx"
    val beaconId = "c6e210e1-85da-4871-af2c-2ecdeaad205e" // 検知したビーコンのビーコンID
    val beaconSpotCd = "0001" // 検知したビーコンのスポットコード
    val rssi = -50 // 検知したビーコンのRSSI
    val remarks = "備考" // 備考

    RKZClient.getInstance().addDetectBeaconContact(userAccessToken, beaconId, beaconSpotCd, rssi, now, remarks) { statusCode, rkzResponseStatus ->
        if (rkzResponseStatus.isSuccess) {
            // 成功時
            Log.d(TAG, "登録完了")
        } else {
            // 失敗
            Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
            Log.e(TAG, "message: ${rkzResponseStatus.message}")
        }
    }
}
RKZClient.getInstance().getSystemDate(new OnGetSystemDateListener() {
    @Override
    public void onGetSystemDateListener(Calendar now, RKZResponseStatus rkzResponseStatus) {
        if (!rkzResponseStatus.isSuccess()) return;

        String userAccessToken = "xxx";
        String beaconId = "c6e210e1-85da-4871-af2c-2ecdeaad205e"; // 検知したビーコンのビーコンID
        String beaconSpotCd = "0001"; // 検知したビーコンのスポットコード
        Integer rssi = -50; // 検知したビーコンのRSSI
        String remarks = "備考"; // 備考

        RKZClient.getInstance().addDetectBeaconContact(userAccessToken, beaconId, beaconSpotCd, rssi, now, remarks, new OnAddDetectBeaconContactListener() {
            @Override
            public void onAddDetectBeaconContact(String statusCode, RKZResponseStatus rkzResponseStatus) {
                if (rkzResponseStatus.isSuccess()) {
                    // 成功時
                    Log.d(TAG, "登録完了");
                } else {
                    // 失敗
                    Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
                    Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
                }
            }
        });
    }
});
RKZClient.getSystemDate(function (now) {
  var userAccessToken = 'xxx'
  var beaconId = 'c6e210e1-85da-4871-af2c-2ecdeaad205e' // 検知したビーコンのビーコンID
  var beaconSpotCd = '0001' // 検知したビーコンのスポットコード
  var rssi = -50 // 検知したビーコンのRSSI
  var remarks = '備考' // 備考

  RKZClient.addDetectBeaconContact(userAccessToken, beaconId, beaconSpotCd, rssi, new Date(now), remarks, function (statusCode) {
    // 成功時
    console.debug('登録完了')
  }, function (error) {
    // 失敗時
    console.error('status_code:', error.status_code)
    console.error('message:', error.message)
  })
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const userAccessToken = 'xxx'

await RKZ.Beacon.addContact(userAccessToken, {
  beacon_id: 'c6e210e1-85da-4871-af2c-2ecdeaad205e', // 検知したビーコンのビーコンID
  beacon_spot_cd: '0001', // 検知したビーコンのスポットコード
  rssi: -50, // 検知したビーコンのRSSI
  remarks: '備考' // 備考
})
final userAccessToken = 'xxx';
final now = await RKZClient.instance.now();

await RKZClient.instance.addBeaconContact(
    userAccessToken,
    contactDate: now,
    beaconId: 'c6e210e1-85da-4871-af2c-2ecdeaad205e', // 検知したビーコンのビーコンID
    beaconSpotCd: '0001', // 検知したビーコンのスポットコード
    rssi: -50, // 検知したビーコンのRSSI
    remarks: '備考' // 備考
);

管理画面の「コンタクト管理」→「コンタクト履歴検索」を開き、「コンタクト」を「ビーコン検知」で検索すると、登録したビーコン検知コンタクトを確認することができます。

ヒント

ビーコン検知コンタクトはコンタクト種別が「ビーコン検知」(0012)のコンタクト履歴として追加されます。

ビーコン検知コンタクトを検索する

ビーコン検知コンタクトの検索はgetDetectBeaconContactメソッド(JavaScript・FlutterはBeaconContactQuery.findメソッド)で⾏います。

検索条件、ソート条件を指定することができます。指定可能な条件については検索条件ソート条件を参照してください。

let userAccessToken = "xxx"

// 検索条件
let searchConditions = [
    // beacon_spot_cdが"0001"のレコードに絞り込む
    RKZSearchCondition(RKZSearchConditionEqual, searchColumn: "beacon_spot_cd", searchValueArray: ["0001"])
]
// ソート条件
let sortConditions = [
    // contact_dateの降順にソート
    RKZSortCondition(RKZSortTypeDesc, sortColumn: "contact_date")
]

RKZService.sharedInstance().getDetectBeaconContact(userAccessToken, searchConditionArray: searchConditions, sortConditionArray: sortConditions) { contacts, responseStatus in
    if responseStatus.isSuccess {
        // 成功時
        contacts.forEach { item in
            print("contact_no:", item.contact_no ?? "")
            print("contact_date:", item.contact_date ?? "")
            print("beacon_id:", item.beacon_id ?? "")
            print("beacon_spot_cd:", item.beacon_spot_cd ?? "")
            print("rssi:", item.rssi ?? "")
            print("remarks:", item.remarks ?? "")
        }
    } else {
        // 失敗
        print("statusCode:", responseStatus.statusCode.rawValue)
        print("message:", responseStatus.message ?? "")
    }
}
NSString *userAccessToken = @"xxx";

// 検索条件
NSArray<RKZSearchCondition *> *searchConditions = @[
    // beacon_spot_cdが"0001"のレコードに絞り込む
    [[RKZSearchCondition alloc] initWithSearchConditionType:RKZSearchConditionEqual searchColumn:@"beacon_spot_cd" searchValueArray:@[@"0001"]]
];
// ソート条件
NSArray<RKZSortCondition *> *sortConditions = @[
    // contact_dateの降順にソート
    [[RKZSortCondition alloc] initWithSortType:RKZSortTypeDesc sortColumn:@"contact_date"]
];

[[RKZService sharedInstance] getDetectBeaconContact:userAccessToken searchConditionArray:searchConditions sortConditionArray:sortConditions withBlock:^(NSArray<RKZBeaconDetectContactData *> * _Nonnull contacts, RKZResponseStatus * _Nonnull responseStatus) {
    if (responseStatus.isSuccess) {
        // 成功時
        for (RKZBeaconDetectContactData *item in contacts) {
            NSLog(@"contact_no: %@", item.contact_no);
            NSLog(@"contact_date: %@", item.contact_date);
            NSLog(@"beacon_id: %@", item.beacon_id);
            NSLog(@"beacon_spot_cd: %@", item.beacon_spot_cd);
            NSLog(@"rssi: %@", item.rssi);
            NSLog(@"remarks: %@", item.remarks);
        }
    } else {
        // 失敗
        NSLog(@"statusCode: %ld", responseStatus.statusCode);
        NSLog(@"message: %@", responseStatus.message);
    }
}];
val userAccessToken = "xxx"

// 検索条件
val searchConditions = listOf(
    // beacon_spot_cdが"0001"のレコードに絞り込む
    RKZSearchCondition(RKZSearchCondition.EQUAL, "beacon_spot_cd", listOf("0001"))
)
// ソート条件
val sortConditions = listOf(
    // contact_dateの降順にソート
    RKZSortCondition(RKZSortCondition.DESC, "contact_date")
)

RKZClient.getInstance().getDetectBeaconContact(userAccessToken, searchConditions, sortConditions) { contacts, rkzResponseStatus ->
    if (rkzResponseStatus.isSuccess) {
        // 成功時
        contacts.forEach {
            Log.d(TAG, "contactNo: ${it.contactNo}")
            Log.d(TAG, "contactDate: ${it.contactDate}")
            Log.d(TAG, "beaconId: ${it.beaconId}")
            Log.d(TAG, "beaconSpotCd: ${it.beaconSpotCd}")
            Log.d(TAG, "rssi: ${it.rssi}")
            Log.d(TAG, "remarks: ${it.remarks}")
        }
    } else {
        // 失敗
        Log.e(TAG, "statusCode: ${rkzResponseStatus.statusCode}")
        Log.e(TAG, "message: ${rkzResponseStatus.message}")
    }
}
String userAccessToken = "xxx";

// 検索条件
List<RKZSearchCondition> searchConditions = Arrays.asList(
    // beacon_spot_cdが"0001"のレコードに絞り込む
    new RKZSearchCondition(RKZSearchCondition.EQUAL, "beacon_spot_cd", Arrays.asList("0001"))
);
// ソート条件
List<RKZSortCondition> sortConditions = Arrays.asList(
    // contact_dateの降順にソート
    new RKZSortCondition(RKZSortCondition.DESC, "contact_date")
);

RKZClient.getInstance().getDetectBeaconContact(userAccessToken, searchConditions, sortConditions, new OnGetDetectBeaconContactListener() {
    @Override
    public void onGetDetectBeaconContact(List<BeaconDetectContact> contacts, RKZResponseStatus rkzResponseStatus) {
        if (rkzResponseStatus.isSuccess()) {
            // 成功時
            for (BeaconDetectContact item : contacts) {
                Log.d(TAG, "contactNo: " + item.getContactNo());
                Log.d(TAG, "contactDate: " + item.getContactDate());
                Log.d(TAG, "beaconId: " + item.getBeaconId());
                Log.d(TAG, "beaconSpotCd: " + item.getBeaconSpotCd());
                Log.d(TAG, "rssi: " + item.getRssi());
                Log.d(TAG, "remarks: " + item.getRemarks());
            }
        } else {
            // 失敗
            Log.e(TAG, "statusCode: " + rkzResponseStatus.getStatusCode());
            Log.e(TAG, "message: " + rkzResponseStatus.getMessage());
        }
    }
});
var userAccessToken = 'xxx'

// 検索条件
var searchConditions = [
  // beacon_spot_cdが"0001"のレコードに絞り込む
  RKZSearchCondition.equal('beacon_spot_cd', '0001')
]
// ソート条件
var sortConditions = [
  // contact_dateの降順にソート
  RKZSortCondition.desc('contact_date')
]

RKZClient.getDetectBeaconContact(userAccessToken, searchConditions, sortConditions, function (contacts) {
  // 成功時
  contacts.forEach(function (item) {
    console.debug('contact_no:', item.contact_no)
    console.debug('contact_date:', item.contact_date)
    console.debug('beacon_id:', item.beacon_id)
    console.debug('beacon_spot_cd:', item.beacon_spot_cd)
    console.debug('rssi:', item.rssi)
    console.debug('remarks:', item.remarks)
  })
}, function (error) {
  // 失敗時
  console.error('status_code:', error.status_code)
  console.error('message:', error.message)
})
const userAccessToken = 'xxx'

const contacts = await RKZ.Beacon.contactQuery(userAccessToken)
    .equalTo('beacon_spot_cd', '0001') // beacon_spot_cdが"0001"のレコードに絞り込む
    .desc('contact_date') // contact_dateの降順にソート
    .find()

contacts.forEach(item => {
  console.debug('contact_no:', item.contact_no)
  console.debug('contact_date:', item.contact_date)
  console.debug('beacon_id:', item.beacon_id)
  console.debug('beacon_spot_cd:', item.beacon_spot_cd)
  console.debug('rssi:', item.rssi)
  console.debug('remarks:', item.remarks)
})
final query = RKZClient.instance.beaconContactQuery(userAccessToken)
  ..equalTo('beacon_spot_cd', '0001') // beacon_spot_cdが"0001"のレコードに絞り込む
  ..desc('contact_date'); // contact_dateの降順にソート
final contacts = await query.find();

contacts.forEach((item) {
  print('contactNo: ${item.contactNo}');
  print('contactDate: ${item.contactDate}');
  print('beaconId: ${item.beaconId}');
  print('beaconSpotCd: ${item.beaconSpotCd}');
  print('rssi: ${item.rssi}');
  print('remarks: ${item.remarks}');
});