Logo Lanfrica

solydflow/solydflow

Domain:

digital infrastructure

Record type:

software
Creator:
sol
Host:
The Solid Revenue Flow for African Mobile Apps. # SolydFlow Flutter SDK The Solid Revenue Infrastructure for African Mobile Apps. --- ## What is SolydFlow? SolydFlow is a hybrid revenue SDK designed specifically for the African market. It unifies **StoreKit (iOS)**, **Google Play Billing (Android)**, and **Local Mobile Money (Paystack/Flutterwave)** into a single, offline-first API. Stop writing 3 different payment integrations. Write one line of code, and let SolydFlow handle the fragmentation, entitlement caching, and network retries. ## Key Features - 🌍 **Hybrid Payments:** Seamlessly switch between Apple IAP and Mobile Money (M-Pesa, USSD, Bank Transfer) based on user location. - ⚡ **Offline-First Entitlements:** Entitlements are cached and encrypted locally. Your app knows if a user is "Pro" even without internet access. - 🧠 **Smart Retry Engine:** Built for unstable networks. If a webhook is delayed, SolydFlow polls and queues receipts to ensure no purchase is lost. - 🔄 **Web-to-App Sync:** Instantly unlock features in the app after a web-based payment. --- ## Getting Started ### 1. Installation Add the package to your `pubspec.yaml`: ```yaml dependencies: solydflow_flutter: ^0.1.0 ``` ### 2. Initialization Initialize the SDK in your `main.dart`. You only need your public API Key. ```dart import 'package:solydflow_flutter/solydflow.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // Initialize SolydFlow await SolydFlow.configure( apiKey: "sf_live_YOUR_API_KEY", appUserID: "user_123" // Optional: Link to your internal Auth ID ); runApp(MyApp()); } ``` ### 3. Making a Purchase You don't need to check `Platform.isIOS`. SolydFlow intelligently determines whether to show the native Apple/Google sheet or a localized Web Payment flow. ```dart Future buySubscription() async { try { // Attempt purchase for the 'premium_monthly' package. CustomerInfo customerInfo = await SolydFlow.purchasePackage("premium_monthly"); if (customerInfo.entitlements.all["pro"]!.isActiv …