Firebase Android Codelab - Dostça Sohbet Oluşturun

1. Genel Bakış

ekran görüntüsü

Resim: Çalışan Dostça Sohbet uygulaması.

Dostça Sohbet codelab'ine hoş geldiniz. Bu codelab'de Android'de sohbet uygulaması oluşturmak için Firebase platformunu nasıl kullanacağınızı öğreneceksiniz.

Ne öğreneceksin

  • Kullanıcıların oturum açmasına izin vermek için Firebase Kimlik Doğrulaması nasıl kullanılır?
  • Firebase Gerçek Zamanlı Veritabanını kullanarak veriler nasıl senkronize edilir?
  • İkili dosyalar Firebase için Cloud Storage'da nasıl depolanır?
  • Firebase ile bir Android uygulaması geliştirmek için Firebase Local Emulator Suite nasıl kullanılır?

İhtiyacınız olan şey

  • En son Android Studio sürümü.
  • Android 5.0+ sürümüne sahip bir Android Emülatörü .
  • Node.js sürüm 10 veya üzeri (Emulator Suite'i kullanmak için).
  • Java 8 veya üstü. Java'yı yüklemek için şu talimatları kullanın; Sürümünüzü kontrol etmek için java -version çalıştırın.
  • Kotlin programlama diline aşinalık.

2. Örnek kodu alın

Depoyu klonla

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

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

Android Studio'ya aktar

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

Artık build-android-start projesini Android Studio'da açmalısınız. Bir google-services.json dosyasının eksik olduğuna dair bir uyarı görürseniz endişelenmeyin. Daha sonraki bir adımda eklenecektir.

Bağımlılıkları kontrol edin

Bu codelab'de ihtiyaç duyacağınız tüm bağımlılıklar sizin için zaten eklenmiştir ancak Firebase SDK'sını uygulamanıza nasıl ekleyeceğinizi anlamak ö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ükleyin

Bu codelab'de Firebase Auth'u, Gerçek Zamanlı Veritabanını ve Bulut Depolamayı yerel olarak taklit etmek için Firebase Emulator Suite'i kullanacaksınız. Bu, uygulamanızı geliştirmek için güvenli, hızlı ve ücretsiz bir yerel geliştirme ortamı sağlar.

Firebase CLI'yi yükleyin

Öncelikle Firebase CLI'yi yüklemeniz gerekecek. 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 dosya almak veya npm aracılığıyla kurulum yapmak için kurulum talimatlarını okuyun.

CLI'yi yükledikten sonra firebase --version çalıştırmak 9.0.0 veya üzeri bir sürümü bildirmelidir:

$ firebase --version
9.0.0

Giriş yapmak

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

4. Firebase Emulator Suite'e bağlanın

Emülatörleri başlat

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

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

Bunun gibi bazı günlükler görmelisiniz. Bağlantı noktası değerleri, klonlanan örnek kodda bulunan firebase.json dosyasında tanımlandı.

$ 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ğlayın

Android Studio'da MainActivity.kt dosyasını açın, ardından onCreate yönteminin içine 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ırın

Google-services.json'u ekleyin

Android uygulamanızın Firebase'e bağlanabilmesi için Android projenizin app klasörüne bir google-services.json dosyası eklemeniz gerekir. Bu codelab'in amaçları doğrultusunda, Firebase Emulator Suite'e bağlanmanıza olanak sağlayacak örnek bir 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 codelab'in son adımında, bu sahte JSON dosyasını kendi yapılandırmanızla değiştirebilmeniz için gerçek bir Firebase projesi ve Firebase Android Uygulamasının nasıl oluşturulacağını öğreneceksiniz.

Uygulamayı çalıştırın

Artık projeyi Android Studio'ya 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 Emülatörünüzü başlatın.
  2. Android Studio'da Çalıştır'a tıklayın ( uygulamak ) araç çubuğunda.

Uygulama Android Emülatörünüzde başlatılmalıdır. Bu noktada boş bir mesaj listesi görmelisiniz ve mesaj gönderip alma işlemi çalışmayacaktır. Bu codelab'in bir sonraki adımında, Dostça Sohbet'i kullanabilmeleri için kullanıcıların kimliklerini doğrulayacaksınız.

6. Kimlik Doğrulamayı Etkinleştir

Bu uygulama, tüm sohbet mesajlarını depolamak için Firebase Gerçek Zamanlı Veritabanını kullanacak. Ancak veri eklemeden önce uygulamanın güvenli olduğundan ve yalnızca kimliği doğrulanmış kullanıcıların mesaj gönderebildiğinden emin olmalıyız. Bu adımda Firebase Authentication'ı etkinleştirip Gerçek Zamanlı Veritabanı Güvenlik Kurallarını yapılandıracağız.

Temel oturum açma işlevini ekleyin

Daha sonra, kullanıcıları tespit etmek ve bir oturum açma ekranı uygulamak için uygulamaya bazı temel Firebase Kimlik Doğrulama kodları ekleyeceğiz.

Geçerli kullanıcıyı kontrol et

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

MainActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

Şimdi MainActivity kullanıcı uygulamayı her açtığında ve kimliği doğrulanmadığında oturum açma ekranına gönderecek şekilde değiştirelim. Görünüme binding eklendikten sonra onCreate() yöntemine aşağıdakini 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ı da kontrol etmek istiyoruz:

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, şu anda kimliği doğrulanmış Firebase kullanıcısı hakkında 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
}

