Firebase Android Codelab - Samimi Sohbet Oluşturun

1. Genel Bakış

ekran görüntüsü

Resim: Working Friendly Chat uygulaması.

Friendly Chat kod laboratuvarına hoş geldiniz. Bu codelab'de, Android'de sohbet uygulaması oluşturmak için Firebase platformunu nasıl kullanacağınızı öğreneceksiniz.

Neler öğreneceksiniz?

  • Kullanıcıların oturum açmasına izin vermek için Firebase Authentication'ı kullanma.
  • Firebase Realtime Database'i kullanarak verileri senkronize etme.
  • İkili dosyaları Firebase için Cloud Storage'da depolama.
  • Firebase ile Android uygulaması geliştirmek için Firebase Local Emulator Suite'i kullanma.

Gerekenler

  • En son Android Studio sürümü.
  • Android 5.0 veya üzeri sürümlerin yüklü olduğu bir Android Emülatörü.
  • Node.js 10 veya sonraki bir sürüm (Emulator Suite'i kullanmak için).
  • Java 8 veya üstü. Java'yı yüklemek için bu talimatları uygulayın; sürümünüzü kontrol etmek için java -version komutunu çalıştırın.
  • Kotlin programlama diline aşina olmanız gerekir.

2. Örnek kodu alın

Depoyu klonlama

GitHub deposunu komut satırından klonlayın:

$ git clone https://github.com/firebase/codelab-friendlychat-android

Android Studio'ya aktarma

Android Studio'da Dosya > 'ı, ardından örnek kodu indirdiğiniz dizinden build-android-start dizinini ( android_studio_folder) seçin.

Artık Android Studio'da build-android-start projesi açık olmalıdır. Eksik google-services.json dosyası hakkında uyarı görürseniz endişelenmeyin. Bu, daha sonraki bir adımda eklenecektir.

Bağımlılıkları kontrol etme

Bu kod laboratuvarındaki ihtiyacınız olan tüm bağımlılıklar sizin için eklenmiştir ancak Firebase SDK'sını uygulamanıza nasıl ekleyeceğinizi bilmeniz önemlidir:

build.gradle.kts

plugins {
    id("com.android.application") version "8.0.0" apply false
    id("com.android.library") version "8.0.0" apply false
    id("org.jetbrains.kotlin.android") version "1.8.20" apply false

    // The google-services plugin is required to parse the google-services.json file
    id("com.google.gms.google-services") version "4.3.15" apply false
}

app/build.gradle.kts

plugins {
    id("com.android.application")
    id("kotlin-android")
    id("com.google.gms.google-services")
}

android {
    // ...
}

dependencies {
    // ...

    // Google Sign In SDK
    implementation("com.google.android.gms:play-services-auth:20.5.0")

    // Firebase SDK
    implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
    implementation("com.google.firebase:firebase-database-ktx")
    implementation("com.google.firebase:firebase-storage-ktx")
    implementation("com.google.firebase:firebase-auth-ktx")

    // Firebase UI Library
    implementation("com.firebaseui:firebase-ui-auth:8.0.2")
    implementation("com.firebaseui:firebase-ui-database:8.0.2")
}

3. Firebase CLI'yi yükleme

Bu codelab'de Firebase Auth, Realtime Database ve Cloud Storage'ı yerel olarak taklit etmek için Firebase Emulator Suite'i kullanacaksınız. Bu, uygulamanızı oluşturmak için güvenli, hızlı ve ücretsiz bir yerel geliştirme ortamı sağlar.

Firebase CLI'yi yükleme

Öncelikle Firebase CLI'yi yüklemeniz gerekir. macOS veya Linux kullanıyorsanız aşağıdaki cURL komutunu çalıştırabilirsiniz:

curl -sL https://firebase.tools | bash

Windows kullanıyorsanız bağımsız bir ikili dosyayı almak veya npm üzerinden yüklemek için yükleme talimatlarını okuyun.

CLI'yi yükledikten sonra firebase --version çalıştırıldığında 9.0.0 veya daha yeni bir sürüm raporlanır:

$ firebase --version
9.0.0

Giriş

CLI'yi Google Hesabınıza bağlamak için firebase login komutunu çalıştırın. Bu işlem, giriş işlemini tamamlamak için yeni bir tarayıcı penceresi açar. Daha önce Firebase projenizi oluştururken kullandığınız hesabı seçtiğinizden emin olun.

4. Firebase Emulator Suite'e bağlanma

Emülatörleri başlatma

Terminalinizde, yerel codelab-friendlychat-android dizininizin kökünden aşağıdaki komutu çalıştırın:

firebase emulators:start --project=demo-friendlychat-android

Buna benzer bazı günlükler görürsünüz. Bağlantı noktası değerleri, klonlanmış örnek koda dahil edilen firebase.json dosyasında tanımlanmıştır.

$ firebase emulators:start --project=demo-friendlychat-android
i  emulators: Starting emulators: auth, database, storage
i  emulators: Detected demo project ID "demo-friendlychat-android", emulated services will use a demo configuration and attempts to access non-emulated services for this project will fail.
i  database: Database Emulator logging to database-debug.log
i  ui: Emulator UI logging to ui-debug.log

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://localhost:4000                │
└─────────────────────────────────────────────────────────────┘

┌────────────────┬────────────────┬────────────────────────────────┐
│ Emulator       │ Host:Port      │ View in Emulator UI            │
├────────────────┼────────────────┼────────────────────────────────┤
│ Authentication │ localhost:9099 │ http://localhost:4000/auth     │
├────────────────┼────────────────┼────────────────────────────────┤
│ Database       │ localhost:9000 │ http://localhost:4000/database │
├────────────────┼────────────────┼────────────────────────────────┤
│ Storage        │ localhost:9199 │ http://localhost:4000/storage  │
└────────────────┴────────────────┴────────────────────────────────┘
  Emulator Hub running at localhost:4400
  Other reserved ports: 4500

Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.

Firebase Emulator Suite kullanıcı arayüzünü görüntülemek için web tarayıcınızda http://localhost:4000 adresine gidin:

Emulator Suite kullanıcı arayüzü ana sayfası

Codelab'in geri kalanı için emulators:start komutunu çalışır durumda bırakın.

Uygulamanızı bağlama

Android Studio'da MainActivity.kt dosyasını açın ve onCreate yöntemine aşağıdaki kodu ekleyin:

// When running in debug mode, connect to the Firebase Emulator Suite.
// "10.0.2.2" is a special IP address which allows the Android Emulator
// to connect to "localhost" on the host computer. The port values (9xxx)
// must match the values defined in the firebase.json file.
if (BuildConfig.DEBUG) {
    Firebase.database.useEmulator("10.0.2.2", 9000)
    Firebase.auth.useEmulator("10.0.2.2", 9099)
    Firebase.storage.useEmulator("10.0.2.2", 9199)
}

5. Başlangıç uygulamasını çalıştırma

google-services.json dosyasını ekleme

Android uygulamanızın Firebase'e bağlanabilmesi için Android projenizin app klasörüne bir google-services.json dosyası eklemeniz gerekir. Bu kod laboratuvarının amaçları doğrultusunda, Firebase Emulator Suite'e bağlanmanıza olanak tanıyacak bir örnek JSON dosyası sağladık.

mock-google-services.json dosyasını build-android-start/app klasörüne google-services.json olarak kopyalayın:

cp mock-google-services.json build-android-start/app/google-services.json

Bu kod laboratuvarının son adımında, bu örnek JSON dosyasını kendi yapılandırmanızla değiştirebilmeniz için gerçek bir Firebase projesi ve Firebase Android uygulaması oluşturmayı öğreneceksiniz.

Uygulamayı çalıştırma

Projeyi Android Studio'ya içe aktardığınıza ve bir Firebase yapılandırma JSON dosyası eklediğinize göre uygulamayı ilk kez çalıştırmaya hazırsınız.

  1. Android Emulator'unuzu başlatın.
  2. Android Studio'da araç çubuğundan Çalıştır'ı ( execute) tıklayın.

Uygulama, Android Emulator'unuzda başlatılır. Bu noktada boş bir ileti listesi görürsünüz ve mesaj gönderip alamazsınız. Bu codelab'in bir sonraki adımında, kullanıcıların Friendly Chat'i kullanabilmesi için kimliklerini doğrulayacaksınız.

6. Kimlik Doğrulamayı Etkinleştir

Bu uygulama, tüm sohbet mesajlarını depolamak için Firebase Realtime Database'i kullanır. Ancak veri eklemeden önce uygulamanın güvenli olduğundan ve yalnızca kimliği doğrulanmış kullanıcıların mesaj yayınlayabildiğinden emin olmalıyız. Bu adımda, Firebase Authentication'i etkinleştirecek ve Realtime Database güvenlik kurallarını yapılandıracağız.

Temel oturum açma işlevi ekleme

Ardından, kullanıcıları algılamak ve oturum açma ekranı uygulamak için uygulamaya bazı temel Firebase Authentication kodları ekleyeceğiz.

Mevcut kullanıcıyı kontrol etme

Öncelikle MainActivity.kt sınıfına aşağıdaki örnek değişkeni ekleyin:

MainActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

Şimdi, kullanıcı uygulamayı açtığında ve kimliği doğrulanmadığında kullanıcıyı oturum açma ekranına gönderecek şekilde MainActivity değerini değiştirelim. binding görünüme eklendikten sonra onCreate() yöntemine aşağıdakileri ekleyin:

MainActivity.kt

// Initialize Firebase Auth and check if the user is signed in
auth = Firebase.auth
if (auth.currentUser == null) {
    // Not signed in, launch the Sign In activity
    startActivity(Intent(this, SignInActivity::class.java))
    finish()
    return
}

Ayrıca, kullanıcının onStart() sırasında oturum açıp açmadığını kontrol etmek isteriz:

MainActivity.kt

public override fun onStart() {
    super.onStart()
    // Check if user is signed in.
    if (auth.currentUser == null) {
        // Not signed in, launch the Sign In activity
        startActivity(Intent(this, SignInActivity::class.java))
        finish()
        return
    }
}

Ardından, kimliği doğrulanmış Firebase kullanıcısıyla ilgili uygun bilgileri döndürmek için getUserPhotoUrl() ve getUserName() yöntemlerini uygulayın:

MainActivity.kt

private fun getPhotoUrl(): String? {
    val user = auth.currentUser
    return user?.photoUrl?.toString()
}

private fun getUserName(): String? {
    val user = auth.currentUser
    return if (user != null) {
        user.displayName
    } else ANONYMOUS
}

Ardından, oturumu kapat düğmesini işlemek için signOut() yöntemini uygulayın:

MainActivity.kt

private fun signOut() {
    AuthUI.getInstance().signOut()
    startActivity(Intent(this, SignInActivity::class.java))
    finish()
}

Artık kullanıcıyı gerektiğinde oturum açma ekranına gönderecek tüm mantığa sahibiz. Ardından, kullanıcıların kimliğini doğrulamak için oturum açma ekranını uygulamamız gerekir.

Oturum açma ekranını uygulama

SignInActivity.kt dosyasını açın. Burada kimlik doğrulamayı başlatmak için basit bir Oturum Aç düğmesi kullanılır. Bu bölümde, oturum açma mantığını uygulamak için FirebaseUI'yi kullanacaksınız.

// Firebase instance variables yorumunun altındaki SignInActivity sınıfına bir Auth örnek değişkeni ekleyin:

SignInActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

Ardından, onCreate() yöntemini düzenleyerek Firebase'i MainActivity'te yaptığınız gibi başlatın:

SignInActivity.kt

// Initialize FirebaseAuth
auth = Firebase.auth

SignInActivity alanına ActivityResultLauncher alanı ekleyin:

SignInActivity.kt

// ADD THIS
private val signIn: ActivityResultLauncher<Intent> =
        registerForActivityResult(FirebaseAuthUIActivityResultContract(), this::onSignInResult)

override fun onCreate(savedInstanceState: Bundle?) {
    // ...
}

Ardından, FirebaseUI oturum açma akışını başlatmak için onStart() yöntemini düzenleyin:

SignInActivity.kt

public override fun onStart() {
    super.onStart()

    // If there is no signed in user, launch FirebaseUI
    // Otherwise head to MainActivity
    if (Firebase.auth.currentUser == null) {
        // Sign in with FirebaseUI, see docs for more details:
        // https://firebase.google.com/docs/auth/android/firebaseui
        val signInIntent = AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setLogo(R.mipmap.ic_launcher)
                .setAvailableProviders(listOf(
                        AuthUI.IdpConfig.EmailBuilder().build(),
                        AuthUI.IdpConfig.GoogleBuilder().build(),
                ))
                .build()

        signIn.launch(signInIntent)
    } else {
        goToMainActivity()
    }
}

Ardından, oturum açma sonucunu işlemek için onSignInResult yöntemini uygulayın. Oturum açma işlemi başarılı olduysa MainActivity'e geçin:

SignInActivity.kt

private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
    if (result.resultCode == RESULT_OK) {
        Log.d(TAG, "Sign in successful!")
        goToMainActivity()
    } else {
        Toast.makeText(
                this,
                "There was an error signing in",
                Toast.LENGTH_LONG).show()

        val response = result.idpResponse
        if (response == null) {
            Log.w(TAG, "Sign in canceled")
        } else {
            Log.w(TAG, "Sign in error", response.error)
        }
    }
}

