Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: update analytics #1205

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/espressocash_app/lib/app.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import 'dart:async';

import 'package:auto_route/auto_route.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:provider/provider.dart';

import 'di.dart';
import 'features/accounts/services/accounts_bloc.dart';
import 'features/analytics/analytics_manager.dart';
import 'features/app_lock/app_lock.dart';
import 'features/authenticated/screens/authenticated_flow_screen.dart';
import 'features/sign_in/screens/sign_in_flow_screen.dart';
Expand Down Expand Up @@ -70,7 +70,7 @@ class _CryptopleaseAppState extends State<CryptopleaseApp> {
SignInFlowScreen.route(),
],
navigatorObservers: () => [
sl<AnalyticsManager>().analyticsObserver,
FirebaseAnalyticsObserver(analytics: sl<FirebaseAnalytics>()),
],
),
localizationsDelegates: AppLocalizations.localizationsDelegates,
Expand Down
4 changes: 4 additions & 0 deletions packages/espressocash_app/lib/di.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:dio/dio.dart';
import 'package:espressocash_api/espressocash_api.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';
Expand Down Expand Up @@ -54,4 +55,7 @@ abstract class AppModule {
@Named('isSaga')
Future<bool> isSaga(SeedVault vault) =>
vault.isAvailable(allowSimulated: !isProd);

@lazySingleton
FirebaseAnalytics get analytics => FirebaseAnalytics.instance;
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:injectable/injectable.dart';

@lazySingleton
import '../accounts/models/ec_wallet.dart';
import '../authenticated/auth_scope.dart';
import '../ramp/models/ramp_partner.dart';

@LazySingleton(scope: authScope)
class AnalyticsManager {
final FirebaseAnalytics _analytics = FirebaseAnalytics.instance;
AnalyticsManager(this._wallet);

FirebaseAnalyticsObserver get analyticsObserver =>
FirebaseAnalyticsObserver(analytics: _analytics);
final FirebaseAnalytics _analytics = FirebaseAnalytics.instance;
final ECWallet _wallet;

void swapTransactionCreated({
required String from,
Expand All @@ -19,25 +23,70 @@ class AnalyticsManager {
'from': from,
'to': to,
'amount': amount,
'userAddress': _wallet.address,
},
);

// User creates shareable link.
void linksCreated() => _analytics.logEvent(name: 'linksCreated');
void linkCreated(int amount) => _analytics.logEvent(
name: 'linkCreated',
parameters: {
'amount': amount,
'userAddress': _wallet.address,
},
);

// User pressed on the first shareable link.
void firstLinkReceived() => _analytics.logEvent(name: 'firstLinkReceived');
// User receives shareable link
void linkReceived() => _analytics.logEvent(
name: 'linkReceived',
parameters: {
'userAddress': _wallet.address,
},
);

// User pressed on the second shareable link.
void secondLinkReceived() => _analytics.logEvent(name: 'secondLinkReceived');
// User cancelled the link creation
void linkCancelled() => _analytics.logEvent(name: 'linkCancelled');

// User creates shareable link.
void singleLinkCreated() => _analytics.logEvent(name: 'singleLinkCreated');
// User creates a direct payment
void directPaymentCreated(int amount) => _analytics.logEvent(
name: 'directPaymentCreated',
parameters: {
'amount': amount,
'userAddress': _wallet.address,
},
);

// User pressed on the single link.
void singleLinkReceived() => _analytics.logEvent(name: 'singleLinkReceived');
// User creates an onramp payment
void onRampPaymentCreated({
required int amount,
required RampPartner partner,
}) =>
_analytics.logEvent(
name: 'onRampPaymentCreated',
parameters: {
'amount': amount,
'partner': partner.toString(),
'userAddress': _wallet.address,
},
);

// User creates a direct payment
void directPaymentCreated() =>
_analytics.logEvent(name: 'directPaymentCreated');
// User creates an offramp payment
void offRampPaymentCreated({
required int amount,
required RampPartner partner,
}) =>
_analytics.logEvent(
name: 'offRampPaymentCreated',
parameters: {
'amount': amount,
'partner': partner.toString(),
'userAddress': _wallet.address,
},
);

// User completes onboarding
void onboardingCompleted() => _analytics.setUserProperty(
name: 'completedOnboarding',
value: 'true',
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class _PendingILPListenerState extends State<PendingILPListener> {
final payment = LinkPayments.tryParse(link);

if (payment != null) {
sl<AnalyticsManager>().firstLinkReceived();
sl<AnalyticsManager>().linkReceived();
_processLink(payment);

return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import '../../../../ui/button.dart';
import '../../../accounts/models/account.dart';
import '../../../accounts/models/ec_wallet.dart';
import '../../../accounts/services/accounts_bloc.dart';
import '../../../analytics/analytics_manager.dart';
import '../data/onboarding_repository.dart';
import '../screens/onboarding_flow_screen.dart';

Expand Down Expand Up @@ -99,5 +100,11 @@ class _Content extends StatelessWidget {

extension OnboardingExt on BuildContext {
Future<bool?> launchOnboardingFlow() =>
router.push<bool?>(OnboardingFlowScreen.route());
router.push<bool?>(OnboardingFlowScreen.route()).then((result) {
if (result == true) {
sl<AnalyticsManager>().onboardingCompleted();
}

return result;
});
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:async';

import 'package:decimal/decimal.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
Expand All @@ -20,17 +22,18 @@ extension BuildContextExt on BuildContext {
}) =>
runWithLoader(this, () async {
const currency = Currency.usdc;
final amount = currency.decimalToInt(amountInUsdc);
final payment = await sl<ODPService>().create(
account: read<MyAccount>().wallet,
amount: CryptoAmount(
value: currency.decimalToInt(amountInUsdc),
value: amount,
cryptoCurrency: currency,
),
receiver: receiver,
reference: reference,
);

sl<AnalyticsManager>().directPaymentCreated();
sl<AnalyticsManager>().directPaymentCreated(amount);

return payment.id;
});
Expand All @@ -41,6 +44,6 @@ extension BuildContextExt on BuildContext {
payment,
account: read<MyAccount>().wallet,
);
sl<AnalyticsManager>().directPaymentCreated();
sl<AnalyticsManager>().directPaymentCreated(payment.amount.value);
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ extension BuildContextExt on BuildContext {
amount: amount,
account: read<MyAccount>().wallet,
);
sl<AnalyticsManager>().linksCreated();
sl<AnalyticsManager>().linkCreated(amount.value);

return payment.id;
});
Expand All @@ -30,7 +30,7 @@ extension BuildContextExt on BuildContext {
payment,
account: read<MyAccount>().wallet,
);
sl<AnalyticsManager>().linksCreated();
sl<AnalyticsManager>().linkCancelled();
});

Future<void> retryOLP({required OutgoingLinkPayment payment}) =>
Expand All @@ -39,6 +39,6 @@ extension BuildContextExt on BuildContext {
payment,
account: read<MyAccount>().wallet,
);
sl<AnalyticsManager>().linksCreated();
sl<AnalyticsManager>().linkCreated(payment.amount.value);
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'package:uuid/uuid.dart';
import '../../../core/amount.dart';
import '../../../core/currency.dart';
import '../../../data/db/db.dart';
import '../../analytics/analytics_manager.dart';
import '../../authenticated/auth_scope.dart';
import '../../tokens/token.dart';
import '../../tokens/token_list.dart';
Expand All @@ -36,12 +37,13 @@ typedef DepositDetails = ({

@Singleton(scope: authScope)
class OnRampOrderService implements Disposable {
OnRampOrderService(this._db, this._tokens);
OnRampOrderService(this._db, this._tokens, this._analyticsManager);

final Map<String, StreamSubscription<void>> _subscriptions = {};

final MyDatabase _db;
final TokenList _tokens;
final AnalyticsManager _analyticsManager;

@PostConstruct(preResolve: true)
Future<void> init() async {
Expand Down Expand Up @@ -93,6 +95,11 @@ class OnRampOrderService implements Disposable {
await _db.into(_db.onRampOrderRows).insert(order);
_subscribe(order.id);

_analyticsManager.onRampPaymentCreated(
partner: partner,
amount: submittedAmount.value,
);

return order.id;
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import '../../../core/amount.dart';
import '../../../core/currency.dart';
import '../../../data/db/db.dart';
import '../../accounts/models/ec_wallet.dart';
import '../../analytics/analytics_manager.dart';
import '../../authenticated/auth_scope.dart';
import '../../tokens/token_list.dart';
import '../../transactions/models/tx_results.dart';
Expand All @@ -43,6 +44,7 @@ class OffRampOrderService implements Disposable {
this._sender,
this._db,
this._tokens,
this._analyticsManager,
);

final Map<String, StreamSubscription<void>> _subscriptions = {};
Expand All @@ -52,6 +54,7 @@ class OffRampOrderService implements Disposable {
final TxSender _sender;
final MyDatabase _db;
final TokenList _tokens;
final AnalyticsManager _analyticsManager;

@PostConstruct(preResolve: true)
Future<void> init() async {
Expand Down Expand Up @@ -216,6 +219,11 @@ class OffRampOrderService implements Disposable {
await _db.into(_db.offRampOrderRows).insert(order);
_subscribe(order.id);

_analyticsManager.offRampPaymentCreated(
partner: partner,
amount: amount.value,
);

return order.id;
}
});
Expand Down