โก๏ธ News Subscription is an app for reading and subscribing to news. Free users can read limited articles daily, save articles, and receive notifications. Prime users get unlimited access and extra features like setting reading alarms. The app also offers multiple subscription plans, with payment options available via Visa or digital wallets. Additionally, it sends notifications for new news updates using Firebase Cloud Messaging (FCM).
I wrote documentation to explain the app's logic for beginners and those implementing it in other frameworks like Flutter. I also want to clarify a few points: PDFNews Subscription.pdf
news.mp4
- Onboarding: Guides new users through the app
- Authentication:
- Users can create an account or sign in with Google for quick access.
- If they forget their password, they can reset it using the Forgot Password option.
- Welcome Notification: After logging in, users receive a personalized notification.
- Home Screen: Displays all the latest news articles. Users can swipe down to refresh and load new updates.
- Search Feature: Allows users to search for specific news articles by entering keywords.
- Details Screen:
- Save articles for later.
- Delete saved articles when no longer needed.
- Share news via WhatsApp or other platforms.
- Open articles in an external browser for a better reading experience.
- Bookmark Screen: Stores all saved articles for easy access.
- Settings:
- Update profile picture using the camera or gallery.
- Enable or disable notifications based on user preferences.
- Prime Users can set a reading alarm to ring every week on the same day as a reminder to read the news.
- Check subscription status, manage payments, or upgrade to a premium plan.
- Offline Mode: Users can read previously loaded news without an internet connection.
- Dark Mode & Light Mode: Offers a customizable reading experience.
- Subscription Plans: Multiple plans available for users to choose from.
- Secure Payments: Users can pay for subscriptions via Visa, Mastercard, or digital wallets.
- News Notifications: The app sends real-time notifications to keep users updated on the latest news.








































- Android (Kotlin)
- Jetpack Compose
- Hilt (Dependency Injection)
- Retrofit (API calls)
- Room (Local Storage, Paging support)
- Firebase (Firestore, Analytics, Authentication, FCM)
- Supabase (Storage)
- Payment Gateway (Paymob: Card, Wallet)
- Paging (Remote Mediator, Room Paging)
- Data Store Preferences
- Clean Architecture (Feature-based structure)
- Presentation Patterns (MVVM, MVI)
- Navigation Compose (Type-Safe Navigation)
- Testing (JUnit, Mockk)
- Notifications (Local, FCM)
- Services
- Broadcast Receivers (For system events)
- Kotlin Coroutines & Flow
- Kotlin Symbol Processing (KSP)
- Splash Screen
- Konfetti (For animations)
- Lottie Animations (For rich UI animations)
The application integrates with the following APIs:
- News API: Provides news data. More information can be found here.
- If You Want to Run the App on Android Studio:
- Clone this repository to your preferred directory using the following command:
git clone https://github.com/info-kareemmohamed/NewsSubscription
-
Open the cloned project in Android Studio.
-
To ensure the project fully leverages Firebase and Supabase, you need to add their configuration files as well as the following keys in your local.properties file.
- Include Configuration Files:
- Add the necessary configuration file for Firebase.
- Add the required configuration file for Supabase.
- Update
local.properties
Create or update your local.properties file with the following keys:
FIREBASE_SERVER_CLIENT_ID=YOUR_FIREBASE_SERVER_CLIENT_ID_HERE
API_KEY=YOUR_API_KEY_HERE
BASE_URL=YOUR_BASE_URL_HERE
SUPABASE_Key=YOUR_SUPABASE_KEY_HERE
SUPABASE_URL=YOUR_SUPABASE_URL_HERE
PAYMENT_BASE_URL=YOUR_PAYMENT_BASE_URL_HERE
Public_Key=YOUR_PUBLIC_KEY_HERE
Secret_Key=YOUR_SECRET_KEY_HERE
Mobile_Wallet_Payment_Method_ID=YOUR_MOBILE_WALLET_PAYMENT_METHOD_ID_HERE
Online_Card_Payment_Method_ID=YOUR_ONLINE_CARD_PAYMENT_METHOD_ID_HERE
- Build and run the app on an emulator or a physical device.