import 'dart:convert'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter_asa_attribution/flutter_asa_attribution.dart'; import 'package:http/http.dart' as http; import 'package:location/utils/date_util.dart'; import 'package:location/utils/mmkv_util.dart'; import '../../device/atmob_platform_info.dart'; import '../../utils/hash_utils.dart'; class AsaHelper { AsaHelper._(); static final String _orgId = "9038030"; static final String _secret = "86728a25f9e806dc05bca13e6bffc16d"; static final String _sign = HashUtils.md5String("$_secret&kiwi"); static Map? attributionMap; static final _keyLocalAttributionMap = "local_attribution_map"; static Future getToken() { return FlutterAsaAttribution.instance.attributionToken(); } static Future?> requestAttributionDetails() async { if (!Platform.isIOS) { return null; } if (attributionMap != null) { return attributionMap; } final String? local = KVUtil.getString(_keyLocalAttributionMap, null); if (local?.isNotEmpty == true) { try { attributionMap = jsonDecode(local!); return attributionMap; } catch (e) { debugPrint("asa 本地数据解析失败 $e"); } } attributionMap = await FlutterAsaAttribution.instance.requestAttributionDetails(); if (attributionMap != null) { KVUtil.putString(_keyLocalAttributionMap, jsonEncode(attributionMap)); } return attributionMap; } static Future reportEvent(AsaEvent event, {double? amount}) async { if (!Platform.isIOS) { return false; } final attrMap = await requestAttributionDetails(); final Map map = { "campaign_id": attrMap?["campaignId"] ?? "", "ad_group_id": attrMap?["adGroupId"] ?? "", "keyword_id": attrMap?["keywordId"] ?? "", "date": DateUtil.formatDateTime(DateUtil.getNow(), "yyyy-MM-dd"), "unique_device": atmobPlatformInfo.idfa ?? atmobPlatformInfo.idfv, "timezone": 'ORTZ', "event_name": event.value, }; if (amount == null) { map.addAll({"event_val": 1}); } else { map.addAll({"event_val": amount}); } return reportBackendDataDetail(map); } static Future reportBackendDataDetail( Map params) async { try { final String url = _getReportDetailApi(); final headers = { "Content-Type": "application/json", }; debugPrint("asa 上报信息: $params"); final requestBody = {"backend_data_detail": params}; final resp = await http.post( Uri.parse(url), headers: headers, body: jsonEncode(requestBody), ); if (resp.statusCode == 200) { final resMap = jsonDecode(resp.body); debugPrint("asa 上报结果: $resMap"); return true; } else { debugPrint("asa 上报错误: ${resp.statusCode} ${resp.body}"); return false; } } catch (e) { return false; } } static String _getReportDetailApi() { return 'http://asafrontend.mokiwi.com/api/asabackendDataDetail/add?org_id=$_orgId&sign=$_sign&debug=$kDebugMode'; } } enum AsaEvent { active("active"), //激活 register("register"), //注册 pay("pay"); //付费 const AsaEvent(this.value); final String value; }