⚠️ Since August 2023 Affinidi API stopped working. You can download mock build of the app.
Use[email protected]
login and1234567Ab
password to get into the application.
AffinidiID is a VC wallet app built for learning purpose. Created to dive into the technical aspects of Self-Sovereign Identity and Verifiable Credentials concepts using Affinidi open APIs. The app was created to pactice with Clean Architecture.
Actually, it's a native android client close to Affinidi wallet application but with the possibility to issue a test credential. The last version covers the following use cases:
User profile
- Sign up
- Sign in
- View profile info (username, DID)
- Change password
- Logout
- Reset password
Verifiable Credentials
- Issue credentials
- Store credentials in Affinidi Wallet
- View credentials (list + details)
- Share credentials via QR code
- Verify credentials
- Delete credentials
Screenshots
Demo GIF
- Attempts to learn clean architecture approach. Presentation / data / domain layers each in a separate module.
- Single activity and Navigation component (with SafeArgs) to navigate across fragments.
- Kotlin coroutines for asynchronous operations.
- Hilt for dependency injection.
- View binding is used to interact with views within fragments and recyclerview adapters.
- ViewBindingPropertyDelegate lib to make work with view binding simplier (avoid boilerplate and safe calls)
- Retrofit for making API requests (plus OkHttp Logging Interceptor).
- Room for credentials caching.
- Timber for logging.
- CircleImageView for rounded images, Coil to load SVG images into ImageView.
- ksprefs wrapper for SharedPreferences.
- PermissionX lib for handling permissions.
- Unit tests (junit4)
- Kotlin for Gradle build scripts (build.gradle.kts)
In this application the Affinidi APIs are used to create Affinidi user account and interact with the wallet.
Also DiceBear Avatars API is used to generate unique avatars depending on the user's DID.