Hepsi bu kadar! FirebaseUI ile kimlik doğrulamasını, sunucu tarafı yapılandırma yönetmenize gerek kalmadan ve yalnızca birkaç yöntem çağrısıyla uyguladınız.

Çalışmanızı test etme

Uygulamayı Android Emulator'unuzda çalıştırın. Hemen oturum açma ekranına yönlendirilirsiniz. E-posta ile oturum aç düğmesine dokunun ve ardından hesap oluşturun. Her şey doğru uygulandıysa mesajlaşma ekranına yönlendirilirsiniz.

Oturum açtıktan sonra, tarayıcınızda Firebase Emulator Suite kullanıcı arayüzünü açın ve ilk oturum açılan kullanıcı hesabını görmek için Kimlik doğrulama sekmesini tıklayın.

7. Mesajları okuma

Bu adımda, Realtime Database'de depolanan mesajları okuma ve görüntüleme işlevini ekleyeceğiz.

Örnek mesajları içe aktarma

  1. Firebase Emulator Suite kullanıcı arayüzünde Realtime Database sekmesini seçin.
  2. Codelab deposunun yerel kopyasındaki initial_messages.json dosyasını veri görüntüleyiciye sürükleyip bırakın.

Artık veritabanının messages düğümünün altında birkaç mesajınız olmalıdır.

