report method

Future<bool> report({
  1. required PlayReportData data,
  2. PlayBackEnvEnum env = PlayBackEnvEnum.production,
  3. String? authToken,
})

批量上报观看事件(Body 为 PlayReportDataauthToken 非空时用于鉴权(如页面销毁前 Obs 已清空 token 时需传入快照)

Implementation

Future<bool> report({
  required PlayReportData data,
  PlayBackEnvEnum env = PlayBackEnvEnum.production,
  String? authToken,
}) async {
  final token =
      authToken ?? TCICController.instance.getPlayBackObs().token.value;
  if (token.isEmpty || data.events.isEmpty) {
    return false;
  }
  final json = data.toJson();
  final baseUrl =
      env == PlayBackEnvEnum.production
          ? TCICConst.playBackApiBaseUrl
          : TCICConst.playBackApiBaseUrlTest;
  final url = '$baseUrl/reportEvents?token=${Uri.encodeComponent(token)}';
  TCICLog.info(
    'report url: $url',
    actionModule: ActionModule.playBackController.name,
    actionName: 'report',
  );
  TCICLog.info(
    'report json: $json',
    actionModule: ActionModule.playBackController.name,
    actionName: 'report',
  );
  var headers = {'Content-Type': 'application/json'};
  try {
    final response = await _dio.post<Map<String, dynamic>>(
      url,
      data: json,
      options: Options(
        headers: headers,
        validateStatus: (status) {
          return true;
        },
      ),
    );
    final code = response.statusCode;
    final raw = response.data;
    TCICLog.info(
      'report response status=$code data ${jsonEncode(raw)}',
      actionModule: ActionModule.playBackController.name,
      actionName: 'report',
    );
    if (code == null || code < 200 || code >= 300) {
      return false;
    }
    if (raw?['error_code'] == 0) return true;
    return false;
  } on DioException catch (error) {
    TCICLog.error(
      'report error DioException: ${error.toString()}',
      actionModule: ActionModule.playBackController.name,
      actionName: 'report',
    );
    return false;
  } catch (error) {
    TCICLog.error(
      'report error catch: ${error.toString()}',
      actionModule: ActionModule.playBackController.name,
      actionName: 'report',
    );
    return false;
  }
}