gravity_helper.dart 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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 CancelableFuture<bool>? _initFuture;
  21. static String? _currentClientId;
  22. static bool? _isFromPromote;
  23. static init() {
  24. _initialize(false);
  25. _uploadClientId();
  26. }
  27. static _uploadClientId() {
  28. AsyncUtil.retryWithExponentialBackoff<void>(() async {
  29. String deviceId = await _getDeviceId(false);
  30. ConfigRepository.getInstance().uploadClientId(deviceId);
  31. }, 5)
  32. .then((_) {
  33. AtmobLog.d(tag, 'gravity uploadClientId success');
  34. }).catchError((error) {
  35. AtmobLog.d(tag, 'gravity uploadClientId error:$error');
  36. });
  37. }
  38. static _initialize(bool refreshDeviceId,
  39. {GravitySuccessCallback? callback}) async {
  40. _initFuture?.cancel();
  41. _initFuture = AsyncUtil.retryWithExponentialBackoff<bool>(() async {
  42. String deviceId = await _getDeviceId(refreshDeviceId);
  43. CancelableFuture<bool> initFuture = _gravityInitialize(deviceId);
  44. _initFuture = initFuture;
  45. return await initFuture;
  46. }, 5);
  47. _initFuture?.then((isPromote) {
  48. _isFromPromote = isPromote;
  49. callback?.call();
  50. }).catchError((error) {
  51. _initialize(refreshDeviceId, callback: callback);
  52. });
  53. }
  54. //目前返回deviceId
  55. static Future<String> _getDeviceId(bool refreshDeviceId) async {
  56. String? currentDeviceId = _getCurrentDeviceId();
  57. if (currentDeviceId == null || refreshDeviceId) {
  58. MemberStatusResponse response =
  59. await AccountRepository.getInstance().getMemberStatus();
  60. KVUtil.putString(_keyCurrentDeviceId, response.deviceId);
  61. return response.deviceId;
  62. }
  63. return currentDeviceId;
  64. }
  65. static String? _getCurrentDeviceId() {
  66. return KVUtil.getString(_keyCurrentDeviceId, null);
  67. }
  68. static CancelableFuture<bool> _gravityInitialize(String deviceId) {
  69. return AsyncUtil.retryWithExponentialBackoff<bool>(() {
  70. return GravityEngine.initialize(
  71. GravityConfig.gravityAppId,
  72. GravityConfig.gravityAccessToken,
  73. deviceId,
  74. atmobPlatformInfo.channelName ?? '',
  75. BuildConfig.isDebug)
  76. .then((data) {
  77. _toast('gravity initialize success clientId:$deviceId');
  78. debugPrint('gravity initialize success clientId:$deviceId');
  79. GravityHelper._currentClientId = deviceId;
  80. return data;
  81. });
  82. }, 5);
  83. }
  84. static void _toast(String msg) {
  85. if (_isShowToast) {
  86. ToastUtil.show(msg);
  87. }
  88. }
  89. static void onLogin() {
  90. _clearCurrentDeviceId();
  91. _initialize(true, callback: () {
  92. if (_currentClientId != null) {
  93. GravityEngine.login(_currentClientId!);
  94. }
  95. });
  96. }
  97. static void onLogout() async {
  98. _currentClientId = null;
  99. await GravityEngine.logout();
  100. _initialize(false, callback: null);
  101. }
  102. static void _clearCurrentDeviceId() {
  103. KVUtil.putString(_keyCurrentDeviceId, null);
  104. }
  105. static bool? getIsFromPromote() {
  106. return _isFromPromote;
  107. }
  108. static void report(String eventId, {Map<String, dynamic>? params}) {
  109. GravityEngine.trackEvent(eventId, eventProperties: params);
  110. }
  111. static void reportPay(
  112. int payAmount, String orderNo, String productName, int payWay) {
  113. PayType payType;
  114. if (payWay == PayMethod.alipay) {
  115. payType = PayType.alipay;
  116. } else if (payWay == PayMethod.wechat) {
  117. payType = PayType.wechat;
  118. } else if (payWay == PayMethod.apple) {
  119. payType = PayType.apple;
  120. } else {
  121. payType = PayType.unknown;
  122. }
  123. GravityEngine.trackPay(
  124. orderNo, productName, payAmount, Currency.cny, payType);
  125. }
  126. }