Verileri okuma

Mesajları senkronize etme

Bu bölümde, yeni eklenen mesajları uygulama kullanıcı arayüzüyle senkronize eden kodu şunları yaparak ekleriz:

  • Firebase Realtime Database'i başlatma ve verilerde yapılan değişiklikleri işlemek için bir dinleyici ekleme.
  • Yeni mesajların gösterilmesi için RecyclerView bağdaştırıcısı güncelleniyor.
  • Veritabanı örnek değişkenlerini MainActivity sınıfındaki diğer Firebase örnek değişkenlerinizle ekleme:

MainActivity.kt

// Firebase instance variables
// ...
private lateinit var db: FirebaseDatabase
private lateinit var adapter: FriendlyMessageAdapter

MainActivity'nin // Initialize Realtime Database and FirebaseRecyclerAdapter yorumu altındaki onCreate() yöntemini aşağıda tanımlanan kodla değiştirin. Bu kod, Realtime Database'deki tüm mevcut mesajları ekler ve ardından Firebase Realtime Database'inizdeki messages yolu altında yeni alt girişleri dinler. Her ileti için kullanıcı arayüzüne yeni bir öğe ekler:

MainActivity.kt

// Initialize Realtime Database
db = Firebase.database
val messagesRef = db.reference.child(MESSAGES_CHILD)

