Android Kotlin: отсутствует google_app_id. Аналитика Firebase отключена - PullRequest
0 голосов
/ 03 апреля 2020

Я разрабатываю социальную сеть на Android. Данные хранятся в Firebase. Я начинаю с аутентификации. Это работает. И теперь у меня есть модуль чата. Но у меня проблема только при запуске приложения.

У меня есть это сообщение logcat:

2020-04-03 02:20:04.154 23409-23454/? W/FA: Failed to retrieve Firebase Instance Id
2020-04-03 02:20:04.960 23409-23454/? W/FA: Failed to retrieve Firebase Instance Id
2020-04-03 02:20:47.462 23675-23884/? E/FA: Missing google_app_id. Firebase Analytics disabled. See https://firebase.google.com/docs/android/setup
2020-04-03 02:20:47.471 23675-23884/? E/FA: Uploading is not possible. App measurement disabled
2020-04-03 02:20:48.157 2849-2859/? W/SQLiteConnectionPool: A SQLiteConnection object for database '/data/user/0/com.google.android.googlequicksearchbox/databases/icing-mdh.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.

Я даю вам свое приложение build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.projetensuprs20"
        minSdkVersion 15
        targetSdkVersion 28
        multiDexEnabled true
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.firebase:firebase-auth:16.2.1'
    implementation 'com.google.firebase:firebase-firestore:17.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'com.squareup.picasso:picasso:2.71828'

    implementation 'com.google.firebase:firebase-core:16.0.8'
    implementation 'com.google.android.gms:play-services-auth:16.0.1'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.multidex:multidex:2.0.0'

}

Я даю вам свой ChatFragment:

package com.example.projetensuprs20.fragments

import android.content.Context
import android.net.Uri
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.projetensuprs20.adapters.ChatAdapter
import com.example.projetensuprs20.models.Message
import com.example.projetensuprs20.toast
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.firestore.CollectionReference
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.firestore.FirebaseFirestoreException
import com.google.firebase.firestore.QuerySnapshot
import kotlinx.android.synthetic.main.fragment_chat.*
import kotlinx.android.synthetic.main.fragment_chat.view.*
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap


class ChatFragment : androidx.fragment.app.Fragment() {

    private lateinit var _view: View

    private val mAuth: FirebaseAuth = FirebaseAuth.getInstance()

    private lateinit var adapter: ChatAdapter
    private lateinit var currentUser: FirebaseUser

    private val messageList: ArrayList<Message> = ArrayList()

    private val store: FirebaseFirestore = FirebaseFirestore.getInstance()
    private lateinit var chatDBRef: CollectionReference

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        _view = inflater.inflate(com.example.projetf2.R.layout.fragment_chat, container, false)

        setUpChatDB()
        setUpCurrentUser()
        setUpRecyclerView()
        setUpChatBtn()

        return _view
    }

    private fun setUpChatDB() {
        chatDBRef = store.collection("chat")
    }

    private fun setUpCurrentUser(){
        currentUser = mAuth.currentUser!!
    }

    private fun setUpRecyclerView() {

        val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
        adapter = ChatAdapter(messageList, currentUser.uid)

        _view.recyclerView.setHasFixedSize(true)
        _view.recyclerView.layoutManager = layoutManager
        _view.recyclerView.itemAnimator = androidx.recyclerview.widget.DefaultItemAnimator() as RecyclerView.ItemAnimator?
        _view.recyclerView.adapter = adapter
    }

    private fun setUpChatBtn() {
        _view.buttonSend.setOnClickListener {
            val messageText = editTextMessage.text.toString()
            if (messageText.isNotEmpty()) {
                val message =
                    Message(currentUser.uid, messageText, currentUser.photoUrl.toString(), Date())
                saveMessage(message)
                _view.editTextMessage.setText("")
            }
        }
    }

    private fun saveMessage(message: Message){
        val newMessage = HashMap<String, Any>()
        newMessage["authorId"] = message.authorId
        newMessage["message"] = message.message
        newMessage["profileImageURL"] = message.profileImageUrl
        newMessage["sentAt"] = message.sentAt

        chatDBRef.add(newMessage)
            .addOnCompleteListener {
                activity!!.toast("Message enregistré")
            }
            .addOnFailureListener {
                activity!!.toast("Message erreur")
            }
    }

    private fun subscribeToChatMessages(){
        chatDBRef.addSnapshotListener(object: EventListener, com.google.firebase.firestore.EventListener<QuerySnapshot> {
            override fun onEvent(snapshot: QuerySnapshot?, exception: FirebaseFirestoreException?)
            {
                exception?.let {
                    activity!!.toast("Exception")
                    return
                }

                snapshot?.let{
                    messageList.clear()
                    val messages = it.toObjects(Message::class.java)
                    messageList.addAll(messages)
                    adapter.notifyDataSetChanged()
                }
            }
        })
    }
}

Спасибо за вашу помощь.

...