我在我的Android项目中添加了Firebase,以使用Firebase Cloud Messaging。我遵循文档,但没有找到任何指示来致电FirebaseApp.initializeApp()
。
我的应用程序正常运行,除了崩溃后,以下错误。
Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.my.app. Make sure to call FirebaseApp.initializeApp(Context) first.
at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
at com.google.firebase.iid.FirebaseInstanceId.getInstance(Unknown Source)
at com.my.app.core.ApplicationEx.onCreate(ApplicationEx.java:79)
当我搜索错误时,给出的分辨率是在启动时致电FirebaseApp.initializeApp()
。
我想知道这是否真的是必要的,因为文档没有提及它,并且我的应用程序(大部分)没有它。
有人知道调用FirebaseApp.initializeApp()
是否真的是必要的,还有什么可能导致我上面提到的错误?
以下是我的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.my.app"
minSdkVersion 17
targetSdkVersion 26
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
flavorDimensions "appType"
productFlavors {
passenger {
dimension "appType"
applicationId "com.my.app.passenger"
versionCode 1
versionName "1"
}
driver {
dimension "appType"
applicationId "com.my.app.driver"
versionCode 1
versionName "1"
}
admin {
dimension "appType"
applicationId "com.my.app.admin"
versionCode 1
versionName "1"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
testCoverageEnabled true
}
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/MANIFEST.MF'
}
}
}
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
dependencies {
implementation project(path: ':cards')
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "com.android.support:design:${supportVersion}"
implementation "com.android.support:support-v4:${supportVersion}"
implementation "com.android.support:appcompat-v7:${supportVersion}"
implementation "com.android.support:cardview-v7:${supportVersion}"
implementation "com.android.support:gridlayout-v7:${supportVersion}"
implementation "com.google.android.gms:play-services-maps:${googlePlayServicesVersion}"
implementation "com.google.android.gms:play-services-location:${googlePlayServicesVersion}"
implementation "com.google.android.gms:play-services-places:${googlePlayServicesVersion}"
implementation "com.google.android.gms:play-services-gcm:${googlePlayServicesVersion}"
implementation "com.google.android.gms:play-services-ads:${googlePlayServicesVersion}"
implementation "com.google.android.gms:play-services-auth:${googlePlayServicesVersion}"
implementation 'com.google.maps:google-maps-services:0.2.5'
implementation "com.google.firebase:firebase-messaging:${googlePlayServicesVersion}"
implementation "com.loopj.android:android-async-http:${asyncHttpVersion}"
implementation "com.android.support.test.espresso:espresso-idling-resource:${espressoVersion}"
implementation 'com.android.support:multidex:1.0.2'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'org.slf4j:slf4j-api:1.7.25'
implementation 'com.github.tony19:logback-android-core:1.1.1-6'
implementation 'ch.acra:acra:4.9.2'
implementation('com.github.tony19:logback-android-classic:1.1.1-6') {
exclude group: 'com.google.android', module: 'android' // workaround issue #73
}
testImplementation 'org.testng:testng:6.9.6'
testImplementation 'org.mockito:mockito-core:1.10.19'
testImplementation 'org.powermock:powermock-api-mockito:1.6.5'
testImplementation 'org.powermock:powermock-module-junit4-rule-agent:1.6.5'
testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.5'
testImplementation 'org.powermock:powermock-module-junit4:1.6.5'
androidTestImplementation "com.android.support:support-annotations:${supportVersion}"
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test:rules:1.0.1'
androidTestImplementation 'org.testng:testng:6.9.6'
androidTestImplementation 'org.mockito:mockito-core:1.10.19'
androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
androidTestImplementation("com.android.support.test.espresso:espresso-core:${espressoVersion}", {
exclude group: 'com.android.support', module: 'support-annotations'
})
}
apply plugin: 'com.google.gms.google-services'
firebase SDK通常不支持除主过程以外的过程。如果以及何时启动ACRA并开始另一个过程,其自己的过程将为该过程创建一个新的应用程序子类。这是因为每个应用程序过程都必须完全具有一个实例化的一个应用程序对象。
这对您的应用意味着什么是其他过程永远不应使用Firebase API。这意味着您需要找到另一个地方来获取IID令牌。
(请注意,Firebase SDK会由默认情况下合并到您的应用中的ContentProvider自动初始化 - 您绝对不必致电FireBaseApp.Initializeapp(),除非您已删除了此contentProvider或您不使用Google-服务插件。)
通常,当应用需要获取IID令牌时,它们会创建FirebaseInstanceIdService的子类,如文档中所述。每当知道新令牌时,就会通知此服务。那是您应该检索并将其发送到服务器的地方。
步骤1:
从Firebase Project下载Google-Services.json,您将在其中查看Firebase Project键和值
"project_info": {
"project_number": "XXXXXXXXXXXX",
"firebase_url": "https://xxxxxxx-XXXXXX.firebaseio.com",
"project_id": "xxxxxx-XXXXX",
"storage_bucket": "xxxxxx-XXXXX.appspot.com"
}
步骤2:在您的应用程序课中,您可以进入Firebase
的条目private FirebaseDatabase database;
public void onCreate() {
super.onCreate();
FirebaseApp.initializeApp(this);
database = FirebaseDatabase.getInstance();
}
// by calling this method wherever you can use firebase database object for further operations.
public FirebaseDatabase getDataBase(){
return database;
}
步骤3:在您的项目级别build.gradle
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.google.firebase:firebase-messaging:11.4.0'
compile 'com.google.firebase:firebase-database:11.4.0'
}
apply plugin: 'com.google.gms.google-services'
步骤4:
在您的项目级别build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
allprojects {
repositories {
jcenter()
maven { url "https://maven.google.com" }// Google's Maven repository
}
}
,有关更多问题,请阅读文档