// The FirebaseRecyclerAdapter class and options come from the FirebaseUI library
// See: https://github.com/firebase/FirebaseUI-Android
val options = FirebaseRecyclerOptions.Builder<FriendlyMessage>()
    .setQuery(messagesRef, FriendlyMessage::class.java)
    .build()
adapter = FriendlyMessageAdapter(options, getUserName())
binding.progressBar.visibility = ProgressBar.INVISIBLE
manager = LinearLayoutManager(this)
manager.stackFromEnd = true
binding.messageRecyclerView.layoutManager = manager
binding.messageRecyclerView.adapter = adapter

// Scroll down when a new message arrives
// See MyScrollToBottomObserver for details
adapter.registerAdapterDataObserver(
    MyScrollToBottomObserver(binding.messageRecyclerView, adapter, manager)
)

Ardından FriendlyMessageAdapter.kt sınıfında, MessageViewHolder() iç sınıfında bind() yöntemini uygulayın:

FriendlyMessageAdapter.kt

inner class MessageViewHolder(private val binding: MessageBinding) : ViewHolder(binding.root) {
    fun bind(item: FriendlyMessage) {
        binding.messageTextView.text = item.text
        setTextColor(item.name, binding.messageTextView)

        binding.messengerTextView.text = if (item.name == null) ANONYMOUS else item.name
        if (item.photoUrl != null) {
            loadImageIntoView(binding.messengerImageView, item.photoUrl!!)
        } else {
            binding.messengerImageView.setImageResource(R.drawable.ic_account_circle_black_36dp)
        }
    }
    ...
}

