Firebase Android Codelab - Dostça Sohbet Oluşturun

ekran görüntüsü

Resim: Çalışan Dostu Sohbet uygulaması.

Dostça Sohbet kod laboratuvarına hoş geldiniz. Bu kod laboratuvarında, Android'de bir 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.
  • Firebase için Cloud Storage'da ikili dosyalar nasıl saklanır?
  • Firebase ile bir Android uygulaması geliştirmek için Firebase Local Emulator Suite nasıl kullanılır?

Neye ihtiyacın olacak

  • Android Studio sürüm 4.2+.
  • Android 5.0+ ile bir Android Emülatörü .
  • Java 7 veya üstü. Java'yı yüklemek için bu talimatları kullanın; sürümünüzü kontrol etmek için java -version çalıştırın.
  • Kotlin programlama diline aşinalık.

Depoyu klonla

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

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

Android Studio'ya aktar

Android Studio'da File > Open öğesini seçin, ardından build-android-start dizinini seçin ( android_studio_klasörü ) örnek kodu indirdiğiniz dizinden.

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

Bağımlılıkları kontrol et

Bu codelab'de, ihtiyaç duyacağınız tüm bağımlılıklar sizin için zaten eklenmiş durumda, ancak Firebase SDK'sını uygulamanıza nasıl ekleyeceğinizi anlamak önemlidir:

build.gradle

buildscript {
    // ...

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.2'

        // The google-services plugin is required to parse the google-services.json file
        classpath 'com.google.gms:google-services:4.3.5'
    }
}

uygulama/build.gradle

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:19.0.0'

    // Firebase SDK
    implementation platform('com.google.firebase:firebase-bom:26.6.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:7.2.0'
    implementation 'com.firebaseui:firebase-ui-database:7.2.0'
}

Firebase Emulator Suite'i çalıştırmak için Firebase CLI'yi yüklemeniz ve kullanmanız gerekir.

CLI'yi yükleyin

Seçenek 1 - npm ile yükleyin

Makinenizde zaten Node.js ve npm kuruluysa, CLI'yi aşağıdaki komutla kurabilirsiniz:

npm install -g firebase-tools@latest

Seçenek 2 - Bağımsız ikili dosyayı yükleyin

Node.js/npm'niz yoksa veya uygulama geliştirme konusunda yeniyseniz , platformunuz için buradaki talimatları izleyerek CLI'yi bağımsız bir ikili dosya olarak yükleyebilirsiniz.

Kurulumu kontrol et

Firebase CLI'yi yükledikten sonra, 9.11.0 veya daha yüksek bir sürüme sahip olduğunuzdan emin olmak için aşağıdaki komutu çalıştırın:

firebase --version

Emülatörleri başlatın

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, klonlanmış örnek kodda bulunan 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'e gidin:

Emulator Suite UI ana sayfası

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

Uygulamanızı bağlayın

Android Studio'da MainActivity.kt 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)
}

google-services.json'u ekleyin

Android uygulamanızın Firebase'e bağlanabilmesi için Android projenizin app klasörünün içine bir google-services.json dosyası eklemelisiniz. Bu kod laboratuvarının amaçları doğrultusunda, Firebase Emulator Suite'e bağlanmanıza izin verecek bir sahte 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 sahte 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ırın

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 (yürütmek ) 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önderme ve alma çalışmayacaktır. Bu kod laboratuvarının sonraki adımında, Dostça Sohbet'i kullanabilmeleri için kullanıcıların kimliğini doğrulayacaksınız.

Bu uygulama, tüm sohbet mesajlarını saklamak için Firebase Realtime Database'i kullanacaktır. Yine de 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ştireceğiz ve Realtime Database Security Rules'u yapılandıracağız.

Temel oturum açma işlevi ekleyin

Ardından, kullanıcıları algılamak ve bir oturum açma ekranı uygulamak için uygulamaya bazı temel Firebase Kimlik Doğrulama kodu ekleyeceğiz.

Mevcut kullanıcıyı kontrol et

Önce 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 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. binding görünüme onCreate() 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
}

Kullanıcının onStart() sırasında oturum onStart() 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
}

Ardından, signOut() 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öndermek için tüm mantığa sahibiz. Ardından, kullanıcıların kimliğini doğru bir şekilde doğrulamak için oturum açma ekranını uygulamamız gerekiyor.

Oturum Açma ekranını uygulayın

SignInActivity.kt dosyasını SignInActivity.kt . 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 kullanacaksınız.

// Firebase instance variables SignInActivity // Firebase instance variables yorumu 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, MainActivity yaptığınız gibi başlatmak için onCreate() yöntemini MainActivity :

SignInActivity.kt

// Initialize FirebaseAuth
auth = Firebase.auth

SignInActivity ActivityResultLauncher alanı SignInActivity :

SignInActivity.kt

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

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

Ardından, onStart() 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 MainActivity sonucu başarılıysa MainActivity devam MainActivity :

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ında ve herhangi bir sunucu tarafı yapılandırmasını yönetmeye gerek duymadan 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önderilmelidir. E-posta ile oturum aç düğmesine dokunun, ardından bir hesap oluşturun. Her şey doğru bir şekilde uygulandıysa, mesajlaşma ekranına gönderilmelidir.

Oturum açtıktan sonra, tarayıcınızda Firebase Emulator Suite Kullanıcı Arayüzü'nü açın, ardından bu ilk oturum açmış kullanıcı hesabını görmek için Kimlik Doğrulama sekmesine tıklayın.

Bu adımda, Realtime Database'de 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.

Şimdi 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ı 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.
  • MainActivity sınıfındaki diğer MainActivity örnek değişkenlerinizle Veritabanı örneği değişkenlerini ekleme:

MainActivity.kt

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

