gravity_helper.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import 'dart:async';
  2. import 'package:flutter/widgets.dart';
  3. import 'package:gravity_engine/gravity_engine.dart';
  4. import 'package:gravity_engine/gravity_engine_method_channel.dart';
  5. import 'package:location/data/repositories/account_repository.dart';
  6. import 'package:location/data/repositories/config_repository.dart';
  7. import 'package:location/utils/atmob_log.dart';
  8. import 'package:location/utils/toast_util.dart';
  9. import '../../data/api/response/member_status_response.dart';
  10. import '../../data/consts/build_config.dart';
  11. import '../../data/consts/payment_type.dart';
  12. import '../../device/atmob_platform_info.dart';
  13. import '../../utils/async_util.dart';
  14. import '../../utils/mmkv_util.dart';
  15. typedef GravitySuccessCallback = void Function();
  16. class GravityHelper {
  17. static const String tag = 'GravityHelper';
  18. static const String _keyCurrentDeviceId = "current_device_id";
  19. static const bool _isShowToast = false;
  20. static String? _currentClientId;
  21. static bool? _isFromPromote;
  22. static bool isInit = false;
  23. static init() {
  24. if (isInit) {
  25. return;
  26. }
  27. isInit = true;
  28. _initialize(false);
  29. _uploadClientId();
  30. }
  31. static _uploadClientId() {
  32. AsyncUtil.retryWithExponentialBackoff<void>(() async {
  33. String deviceId = await _getDeviceId(false);
  34. ConfigRepository.getInstance().uploadClientId(deviceId);
  35. }, 5)
  36. .then((_) {
  37. AtmobLog.d(tag, 'gravity uploadClientId success');
  38. }).catchError((error) {
  39. AtmobLog.d(tag, 'gravity uploadClientId error:$error');
  40. });
  41. }
  42. static _initialize(bool refreshDeviceId,
  43. {GravitySuccessCallback? callback}) async {
  44. AsyncUtil.retryWithExponentialBackoff<bool>(() async {
  45. String deviceId = await _getDeviceId(refreshDeviceId);
  46. CancelableFuture<bool> initFuture = _gravityInitialize(deviceId);
  47. return await initFuture;
  48. }, 5)
  49. .then((isPromote) {
  50. _isFromPromote = isPromote;
  51. callback?.call();
  52. }).catchError((error) {
  53. if (error is CancelledError) {
  54. return;
  55. }
  56. _initialize(refreshDeviceId, callback: callback);
  57. });
  58. }
  59. //目前返回deviceId
  60. static Future<String> _getDeviceId(bool refreshDeviceId) async {
  61. String? currentDeviceId = _getCurrentDeviceId();
  62. if (currentDeviceId == null || refreshDeviceId) {
  63. MemberStatusResponse response =
  64. await AccountRepository.getInstance().getMemberStatus();
  65. KVUtil.putString(_keyCurrentDeviceId, response.deviceId);
  66. return response.deviceId;
  67. }
  68. return currentDeviceId;
  69. }
  70. static String? _getCurrentDeviceId() {
  71. return KVUtil.getString(_keyCurrentDeviceId, null);
  72. }
  73. static CancelableFuture<bool> _gravityInitialize(String deviceId) {
  74. return AsyncUtil.retryWithExponentialBackoff<bool>(() {
  75. return GravityEngine.initialize(
  76. GravityConfig.gravityAppId,
  77. GravityConfig.gravityAccessToken,
  78. deviceId,
  79. atmobPlatformInfo.channelName ?? '',
  80. BuildConfig.isDebug)
  81. .then((data) {
  82. _toast('gravity initialize success clientId:$deviceId');
  83. debugPrint('gravity initialize success clientId:$deviceId');
  84. GravityHelper._currentClientId = deviceId;
  85. return data;
  86. });
  87. }, 5);
  88. }
  89. static void _toast(String msg) {
  90. if (_isShowToast) {
  91. ToastUtil.show(msg);
  92. }
  93. }
  94. static void onLogin() {}
  95. static void onLogout() async {}
  96. static void _clearCurrentDeviceId() {
  97. KVUtil.putString(_keyCurrentDeviceId, null);
  98. }
  99. static bool? getIsFromPromote() {
  100. return _isFromPromote;
  101. }
  102. static void report(String eventId, {Map<String, dynamic>? params}) {
  103. GravityEngine.trackEvent(eventId, eventProperties: params);
  104. }
  105. static void reportPay(
  106. int payAmount, String orderNo, String productName, int payWay) {
  107. PayType payType;
  108. if (payWay == PayMethod.alipay) {
  109. payType = PayType.alipay;
  110. } else if (payWay == PayMethod.wechat) {
  111. payType = PayType.wechat;
  112. } else if (payWay == PayMethod.apple) {
  113. payType = PayType.apple;
  114. } else {
  115. payType = PayType.unknown;
  116. }
  117. GravityEngine.trackPay(
  118. orderNo, productName, payAmount, Currency.cny, payType);
  119. }
  120. }