Resim olan mesajları da göstermemiz gerektiğinden, ImageMessageViewHolder() iç sınıfında bind() yöntemini de uygulayın:

FriendlyMessageAdapter.kt

inner class ImageMessageViewHolder(private val binding: ImageMessageBinding) :
    ViewHolder(binding.root) {
    fun bind(item: FriendlyMessage) {
        loadImageIntoView(binding.messageImageView, item.imageUrl!!)

        binding.messengerTextView.text = if (item.name == null) ANONYMOUS else item.name
        if (item.photoUrl != null) {
            loadImageIntoView(binding.messengerImageView, item.photoUrl!!)
        } else {
            binding.messengerImageView.setImageResource(R.drawable.ic_account_circle_black_36dp)
        }
    }
}

Son olarak, MainActivity dosyasına geri dönüp Firebase Realtime Database'den güncelleme almayı başlatın ve durdurun. MainActivity içindeki onPause() ve onResume() yöntemlerini aşağıda gösterildiği gibi güncelleyin:

MainActivity.kt

public override fun onPause() {
    adapter.stopListening()
    super.onPause()
}

public override fun onResume() {
    super.onResume()
    adapter.startListening()
}

Mesajları senkronize etme testi

  1. Çalıştır'ı ( execute) tıklayın.
  2. Emülatör Paketi kullanıcı arayüzünde Anlık Veritabanı sekmesine dönün ve ardından manuel olarak yeni bir mesaj ekleyin. Mesajın Android uygulamanızda gösterildiğini onaylayın:

Tebrikler, uygulamanıza gerçek zamanlı bir veritabanı eklediniz.

8. Mesajlar Gönderme

Kısa mesaj gönderme özelliğini uygulama

Bu bölümde, uygulama kullanıcılarının kısa mesaj gönderme özelliğini ekleyeceksiniz. Aşağıdaki kod snippet'i, gönder düğmesindeki tıklama etkinliklerini dinler, mesaj alanının içeriğini içeren yeni bir FriendlyMessage nesnesi oluşturur ve iletiyi veritabanına gönderir. push() yöntemi, itilen nesnenin yoluna otomatik olarak oluşturulan bir kimlik ekler. Bu kimlikler sıralı olduğundan yeni mesajlar listenin sonuna eklenir.

MainActivity sınıfındaki onCreate() yönteminde gönder düğmesinin tıklama dinleyicisini güncelleyin. Bu kod zaten onCreate() yönteminin en altındadır. onClick() gövdesini aşağıdaki kodla eşleşecek şekilde güncelleyin:

MainActivity.kt

// Disable the send button when there's no text in the input field
// See MyButtonObserver for details
binding.messageEditText.addTextChangedListener(MyButtonObserver(binding.sendButton))

// When the send button is clicked, send a text message
binding.sendButton.setOnClickListener {
    val friendlyMessage = FriendlyMessage(
        binding.messageEditText.text.toString(),
        getUserName(),
        getPhotoUrl(),
        null /* no image */
    )
    db.reference.child(MESSAGES_CHILD).push().setValue(friendlyMessage)
    binding.messageEditText.setText("")
}

Resim mesajı gönderme özelliğini uygulama

Bu bölümde, uygulama kullanıcılarının resimli mesaj göndermelerini sağlayacaksınız. Resim mesajı oluşturmak için aşağıdaki adımları uygulayın:

  • Resim seçin
  • Herkese açık kullanıcı adı seçimi
  • Realtime Database'e geçici resim mesajı yazma
  • Seçilen resmi yüklemeye başlayın
  • Yükleme tamamlandıktan sonra resim mesajı URL'sini yüklenen resmin URL'siyle güncelleyin.

Resim Seç

Bu kod laboratuvarında, resim eklemek için Cloud Storage for Firebase kullanılır. Cloud Storage, uygulamanızın ikili verilerini depolamak için iyi bir yerdir.

Resim seçimini yapın ve geçici mesaj yazın

Kullanıcı bir resim seçtikten sonra resim seçimi Intent başlatılır. Bu, onCreate() yönteminin sonundaki kodda zaten uygulanmıştır. İşlem tamamlandığında MainActivity nesnesinin onImageSelected() yöntemi çağrılır. Aşağıdaki kod snippet'ini kullanarak, veritabanına resmin yüklendiğini belirten geçici bir resim URL'si içeren bir mesaj yazarsınız.

