Author: Bilal
Version: 1.2.1
Platform: Android (API 29+)
A powerful Android application for sending personalized bulk SMS messages to your contacts. MassPing integrates with your Google contacts and local device contacts to enable efficient mass messaging with personalization features.
- ๐ฑ Bulk SMS Messaging - Send personalized messages to multiple contacts simultaneously
- ๐ Google Contacts Integration - Sync and access your Google contacts seamlessly
- ๐ Contact Groups Support - Organize and message entire contact groups
- โจ Message Personalization - Use placeholders like
{name},{nickname},{firstname}for personalized messages - ๐ Message Preview - Preview personalized messages before sending
- ๐ Delivery Tracking - Monitor message sending status and delivery progress (best effort)
- ๐ Background Processing - Send messages in the background with foreground service
- โ๏ธ Configurable SMS Settings - Adjust message delay (1-30s) and timeout (5-60s) to prevent carrier blocking
- ๐จ Modern UI - Built with Jetpack Compose and Material 3 design
- ๐ Google Sign-In - Secure authentication with Google account
- โก Real-time Updates - Live progress tracking and status updates in both foreground and background
- ๐ Smart Notifications - Rich progress notifications with percentage and status during bulk sending
- ๐ฑ Responsive Design - Optimized for various screen sizes
- โก Immediate Responsiveness - Send button responds instantly with real-time progress updates
- ๐๏ธ MVVM Architecture - Clean architecture with ViewModels and Repository pattern
- ๐พ Local Database - Room database for message history and persistent storage
- ๐ Coroutines - Asynchronous operations with Kotlin Coroutines and StateFlow
- ๐ฏ Permission Management - Smart permission handling for SMS and contacts
- ๐ก๏ธ Error Handling - Comprehensive error handling and user feedback
- ๐ก Singleton Pattern - Shared repository instance ensuring consistent state across UI and background service
- Language: Kotlin
- UI Framework: Jetpack Compose
- Architecture: MVVM with Repository Pattern
- Database: Room (SQLite)
- Async: Kotlin Coroutines + Flow
- Jetpack Compose - Modern Android UI toolkit
- Room Database - Local data persistence
- Google Play Services Auth - Google Sign-In functionality
- Google People API - Google Contacts integration
- Navigation Compose - In-app navigation
- ViewModel Compose - State management
- Accompanist Permissions - Runtime permission handling
- Android OS: API level 29 (Android 10) or higher
- Target SDK: 36
- Java Version: 21
- Kotlin: 2.2.10
SEND_SMS- Send SMS messagesREAD_CONTACTS- Access device contactsGET_ACCOUNTS- Access Google account informationREAD_PHONE_STATE- Monitor SMS delivery statusFOREGROUND_SERVICE- Run background SMS servicePOST_NOTIFICATIONS- Show progress notifications (API 33+)
- Telephony - SMS sending capability (optional for tablets)
- Android Studio - Latest stable version
- Java 21 - For development and compilation
- Google Console Account - For Google People API access
- Physical Android Device - Recommended for SMS testing (emulator has limited SMS functionality)
-
Clone the repository
git clone <repository-url> cd MassPing
-
Open in Android Studio
- Open Android Studio
- Select "Open an existing project"
- Navigate to the cloned MassPing directory
-
Configure Google API
- Go to Google Cloud Console
- Create a new project or select existing one
- Enable the People API
- Create OAuth 2.0 credentials for Android
- Add your app's SHA-1 fingerprint
-
Build and Run
./gradlew build ./gradlew installDebug
# Clean build
./gradlew clean
# Run tests
./gradlew test
# Generate signed APK
./gradlew assembleRelease- Launch the app and sign in with your Google account
- Grant permissions for SMS, contacts, and notifications
- Sync contacts from your Google account or use device contacts
- Navigate to New Message screen
- Select recipients - individual contacts or entire groups
- Compose your message with personalization placeholders:
{name}- Contact's display name (nickname if available, otherwise full name){nickname}- Contact's nickname{firstname}- Contact's first name
- Preview messages to see personalized content
- Adjust SMS settings (optional) - Configure message delay and timeout in Settings
- Send - Messages will be sent in the background with real-time progress tracking
- Development: App works on emulators with timeout-based status updates
- Production: Best experience on physical devices with full SMS broadcast support
- Testing: Emulator shows simulated progress after 10-second timeout
- Message Delay: Adjust time between SMS messages (1-30 seconds)
- Higher values prevent carrier blocking and Android bulk SMS warnings
- Recommended: 5-10 seconds for most carriers
- Timeout Settings: Configure SMS delivery confirmation wait time (5-60 seconds)
- Useful for emulators or devices with limited SMS feedback
- Recommended: 10+ seconds for emulators, 5-15 seconds for devices
- View contacts from both Google and device storage
- Create contact groups for easier bulk messaging
- Update contact information including nicknames for personalization
app/src/main/java/dev/bilalahmad/massping/
โโโ MainActivity.kt # Main application entry point
โโโ data/
โ โโโ database/ # Room database implementation
โ โ โโโ MessageHistoryDao.kt # Message history data access
โ โ โโโ MassPingDatabase.kt # Database configuration
โ โ โโโ MessageHistory.kt # Message history entity
โ โโโ models/ # Data models
โ โ โโโ Contact.kt # Contact data model
โ โ โโโ ContactGroup.kt # Contact group model
โ โ โโโ Message.kt # Message models
โ โโโ repository/ # Repository pattern implementation
โ โ โโโ MassPingRepository.kt # Main data repository
โ โโโ services/ # Background services
โ โโโ BackgroundSmsService.kt # SMS background service
โ โโโ NativeContactsService.kt # Android contacts integration
โ โโโ MessagePersonalizationService.kt # Message personalization
โ โโโ SmsService.kt # SMS functionality
โโโ ui/ # User interface components
โ โโโ MassPingApp.kt # Main app composition
โ โโโ components/ # Reusable UI components
โ โ โโโ MessageHistoryItem.kt # Message history display
โ โโโ screens/ # App screens
โ โ โโโ ContactsScreen.kt # Contacts management
โ โ โโโ LoginScreen.kt # Google Sign-In
โ โ โโโ MessagesScreen.kt # Message history and tracking
โ โ โโโ NewMessageScreen.kt # Message composition
โ โ โโโ SettingsScreen.kt # SMS settings and configuration
โ โโโ theme/ # Material 3 theming
โ โโโ utils/ # UI utilities
โ โโโ viewmodels/ # State management
โโโ MainViewModel.kt # Main ViewModel
- Compile SDK: 36
- Min SDK: 29 (Android 10)
- Target SDK: 36
- Version Code: 3
- Version Name: "1.0.2"
The app includes ProGuard configuration for release builds to optimize and obfuscate code.
Excludes conflicting META-INF files from Google API dependencies for proper APK generation.
The project includes both unit tests and instrumented tests:
# Run unit tests
./gradlew testDebugUnitTest
# Run instrumented tests (requires connected device/emulator)
./gradlew connectedAndroidTest
# Run all tests
./gradlew testMassPing uses an automated release management system with semantic versioning.
The project follows Semantic Versioning (MAJOR.MINOR.PATCH):
- PATCH: Bug fixes (1.0.0 โ 1.0.1)
- MINOR: New features (1.0.0 โ 1.1.0)
- MAJOR: Breaking changes (1.0.0 โ 2.0.0)
Use the release script to automate the entire release workflow:
# Feature release
./scripts/release.sh minor "Add SMS scheduling and templates"
# Bug fix release
./scripts/release.sh patch "Fix Android 14 permission issues"
# Hotfix from existing release branch
./scripts/release.sh patch "Critical SMS delivery fix" --hotfix
# Major release (manual decision only)
./scripts/release.sh major "Complete architecture overhaul"The automated release process handles:
- ๐ Version Management: Updates
build.gradle.ktsversion and code - ๐ Changelog: Updates
CHANGELOG.mdwith release notes and date - ๐ณ Git Flow: Creates release branches (
release/vX.Y.Z) - ๐๏ธ Build Process: Builds and tests debug/release APKs and AABs
- ๐ท๏ธ Git Tags: Creates and pushes version tags
- ๐ฆ GitHub Releases: Creates GitHub releases with APK and AAB uploads
- ๐ Branch Management: Merges release branch back to main
- ๐ฑ Multi-Format Distribution: Uploads APKs (direct install) and AABs (Google Play)
-
GitHub CLI: Install and authenticate
brew install gh gh auth login
-
Keystore: Release keystore should be in
~/keystores/massping-release-key.jks -
Clean Working Directory: Commit or stash any pending changes
- Normal Releases:
mainโrelease/vX.Y.Zโ merge back tomain - Hotfixes:
release/vX.Y.0โrelease/vX.Y.Zโ selective merge
All releases are available on GitHub with direct APK downloads:
- Production: Download
MassPing-vX.Y.Z-release.apk - Testing: Download
MassPing-vX.Y.Z-debug.apk
Latest Release: GitHub Releases
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow Kotlin coding conventions
- Use meaningful variable and function names
- Add KDoc comments for public APIs
- Maintain consistent formatting with the existing codebase
This project is licensed under the MIT License - see the LICENSE file for details.
For support, feature requests, or bug reports, please create an issue in the repository.
- Google for the People API and Play Services
- Android Jetpack team for Compose and architecture components
- Kotlin team for the amazing programming language
- Material Design team for the design system
Screenshots coming soon - add screenshots of the app in action here
Future enhancements planned:
- MMS support for media messages
- Message templates and scheduling
- Message analytics and reporting
- Multi-language support
- Dark theme customization
- Export/import contact groups
- Message encryption options