report method
Future<bool>
report({
- required PlayReportData data,
- PlayBackEnvEnum env = PlayBackEnvEnum.production,
- String? authToken,
批量上报观看事件(Body 为 PlayReportData)
authToken 非空时用于鉴权(如页面销毁前 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;
}
}