MainActivity.kt

private fun onImageSelected(uri: Uri) {
    Log.d(TAG, "Uri: $uri")
    val user = auth.currentUser
    val tempMessage = FriendlyMessage(null, getUserName(), getPhotoUrl(), LOADING_IMAGE_URL)
    db.reference
            .child(MESSAGES_CHILD)
            .push()
            .setValue(
                    tempMessage,
                    DatabaseReference.CompletionListener { databaseError, databaseReference ->
                        if (databaseError != null) {
                            Log.w(
                                    TAG, "Unable to write message to database.",
                                    databaseError.toException()
                            )
                            return@CompletionListener
                        }

                        // Build a StorageReference and then upload the file
                        val key = databaseReference.key
                        val storageReference = Firebase.storage
                                .getReference(user!!.uid)
                                .child(key!!)
                                .child(uri.lastPathSegment!!)
                        putImageInStorage(storageReference, uri, key)
                    })
}

Resim yükleme ve mesajı güncelleme

putImageInStorage() yöntemini MainActivity'a ekleyin. Seçilen resmin yüklenmesini başlatmak için onImageSelected() içinde çağrılır. Yükleme tamamlandıktan sonra mesajı uygun resmi kullanacak şekilde güncelleyebilirsiniz.

MainActivity.kt

private fun putImageInStorage(storageReference: StorageReference, uri: Uri, key: String?) {
    // First upload the image to Cloud Storage
    storageReference.putFile(uri)
        .addOnSuccessListener(
            this
        ) { taskSnapshot -> // After the image loads, get a public downloadUrl for the image
            // and add it to the message.
            taskSnapshot.metadata!!.reference!!.downloadUrl
                .addOnSuccessListener { uri ->
                    val friendlyMessage =
                        FriendlyMessage(null, getUserName(), getPhotoUrl(), uri.toString())
                    db.reference
                        .child(MESSAGES_CHILD)
                        .child(key!!)
                        .setValue(friendlyMessage)
                }
        }
        .addOnFailureListener(this) { e ->
            Log.w(
                TAG,
                "Image upload task was unsuccessful.",
                e
            )
        }
}

Mesaj göndermeyi test etme

  1. Android Studio'da executeÇalıştır düğmesini tıklayın.
  2. Android Emulator'unuzda bir mesaj girin ve gönder düğmesine dokunun. Yeni mesaj, uygulama kullanıcı arayüzünde ve Firebase Emulator Suite kullanıcı arayüzünde görünür olmalıdır.
  3. Android Emulator'da cihazınızdan bir resim seçmek için "+" simgesine dokunun. Yeni mesaj, önce yer tutucu resimle, ardından resim yükleme işlemi tamamlandığında seçilen resimle görünür. Yeni mesaj, Emulator Suite kullanıcı arayüzünde de görünür olmalıdır. Özellikle de Gerçek Zamanlı Veritabanı sekmesinde nesne olarak ve Depolama sekmesinde blob olarak görünür.

9. Tebrikler!

Firebase'i kullanarak gerçek zamanlı bir sohbet uygulaması oluşturdunuz.

Öğrendikleriniz

  • Firebase Authentication
  • Firebase Realtime Database
  • Cloud Storage for Firebase

Ardından, bu codelab'de öğrendiklerinizi kullanarak Firebase'i kendi Android uygulamanıza eklemeyi deneyin. Firebase hakkında daha fazla bilgi edinmek için firebase.google.com adresini ziyaret edin.

Gerçek bir Firebase projesi oluşturmayı ve gerçek Firebase kaynaklarını (demo proje ve yalnızca taklit edilmiş kaynaklar yerine) kullanmayı öğrenmek istiyorsanız sonraki adıma geçin.

Not: Gerçek bir Firebase projesi oluşturduktan sonra bile ve özellikle gerçek bir uygulama oluşturmaya başladığınızda geliştirme ve test için Firebase Local Emulator Suite'i kullanmanızı öneririz.

10. İsteğe bağlı: Firebase projesi oluşturup ayarlama

Bu adımda, bu codelab ile kullanabileceğiniz gerçek bir Firebase projesi ve Firebase Android uygulaması oluşturacaksınız. Ayrıca uygulamanıza özel Firebase yapılandırmanızı da uygulamanıza eklersiniz. Son olarak, uygulamanızla birlikte kullanılacak gerçek Firebase kaynaklarını ayarlarsınız.

