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.valuedirectly ⚠️ - Checks
isTrialExpiredandPlatform.isAndroiddirectly ⚠️
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?
- Time constraints - Minimal change requirement
- Working implementation - No critical issues
- YAGNI principle - Don't add complexity until needed
- Maintainability - Simpler code is easier to maintain
- 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