Files
swiftcontrol/FUTURE_IMPROVEMENTS.md
2025-12-26 13:03:53 +00:00

6.0 KiB

Future Improvements for RevenueCat Integration

This document tracks potential improvements for the RevenueCat integration that are not critical but would enhance code quality and maintainability.

Code Quality Enhancements

1. Dependency Injection Consistency

Current State: The RevenueCatService uses callbacks for some values but direct access for others.

Issue:

  • Uses getDailyCommandLimit() callback
  • Uses isPurchasedNotifier.value directly ⚠️
  • Checks isTrialExpired and Platform.isAndroid directly ⚠️

Proposed Improvement:

// Add more callbacks for complete DI pattern
RevenueCatService(
  this._prefs, {
  required this.isPurchasedNotifier,
  required this.getDailyCommandLimit,
  required this.setDailyCommandLimit,
  required this.isAndroid,  // NEW
});

Priority: Low - Current implementation works correctly

Effort: Medium - Would require refactoring constructor and call sites


2. Magic Number for Android Command Limit

Current State:

if (!isTrialExpired && Platform.isAndroid) {
  setDailyCommandLimit(80);  // Hardcoded value
}

Issue: The value 80 is hardcoded without explanation.

Proposed Improvement:

// In RevenueCatService
static const int androidTrialCommandLimit = 80;

// Usage
if (!isTrialExpired && Platform.isAndroid) {
  setDailyCommandLimit(androidTrialCommandLimit);
}

Priority: Low - Value is only used once, well-documented in context

Effort: Trivial - Just extract to constant


3. Platform Detection Abstraction

Current State:

if (!isTrialExpired && Platform.isAndroid) {
  // Android-specific logic
}

Issue: Direct platform checks could be abstracted for testability.

Proposed Improvement:

// Pass platform info through DI
final bool isAndroidPlatform;

RevenueCatService(
  this._prefs, {
  // ... other params
  this.isAndroidPlatform = kIsAndroid,  // Can be mocked in tests
});

Priority: Very Low - Current approach is standard for Flutter

Effort: Low - Simple parameter addition


Feature Enhancements

4. Subscription Support

Current State: Only supports lifetime (non-consumable) purchases.

Proposed Addition:

  • Monthly subscriptions
  • Annual subscriptions
  • Subscription status tracking
  • Expiration handling

Priority: Medium - Depends on business requirements

Effort: High - Requires:

  • RevenueCat offering configuration
  • UI updates for subscription display
  • Subscription renewal handling
  • Cancellation support

5. Analytics Integration

Current State: No purchase analytics beyond logs.

Proposed Addition:

  • Track purchase attempts
  • Monitor conversion rates
  • A/B test different offerings
  • Revenue analytics

Priority: Low - Nice to have for business insights

Effort: Medium - Requires analytics SDK integration


6. Promotional Offers

Current State: No promotional offer support.

Proposed Addition:

  • iOS promotional offers
  • Android promo codes
  • Limited-time discounts
  • First-purchase incentives

Priority: Low - Marketing feature

Effort: Medium - RevenueCat SDK supports this


Testing Improvements

7. Unit Tests for RevenueCat Service

Current State: No unit tests for RevenueCat integration.

Proposed Addition:

test('RevenueCatService initializes with valid API key', () async {
  // Mock RevenueCat SDK
  // Verify initialization
});

test('RevenueCatService falls back gracefully without API key', () async {
  // Verify fallback behavior
});

Priority: Medium - Would improve confidence in changes

Effort: High - Requires mocking RevenueCat SDK


8. Integration Tests

Current State: Manual testing only.

Proposed Addition:

  • Automated purchase flow tests
  • Entitlement checking tests
  • Paywall presentation tests
  • Customer Center tests

Priority: Medium - Would catch regressions

Effort: Very High - Requires test environment setup


Documentation Enhancements

9. Video Tutorial

Current State: Text documentation only.

Proposed Addition:

  • Setup walkthrough video
  • RevenueCat dashboard configuration video
  • Build configuration demonstration

Priority: Low - Text docs are comprehensive

Effort: Medium - Recording and editing


10. Troubleshooting Flowchart

Current State: Text-based troubleshooting.

Proposed Addition:

  • Visual decision tree for common issues
  • Error code reference
  • Quick diagnosis guide

Priority: Very Low - Current docs are clear

Effort: Low - Create diagram


Implementation Priority

High Priority (Do Soon)

  • None currently - all critical issues resolved

Medium Priority (Consider for Next Sprint)

  • Unit tests (#7)
  • Subscription support (#4) - if business needs it

Low Priority (Backlog)

  • Extract magic number (#2) - trivial, do if touching that code
  • Analytics integration (#5) - if product team requests
  • Dependency injection consistency (#1) - only if refactoring for other reasons

Very Low Priority (Optional)

  • Platform detection abstraction (#3)
  • Promotional offers (#6)
  • Video tutorial (#9)
  • Troubleshooting flowchart (#10)
  • Integration tests (#8) - high effort, moderate value

Notes

  • Current implementation is production-ready as-is
  • These improvements are optional enhancements
  • Prioritize based on actual business/technical needs
  • Don't optimize prematurely - wait for real pain points

Decision Log

Why not implement these now?

  1. Time constraints - Minimal change requirement
  2. Working implementation - No critical issues
  3. YAGNI principle - Don't add complexity until needed
  4. Maintainability - Simpler code is easier to maintain
  5. Testing - Manual testing sufficient for initial release

When to revisit?

  • If adding subscriptions → Do #4, #5
  • If testing becomes pain point → Do #7, #8
  • If code becomes hard to maintain → Do #1, #2, #3
  • If users need help → Do #9, #10
  • If new promotional campaigns → Do #6