Firebase projesi oluşturma

  1. Tarayıcınızda Firebase konsoluna gidin.
  2. Proje ekle'yi seçin.
  3. Proje adı seçin veya girin. İstediğiniz adı kullanabilirsiniz.
  4. Bu kod laboratuvarının çalışması için Google Analytics'e ihtiyacınız yoktur. Bu nedenle, projenizde Google Analytics'i etkinleştirmeyi atlayabilirsiniz.
  5. Proje Oluştur'u tıklayın. Projeniz hazır olduğunda Devam'ı tıklayın.

Firebase fiyatlandırma planınızı yükseltme

Firebase için Cloud Storage'ı kullanmak istiyorsanız Firebase projenizin kullandıkça öde (Blaze) fiyatlandırma planında olması gerekir. Yani projeniz bir Cloud Faturalandırma hesabına bağlı olmalıdır.

  • Cloud Billing hesabı için kredi kartı gibi bir ödeme yöntemi gerekir.
  • Firebase ve Google Cloud'da yeniyseniz 300 ABD doları kredi ve Ücretsiz Deneme Cloud Faturalandırma hesabı almaya uygun olup olmadığınızı kontrol edin.
  • Bu kod laboratuvarını bir etkinlik kapsamında yapıyorsanız düzenleyen kişiye Cloud kredisi olup olmadığını sorun.

Projenizi Blaze planına yükseltmek için aşağıdaki adımları uygulayın:

  1. Firebase konsolunda planınızı yükseltmeyi seçin.
  2. Blaze planını seçin. Projenize bir Cloud Faturalandırma hesabı bağlamak için ekrandaki talimatları uygulayın.
    Bu yükseltme kapsamında bir Cloud Faturalandırma hesabı oluşturmanız gerekiyorsa yükseltmeyi tamamlamak için Firebase Console'daki yükseltme akışına geri dönmeniz gerekebilir.

Firebase'i Android projenize ekleme

Bu adıma başlamadan önce uygulamanızın SHA1 karmasını alın. Hata ayıklama anahtarınızın SHA1'ini belirlemek için yerel build-android-start dizininizden aşağıdaki komutu çalıştırın:

./gradlew signingReport

Store: /Users/<username>/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A5:88:41:04:8F:06:59:6A:AE:33:76:87:AA:AD:19:23
SHA1: A7:89:F5:06:A8:07:A1:22:EC:90:6A:A6:EA:C3:D4:8B:3A:30:AB:18
SHA-256: 05:A2:2A:35:EE:F2:51:23:72:4D:72:67:A5:6A:8A:58:22:2C:00:A6:AB:F6:45:D5:A1:82:D8:90:A4:69:C8:FE
Valid until: Wednesday, August 10, 2044

Yukarıdakine benzer bir çıkış görürsünüz. Önemli satır, SHA1 karmasıdır. SHA1 karmanızı bulamıyorsanız daha fazla bilgi için bu sayfaya bakın.

Firebase konsoluna geri dönün ve Android projenizi Firebase projenize kaydetmek için aşağıdaki adımları uygulayın:

  1. Yeni projenizin genel bakış ekranından Android simgesini tıklayarak kurulum iş akışını başlatın: android uygulaması ekleme
  2. Sonraki ekranda, uygulamanızın paket adı olarak com.google.firebase.codelab.friendlychat yazın.
  3. Firebase yapılandırma dosyanızı indirmek için Uygulamayı Kaydet'i, ardından google-services.json dosyasını indir'i tıklayın.
  4. google-services.json dosyasını Android projenizin app dizinine kopyalayın.
  5. Konsolu'nun kurulum iş akışında gösterilen sonraki adımları atlayın (build-android-start projesinde sizin için zaten yapılmıştır).
  6. Projenizi Gradle dosyalarıyla senkronize ederek tüm bağımlılıkların uygulamanızda kullanılabildiğinden emin olun. Android Studio araç çubuğundan Dosya > Projeyi Gradle Dosyalarıyla Eşzamanla'yı seçin. Yapılandırma değişikliklerinin geçerli olması için Projeyi Oluştur/Temizle ve Projeyi Oluştur/Yeniden Oluştur'u da çalıştırmanız gerekebilir.

Firebase Authentication'i yapılandırma

