MVVM
architecture patterni kullanılmıştır.Firebase Authentication
,Firebase Realtime Database
,Firebase Storage
,Kotlin Extensions
,Higher Order Functions
,Type aliases
,Data classes
,Kotlin Synthetic Import
Navigation Component
,ViewModel
,LiveData
kullanılmıştır.- Düşük Apk Boyutu: Görseller için
Vector Drawables
, Fontlar içinDownloadable Fonts
, Gereksiz kodların temizliği içinProGuard
kullanılmıştır. - Güvenlik:
ProGuard
ile kod gizleme,Firebase Realtime Database Rules
ile data güvenliği sağlanmıştır. - Telefondan görsel yüklemek için Kotlin ile geliştirdiğim kütüphanem UWMediaPicker kullanılmıştır.
- Farklı ekran boyutlarına uyum sağlayabilmek ve tek bir noktadan tüm boyutları değiştirebilmek için
dimens.xml
kullanılmıştır. - Avatar için görsel upload edilmeden önce kare şeklinde kırpılır, 200x200 px olarak yeniden boyutlandırılır.
- Gerektiğinde oyun süresi, kart kapanma bekleme süresi, liderler sayfası lider limiti gibi sayısal sabitleri tek bir noktadan değiştirebilmek için
integers.xml
kullanılmıştır. - Kullanıcı adı ve şifre girdi alanlarına karakter sınırı koyulmuş ve alfanumerik olmayan karakterlerin girilmesi engellenmiştir. Şifre girdi alanında özel karakterlere izin verilmiştir.
- Uygulama hem İngilizce hem Türkçe olarak çalışmaktadır. (Splash ekranındaki görsel dahil)
- Uygulama açılırken Splash ekranından önce bir an için beyaz bir ekranın gözükmemesi için Splash ekranında
layout
yerinetheme
kullanılmıştır.
Tüm ekran görüntülerini inceleyebilirsiniz.
- Kullanıcılar, avatar, takma ad ve şifre ile hesap oluşturabilmektedirler.
- Kullanıcılar, uygulamada varsayılan olarak sunulan 8 avatardan birini ya da telefonlarından herhangi bir görseli avatar olarak kullanabilirler.
- Kullanıcılar, takma ad ve şifre ile uygulamaya giriş yapabilirler.
- Anasayfada, kullanıcının avatarı, takma adı, son skoru ve en yüksek kişisel skoru gösterilmektedir.
- Kart eşleştirme oyunu 4 seviyeden oluşur ve maksimum 3 dakika süre verilir.
- Kullanıcılar, oyunu verilen süre içinde tamamlarlar ise artan sürenin 3 katı skorlarına eklenir.
- Kullanıcılar, oyun sonunda skorlarını ve uygulamanın linkini içeren otomatik oluşturulmuş bir yazıyı sosyal medyada paylaşabilirler.
- Kullanıcılar, liderler sayfasından ilk 20 lideri görebilirler.
- Liderler listesindeki ilk üçte bulunan kullanıcıların, skorları başka bir kullanıcı tarafından elimine edilir ise sırası değişen kullancılara bildirim atılır. Bu özellik için
Firebase Cloud Functions
'a gerekli fonksiyon eklenir ve gerektiğindeFirebase Cloud Messaging
ile kullanıcya bildirim atılabilir. - Ses efektleri eklenebilir.
- Daha hızlı, IDE dostu, Type-Safe, statik yazımlı dependency yönetimi için
Kotlin DSL
kullanılabilir.
- UWMediaPicker: Görsel seçimi için kendi geliştirdiğim kütüphane.
- AndroidX : Android support kütüphaneleri yerine.
- Kotlin
- Architecture Lifecycle Components
- Navigation Component
- Firebase Core, Fireabse Auth, Firebase Storage, Firebase Database
- Glide
- RoundedImageView: Yuvarlak ImageView.
1. Kod Gizleme
Apk decompile edildiğinde kodların okunmasını zorlaştırmak için Proguard kullanılmıştır. Data Transfer Object classlarının isimlerinin değişmemesi için ProGuard kuralları tanımlanmıştır.
2. Firebase
Apk decompile olduğunda veya proje halihazırda açık kaynak olarak paylaşıldığı için Firebase api key'leri kolayca elde edilebilir. Bu key'lerin kötüye kullanımını engellemek için Firebase Realtime Database'de kurallar tanımlanmıştır. Doğrulanmış(authenticated) kullanıcılara "Users" tablosunda sadece kendi verilerini okuma ve sadece kendi verilerine yazma izni verilmiştir. "Leaders" tablosunda ise tüm tabloyu okuma izni ve sadece kendi verilerini güncelleme izni verilmiştir.
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid",
".read": "$uid === auth.uid"
}
},
"leaders": {
".read": "true",
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
Lego avatarları, Smashicons tarafından Flaticon Temel Lisansı altında www.flaticon.com üzerinde paylaşılmıştır.
Ülke bayrakları, Freepik tarafından Flaticon Temel Lisansı altında www.flaticon.com üzerinde paylaşılmıştır.