MainActivity'nizin onCreate() yöntemini // Initialize Realtime Database and FirebaseRecyclerAdapter altında aşağıda tanımlanan kodla değiştirin. Bu kod, Realtime Database'deki mevcut tüm mesajları ekler ve ardından Firebase Realtime Database'inizdeki messages yolu altındaki yeni alt girdileri 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ının bir sonraki MessageViewHolder() iç sınıfı içinde bind() yöntemini MessageViewHolder() :

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ı görüntülememiz gerekiyor, bu nedenle bind() yöntemini ImageMessageViewHolder() iç sınıfı içinde de ImageMessageViewHolder() :

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önün, MainActivity Realtime Database'den güncellemeleri dinlemeye başlayın ve durdurun. Güncelleştirme onPause() ve onResume() yöntemleri MainActivity aşağıdaki gibi gösterilir:

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ır'a tıklayın (yürütmek ).
  2. Emulator Suite UI'de Realtime Database sekmesine dönün, ardından manuel olarak yeni bir mesaj ekleyin. Mesajın Android uygulamanızda göründüğünü onaylayın:

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

Metin mesajı göndermeyi uygula

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, itilen nesnenin yoluna otomatik olarak oluşturulan bir kimlik ekler. Bu kimlikler sıralıdır ve yeni mesajların listenin sonuna eklenmesini sağlar.

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

Bu bölümde, uygulama kullanıcılarının resimli mesajlar göndermesi için yetenek ekleyeceksiniz. Bir görüntü mesajı oluşturma şu adımlarla yapılır:

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

Fotoğraf seç

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

Görüntü seçimini yapın ve geçici mesaj yazın

Kullanıcı bir resim seçtiğinde, resim seçimi 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çacığını kullanarak, veritabanına görüntünün yüklendiğini belirten geçici bir resim url'si 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ükle ve mesajı güncelle

putImageInStorage() yöntemini putImageInStorage() MainActivity . Seçilen görüntünün yüklenmesini başlatmak için onImageSelected() içinde onImageSelected() . Yükleme tamamlandığında, uygun resmi kullanmak için mesajı 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 et

  1. Android Studio'da,yürütmek Çalıştır düğmesi.
  2. Android Emülatörünüzde 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ünmelidir.
  3. Android Emülatöründe, cihazınızdan bir resim seçmek için "+" resmine dokunun. Yeni mesaj, önce bir yer tutucu resimle, ardından resim yükleme tamamlandığında seçilen resimle görünür olmalıdır. Yeni mesaj, özellikle Realtime Database sekmesinde bir nesne ve Storage sekmesinde bir blob olarak Emulator Suite UI'de de görünür olmalıdır.

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

ne öğrendin

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

Ardından, Firebase'i kendi Android uygulamanıza eklemek için bu kod laboratuvarında öğrendiklerinizi kullanmayı deneyin! Firebase hakkında daha fazla bilgi edinmek için firebase.google.com adresini ziyaret edin .

Gerçek bir Firebase projesinin nasıl kurulacağını ve gerçek Firebase kaynaklarını nasıl kullanacağınızı öğrenmek istiyorsanız (bir demo projesi ve yalnızca benzetilmiş kaynaklar yerine), 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.

Bu adımda, bu codelab ile kullanmak için gerçek bir Firebase projesi ve bir Firebase Android Uygulaması oluşturacaksınız. Uygulamanıza özel Firebase yapılandırmanızı da uygulamanıza ekleyeceksiniz. Son olarak, uygulamanızla kullanmak için gerçek Firebase kaynakları kuracaksınız.

Firebase projesi oluşturun

  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 kod laboratuvarı için Google Analytics'e ihtiyacınız yoktur, dolayısıyla projeniz için etkinleştirmeyi atlayabilirsiniz.
  5. Proje Oluştur'u tıklayın. Projeniz hazır olduğunda Devam'ı tıklayın.

Android projenize Firebase 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 olan satır SHA1 hash'idir. 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 girin.
  3. Uygulamayı Kaydet'i tıklayın, 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 (bunlar 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ız için kullanılabilir olduğundan emin olun. Android Studio araç çubuğundan File > Sync Project with Gradle Files öğesini seçin.

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

Uygulamanızın kullanıcılarınız adına Firebase Authentication API'lerine erişebilmesi için önce 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/Parola öğesini tıklayın, ardından anahtarı etkin (mavi) konumuna getirin.
  4. Google öğesini tıklayın, ardından anahtarı etkin (mavi) konumuna getirin ve bir proje destek e-postası ayarlayın.

Bu kod laboratuvarında daha sonra "CONFIGURATION_NOT_FOUND" mesajıyla hata alırsanız, bu adıma geri dönün ve çalışmanızı iki kez kontrol edin.

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

Bu codelab'deki uygulama, sohbet mesajlarını Firebase Realtime Database'de saklar. Bu bölümde, bir veritabanı oluşturacağız ve güvenliğini Firebase Güvenlik Kuralları adlı bir JSON yapılandırma dili aracılığıyla 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 ardından İleri 'yi tıklayın.
  3. Güvenlik kuralları sorulduğunda, kilitli modu seçin ve ardından Etkinleştir'i tıklayın.
  4. Veritabanı örneği oluşturulduktan sonra, Kurallar sekmesini seçin, ardından aşağıdakilerle kural yapılandırmasını 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şkeniyle ilgili belgeler dahil), Gerçek Zamanlı Veritabanı güvenlik belgelerine bakın .

Firebase için Cloud Storage'ı yapılandırın

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

Firebase kaynaklarına bağlanın

Bu codelab'in önceki bir adımında, MainActivity.kt'ye aşağıdakileri MainActivity.kt . 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 false olacak şekilde yayın modunda çalıştırabilirsiniz.