| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- import 'dart:async';
- import 'package:flutter/widgets.dart';
- import 'package:gravity_engine/gravity_engine.dart';
- import 'package:gravity_engine/gravity_engine_method_channel.dart';
- import '../../data/api/response/user_info_response.dart';
- import '../../data/consts/build_config.dart';
- import '../../data/consts/payment_type.dart';
- import '../../data/repository/account_repository.dart';
- import '../../device/atmob_platform_info.dart';
- import '../../utils/async_util.dart';
- import '../../utils/mmkv_util.dart';
- typedef GravitySuccessCallback = void Function();
- class GravityHelper {
- static const String _keyCurrentSsid = "current_ssid";
- static CancelableFuture<bool>? _initFuture;
- static String? _currentClientId;
- static bool? _isFromPromote;
- static init() async {
- _initialize(false);
- }
- static _initialize(bool refreshSSID,
- {GravitySuccessCallback? callback}) async {
- if (_initFuture != null) {
- _initFuture?.cancel();
- }
- _initFuture = AsyncUtil.retryWithExponentialBackoff<bool>(() async {
- String ssid = await _getSSID(refreshSSID);
- CancelableFuture<bool> initFuture = _gravityInitialize(ssid);
- _initFuture = initFuture;
- return await initFuture;
- }, 5);
- _initFuture?.then((isPromote) {
- _isFromPromote = isPromote;
- callback?.call();
- }).catchError((error) {
- _initialize(refreshSSID, callback: callback);
- });
- }
- static Future<String> _getSSID(bool refreshSSID) async {
- String? currentSSID = _getCurrentSSID();
- if (currentSSID == null || refreshSSID) {
- UserInfoResponse response =
- await AccountRepository.getInstance().getUserInfo();
- // 要用的是deviceID
- KVUtil.putString(_keyCurrentSsid, response.deviceId);
- return response.deviceId;
- }
- return currentSSID;
- }
- static String? _getCurrentSSID() {
- return KVUtil.getString(_keyCurrentSsid, null);
- }
- static CancelableFuture<bool> _gravityInitialize(String ssid) {
- return AsyncUtil.retryWithExponentialBackoff<bool>(() {
- return GravityEngine.initialize(
- GravityConfig.gravityAppId,
- GravityConfig.gravityAccessToken,
- ssid,
- atmobPlatformInfo.channelName ?? '',
- BuildConfig.isDebug)
- .then((data) {
- debugPrint('gravity initialize($ssid) success');
- GravityHelper._currentClientId = ssid;
- return data;
- });
- }, 5);
- }
- static void onLogin() {
- _clearCurrentSSID();
- _initialize(true, callback: () {
- if (_currentClientId != null) {
- GravityEngine.login(_currentClientId!);
- }
- });
- }
- static void onLogout() async {
- _currentClientId = null;
- await GravityEngine.logout();
- _initialize(false, callback: null);
- }
- static void _clearCurrentSSID() {
- KVUtil.putString(_keyCurrentSsid, null);
- }
- static bool? getIsFromPromote() {
- return _isFromPromote;
- }
- static void report(String eventId, {Map<String, dynamic>? params}) {
- GravityEngine.trackEvent(eventId, eventProperties: params);
- }
- static void reportPay(
- int payAmount, String orderNo, String productName, int payWay) {
- PayType payType;
- if (payWay == PayMethod.alipay) {
- payType = PayType.alipay;
- } else if (payWay == PayMethod.wechat) {
- payType = PayType.wechat;
- } else if (payWay == PayMethod.apple) {
- payType = PayType.apple;
- } else {
- payType = PayType.unknown;
- }
- GravityEngine.trackPay(
- orderNo, productName, payAmount, Currency.cny, payType);
- }
- }
|