asa_helper.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:flutter/foundation.dart';
  4. import 'package:flutter_asa_attribution/flutter_asa_attribution.dart';
  5. import 'package:http/http.dart' as http;
  6. import 'package:location/utils/date_util.dart';
  7. import 'package:location/utils/mmkv_util.dart';
  8. import '../../device/atmob_platform_info.dart';
  9. import '../../utils/hash_utils.dart';
  10. class AsaHelper {
  11. AsaHelper._();
  12. static final String _orgId = "9038030";
  13. static final String _secret = "86728a25f9e806dc05bca13e6bffc16d";
  14. static final String _sign = HashUtils.md5String("$_secret&kiwi");
  15. static Map<String, dynamic>? attributionMap;
  16. static final _keyLocalAttributionMap = "local_attribution_map";
  17. static Future<String?> getToken() {
  18. return FlutterAsaAttribution.instance.attributionToken();
  19. }
  20. static Future<Map<String, dynamic>?> requestAttributionDetails() async {
  21. if (!Platform.isIOS) {
  22. return null;
  23. }
  24. if (attributionMap != null) {
  25. return attributionMap;
  26. }
  27. final String? local = KVUtil.getString(_keyLocalAttributionMap, null);
  28. if (local?.isNotEmpty == true) {
  29. try {
  30. attributionMap = jsonDecode(local!);
  31. return attributionMap;
  32. } catch (e) {
  33. debugPrint("asa 本地数据解析失败 $e");
  34. }
  35. }
  36. attributionMap =
  37. await FlutterAsaAttribution.instance.requestAttributionDetails();
  38. if (attributionMap != null) {
  39. KVUtil.putString(_keyLocalAttributionMap, jsonEncode(attributionMap));
  40. }
  41. return attributionMap;
  42. }
  43. static Future<bool> reportEvent(AsaEvent event, {double? amount}) async {
  44. if (!Platform.isIOS) {
  45. return false;
  46. }
  47. final attrMap = await requestAttributionDetails();
  48. final Map<String, dynamic> map = {
  49. "campaign_id": attrMap?["campaignId"] ?? "",
  50. "ad_group_id": attrMap?["adGroupId"] ?? "",
  51. "keyword_id": attrMap?["keywordId"] ?? "",
  52. "date": DateUtil.formatDateTime(DateUtil.getNow(), "yyyy-MM-dd"),
  53. "unique_device": atmobPlatformInfo.idfa ?? atmobPlatformInfo.idfv,
  54. "timezone": 'ORTZ',
  55. "event_name": event.value,
  56. };
  57. if (amount == null) {
  58. map.addAll({"event_val": 1});
  59. } else {
  60. map.addAll({"event_val": amount});
  61. }
  62. return reportBackendDataDetail(map);
  63. }
  64. static Future<bool> reportBackendDataDetail(
  65. Map<String, dynamic> params) async {
  66. try {
  67. final String url = _getReportDetailApi();
  68. final headers = {
  69. "Content-Type": "application/json",
  70. };
  71. debugPrint("asa 上报信息: $params");
  72. final requestBody = {"backend_data_detail": params};
  73. final resp = await http.post(
  74. Uri.parse(url),
  75. headers: headers,
  76. body: jsonEncode(requestBody),
  77. );
  78. if (resp.statusCode == 200) {
  79. final resMap = jsonDecode(resp.body);
  80. debugPrint("asa 上报结果: $resMap");
  81. return true;
  82. } else {
  83. debugPrint("asa 上报错误: ${resp.statusCode} ${resp.body}");
  84. return false;
  85. }
  86. } catch (e) {
  87. return false;
  88. }
  89. }
  90. static String _getReportDetailApi() {
  91. return 'http://asafrontend.mokiwi.com/api/asabackendDataDetail/add?org_id=$_orgId&sign=$_sign&debug=$kDebugMode';
  92. }
  93. }
  94. enum AsaEvent {
  95. active("active"), //激活
  96. register("register"), //注册
  97. pay("pay"); //付费
  98. const AsaEvent(this.value);
  99. final String value;
  100. }