Uygulamanızın, kullanıcılarınız adına Firebase Authentication API'lerine erişebilmesi için Firebase Authentication'i ve uygulamanızda kullanmak istediğiniz oturum açma sağlayıcılarını etkinleştirmeniz gerekir.

  1. Firebase konsolunda, soldaki gezinme panelinden Kimlik Doğrulama'yı seçin.
  2. Oturum açma yöntemi sekmesini seçin.
  3. E-posta/Şifre'yi tıklayın ve anahtarı etkin (mavi) konuma getirin.
  4. Google'ı tıklayın, ardından anahtarı etkin (mavi) konuma getirin ve proje destek e-postası ayarlayın.

Bu kod laboratuvarının ilerleyen aşamalarında "CONFIGURATION_NOT_FOUND" mesajıyla birlikte hata alırsanız bu adıma geri dönüp çalışmanızı tekrar kontrol edin.

Realtime Database'i ayarlama

Bu kod laboratuvarındaki uygulama, sohbet mesajlarını Firebase Realtime Database'de saklar. Bu bölümde, bir veritabanı oluşturacak ve Firebase Güvenlik Kuralları adlı bir JSON yapılandırma dili aracılığıyla veritabanının güvenliğini yapılandıracağız.

  1. Firebase konsolunun sol panelinde Derleme'yi genişletin ve ardından Anlık Veritabanı'nı seçin.
  2. Create database'i (Veritabanı oluştur) tıklayın.
  3. Veritabanı için bir konum seçip Sonraki'yi tıklayın.
    Gerçek bir uygulama için kullanıcılarınıza yakın bir konum seçmeniz gerekir.
  4. Test modunda başlat'ı tıklayın. Güvenlik kurallarıyla ilgili sorumluluk reddi beyanını okuyun.
    Bu kod laboratuvarının sonraki adımlarında, verilerinizin güvenliğini sağlamak için güvenlik kuralları ekleyeceksiniz. Veritabanınıza Güvenlik Kuralları eklemeden bir uygulamayı dağıtmayın veya herkese açık olarak göstermeyin.
  5. Oluştur'u tıklayın.
  6. Veritabanı örneği oluşturulduktan sonra Kurallar sekmesini seçin ve ardından kurallar yapılandırmasını aşağıdaki şekilde güncelleyin:
     {
       "rules": {
         "messages": {
           ".read": "auth.uid != null",
           ".write": "auth.uid != null"
         }
       }
     }
    

Güvenlik Kurallarının işleyiş şekli hakkında daha fazla bilgi (ör. "auth" değişkeniyle ilgili dokümanlar) için Realtime Database güvenlik dokümanlarını inceleyin.

Cloud Storage for Firebase'ı ayarlama

  1. Firebase konsolunun sol panelinde Derleme'yi genişletin ve ardından Depolama'yı seçin.
  2. Başlayın'ı tıklayın.
  3. Varsayılan Storage paketiniz için bir konum seçin.
    US-WEST1, US-CENTRAL1 ve US-EAST1'deki paketler, Google Cloud Storage'ın "Daima Ücretsiz" katmanından yararlanabilir. Diğer tüm konumlardaki paketler için Google Cloud Storage fiyatlandırması ve kullanımı geçerlidir.
  4. Test modunda başlat'ı tıklayın. Güvenlik kurallarıyla ilgili sorumluluk reddi beyanını okuyun.
    Bu kod laboratuvarının ilerleyen bölümlerinde, verilerinizin güvenliğini sağlamak için güvenlik kuralları ekleyeceksiniz. Depolama alanı paketiniz için Güvenlik Kuralları eklemedenbir uygulamayı dağıtmayın veya herkese açık olarak göstermeyin.
  5. Oluştur'u tıklayın.

Firebase kaynaklarına bağlanma

Bu kod laboratuvarının önceki bir adımında MainActivity.kt değişkenine aşağıdakileri eklediniz. Bu koşullu blok, Android projenizi Firebase Emulator Suite'e bağladı.

// REMOVE OR DISABLE THIS
if (BuildConfig.DEBUG) {
    Firebase.database.useEmulator("10.0.2.2", 9000)
    Firebase.auth.useEmulator("10.0.2.2", 9099)
    Firebase.storage.useEmulator("10.0.2.2", 9199)
}

Uygulamanızı yeni gerçek Firebase projenize ve gerçek Firebase kaynaklarına bağlamak istiyorsanız bu bloğu kaldırabilir veya uygulamanızı BuildConfig.DEBUG değerinin false olması için sürüm modunda çalıştırabilirsiniz.