Daha sonra oturum kapatma 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 gerektiğinde kullanıcıyı oturum açma ekranına gönderecek tüm mantığa sahibiz. Daha sonra, kullanıcıların kimliklerini doğru şekilde doğrulamak için oturum açma ekranını uygulamamız gerekiyor.

Oturum Açma ekranını uygulama

SignInActivity.kt dosyasını açın. Burada kimlik doğrulamayı başlatmak için basit bir Oturum Açma 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 açıklamasının 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, Firebase'i MainActivity yaptığınız gibi başlatmak için onCreate() yöntemini düzenleyin:

SignInActivity.kt

// Initialize FirebaseAuth
auth = Firebase.auth

SignInActivity bir 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()
    }
}

Daha sonra, oturum açma sonucunu işlemek için onSignInResult yöntemini uygulayın. Oturum açmanın sonucu başarılıysa MainActivity devam edin:

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)
        }
    }
}

Bu kadar! FirebaseUI ile kimlik doğrulamayı yalnızca birkaç yöntem çağrısıyla ve herhangi bir sunucu tarafı yapılandırmasını yönetmeye gerek kalmadan uyguladınız.

Çalışmanızı test edin

Uygulamayı Android Emülatörünüzde çalıştırın. Hemen oturum açma ekranına gönderilmelisiniz. E-postayla oturum aç düğmesine dokunun ve ardından bir hesap oluşturun. Her şey doğru uygulandıysa mesajlaşma ekranına yönlendirilmeniz gerekir.

Oturum açtıktan sonra tarayıcınızda Firebase Emulator Suite kullanıcı arayüzünü açın ve ardından ilk oturum açan kullanıcı hesabını görmek için Kimlik Doğrulama sekmesine tıklayın.

7. Mesajları okuyun

Bu adımda, Gerçek Zamanlı Veritabanında saklanan mesajları okumak ve görüntülemek için işlevsellik ekleyeceğiz.

Örnek mesajları içe aktar

  1. Firebase Emulator Suite kullanıcı arayüzünde Gerçek Zamanlı Veritabanı sekmesini seçin.
  2. initial_messages.json dosyasını codelab deposunun yerel kopyasından veri görüntüleyiciye sürükleyip bırakın.

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

Verileri oku

Mesajları senkronize et

Bu bölümde, yeni eklenen mesajları uygulama kullanıcı arayüzüne senkronize eden kodu şu şekilde ekliyoruz:

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

MainActivity.kt

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

MainActivity'nizin onCreate() yöntemini, aşağıda tanımlanan kodla // Initialize Realtime Database and FirebaseRecyclerAdapter altında değiştirin. Bu kod, Gerçek Zamanlı Veritabanındaki tüm mevcut mesajları ekler ve ardından Firebase Gerçek Zamanlı Veritabanınızdaki messages yolu altındaki yeni alt girişleri dinler. Her mesaj 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)
)

FriendlyMessageAdapter.kt sınıfındaki sonraki adımda, iç sınıf olan MessageViewHolder() içindeki 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)
        }
    }
    ...
}

