android - Android Kotlin:缺少 google_app_id。Firebase 分析已停用
问题描述
我在 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()
}
}
})
}
}
谢谢你的帮助。
解决方案
build.gradle
在项目级别检查您的 gradle 版本
对于我的情况,我将 gradle 版本从
classpath 'com.android.tools.build:gradle:3.4.1'
增加到
classpath 'com.android.tools.build:gradle:4.3.8'
在build.gradle
项目级别,问题消失了。
注意:
之后修复 Gradle 包装器并重新导入项目
推荐阅读
- c - “C中的参数”的定义是什么
- linux - mmap 文件上的 fallocate 会减少内存消耗吗?
- python-3.x - 如何使用 for 循环读取多个 pandas 数据帧
- python - 使用`savefig`时在PDF中缺少`matplotlib.imshow`插入的图像
- sql-server - 如何获取sql server中的数据组合?
- windows - 使用 GCloud Compute Windows 实例作为 git 远程服务器
- php - Apache 将 PHP 数组标记作为结束标记处理
- android - 以编程方式在 ActionBar 上设置 app:contentInsetStartWithNavigation
- c# - 从身份中删除引导程序
- python - 从嵌套子列表返回八元组模式