Ayrıca resim olan mesajları da görüntülememiz gerekir, bu nedenle bind() yöntemini ImageMessageViewHolder() iç sınıfına da uygulamamız gerekir:

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 geri döndüğünüzde, Firebase Gerçek Zamanlı Veritabanından güncellemeleri dinlemeyi başlatın ve durdurun. MainActivity 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()
}

Senkronizasyon mesajlarını test edin

  1. Çalıştıra tıkla ( uygulamak ).
  2. Emulator Suite kullanıcı arayüzünde Gerçek Zamanlı Veritabanı sekmesine dönün ve ardından manuel olarak yeni bir mesaj ekleyin. Mesajın Android uygulamanızda göründüğünü doğrulayın:

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

8. Mesaj Gönder

Kısa mesaj göndermeyi uygulayın

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

MainActivity sınıfındaki onCreate() yöntemindeki gönder düğmesinin tıklama dinleyicisini güncelleyin. Bu kod zaten onCreate() yönteminin 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("")
}

Resimli mesaj gönderimini uygulayın

Bu bölümde, uygulama kullanıcılarının resimli mesaj gönderme özelliğini ekleyeceksiniz. Bir resim mesajı oluşturmak şu adımlarla yapılır:

  • Fotoğraf seç
  • Resim seçimini yönetin
  • Gerçek Zamanlı Veritabanına geçici görüntü mesajı yaz
  • Seçilen görseli yüklemeye başla
  • Yükleme tamamlandıktan sonra resim mesajının URL'sini yüklenen resmin URL'siyle güncelleyin

Fotoğraf seç

Bu codelab, görsel eklemek için Firebase için Cloud Storage'ı kullanıyor. Cloud Storage, uygulamanızın ikili verilerini depolamak için iyi bir yerdir.

Resim seçimini yönetin ve geçici mesaj yazın

Kullanıcı bir görsel seçtikten sonra görsel seçim Intent başlatılır. Bu onCreate() yönteminin sonundaki kodda zaten uygulanmıştır. Bittiğinde MainActivity onImageSelected() yöntemini çağırır. Aşağıdaki kod parçasını kullanarak veritabanına görselin yüklenmekte olduğunu belirten geçici görsel URL'sini içeren bir mesaj yazacaksı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ükleyin ve mesajı güncelleyin

putImageInStorage() yöntemini MainActivity ekleyin. Seçilen görüntünün yüklenmesini başlatmak için onImageSelected() işlevi çağrılır. Yükleme tamamlandığında mesajı uygun görseli kullanacak şekilde güncelleyeceksiniz.

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 edin

  1. Android Studio'da, uygulamak Çalıştır düğmesi.
  2. Android Emülatörünüzde bir mesaj girin ve ardından gönder düğmesine dokunun. Yeni mesajın uygulama kullanıcı arayüzünde ve Firebase Emulator Suite kullanıcı arayüzünde görünmesi gerekir.
  3. Android Emülatöründe, cihazınızdan bir resim seçmek için "+" resmine dokunun. Yeni mesaj önce bir yer tutucu görselle, ardından görsel yükleme tamamlandıktan sonra seçilen görselle görünür olmalıdır. Yeni mesajın ayrıca Emulator Suite kullanıcı arayüzünde, özellikle Gerçek Zamanlı Veritabanı sekmesinde bir nesne olarak ve Depolama sekmesinde bir blob olarak görünmesi gerekir.

9. Tebrikler!

Firebase'i kullanarak gerçek zamanlı bir sohbet uygulaması geliştirdiniz!

Ne öğrendin

  • Firebase Kimlik Doğrulaması
  • Firebase Gerçek Zamanlı Veritabanı
  • Firebase için Bulut Depolama

Daha sonra, Firebase'i kendi Android uygulamanıza eklemek için bu codelab'de öğrendiklerinizi kullanmayı 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 projesi ve yalnızca öykünülmüş kaynaklar yerine) nasıl kullanacağınızı öğrenmek istiyorsanız bir sonraki adıma geçin.

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

10. İsteğe bağlı: Firebase projesi oluşturun ve kurun

Bu adımda, bu codelab ile kullanmak üzere gerçek bir Firebase projesi ve bir Firebase Android Uygulaması oluşturacaksınız. Ayrıca uygulamaya özel Firebase yapılandırmanızı da uygulamanıza ekleyeceksiniz. Son olarak uygulamanızda kullanılacak gerçek Firebase kaynaklarını ayarlayacaksınız.

Firebase projesi oluşturma

  1. Tarayıcınızda Firebase konsoluna gidin.
  2. Proje ekle'yi seçin.
  3. Bir proje adı seçin veya girin. İstediğiniz ismi kullanabilirsiniz.
  4. Bu codelab için Google Analytics'e ihtiyacınız olmadığından projeniz için etkinleştirmeyi atlayabilirsiniz.
  5. Proje Oluştur'a tıklayın. Projeniz hazır olduğunda Devam'ı tıklayın.

Firebase'i Android projenize ekleyin

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ıdaki gibi bir çıktı görmelisiniz. Ö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 şu adımları izleyin:

  1. Yeni projenizin genel bakış ekranından, kurulum iş akışını başlatmak için Android simgesine tıklayın: android uygulaması ekle
  2. Bir sonraki ekranda uygulamanızın paket adı olarak com.google.firebase.codelab.friendlychat yazın.
  3. Uygulamayı Kaydet'i ve ardından Firebase yapılandırma dosyanızı indirmek için Google-services.json'u İndir'i tıklayın.
  4. google-services.json dosyasını Android projenizin app dizinine kopyalayın.
  5. Konsolun kurulum iş akışında gösterilen sonraki adımları atlayın (bu adımlar sizin için build-android-start projesinde zaten yapılmıştır).
  6. Projenizi Gradle dosyalarıyla senkronize ederek tüm bağımlılıkların uygulamanızda mevcut olduğundan emin olun. Android Studio araç çubuğundan File > Sync Project with Gradle Files öğesini seçin. Ayrıca yapılandırma değişikliklerinin gerçekleşmesi için Build/Clean Project ve Build/Rebuild Project'i çalıştırmanız gerekebilir.

Firebase Kimlik Doğrulamasını Yapılandırma

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

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

Bu codelab'de daha sonra "CONFIGURATION_NOT_FOUND" mesajını içeren hatalar alırsanız bu adıma geri dönün ve çalışmanızı bir kez daha kontrol edin.

Gerçek Zamanlı Veritabanını Yapılandırma

Bu codelab'deki uygulama, sohbet mesajlarını Firebase Gerçek Zamanlı Veritabanında saklar. Bu bölümde Firebase Güvenlik Kuralları adı verilen bir JSON yapılandırma dili aracılığıyla bir veritabanı oluşturup güvenliğini yapılandıracağız.

  1. Firebase konsolunda sol taraftaki gezinme panelinden Gerçek Zamanlı Veritabanı'nı seçin.
  2. Yeni bir Gerçek Zamanlı Veritabanı örneği oluşturmak için Veritabanı Oluştur'a tıklayın. İstendiğinde us-central1 bölgesini seçin ve İleri'ye tıklayın.
  3. Güvenlik kuralları sorulduğunda kilitli modu seçin ve Etkinleştir'i tıklayın.
  4. Veritabanı örneği oluşturulduktan sonra Kurallar sekmesini seçin ve ardından kural yapılandırmasını aşağıdakilerle güncelleyin:
     {
       "rules": {
         "messages": {
           ".read": "auth.uid != null",
           ".write": "auth.uid != null"
         }
       }
     }
    

Güvenlik Kurallarının nasıl çalıştığı hakkında daha fazla bilgi için ("auth" değişkenine ilişkin belgeler dahil), Gerçek Zamanlı Veritabanı güvenlik belgelerine bakın.

Firebase için Cloud Storage'ı Yapılandırma

  1. Firebase konsolunda sol taraftaki gezinme panelinden Depolama'yı seçin.
  2. Projeniz için Bulut Depolamayı etkinleştirmek üzere Başlayın'a tıklayın.
  3. Önerilen varsayılanları kullanarak paketinizi ayarlamak için iletişim kutusundaki adımları izleyin.

Firebase kaynaklarına bağlanın

Bu codelab'in önceki bir adımında aşağıdakileri MainActivity.kt dosyasına 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 onun gerçek Firebase kaynaklarına bağlamak istiyorsanız, bu bloğu kaldırabilir veya uygulamanızı yayın modunda çalıştırarak BuildConfig.DEBUG false olmasını sağlayabilirsiniz.