Firebase Cloud Messagingに移行した後、アプリを開くとクラッシュし、Java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
というエラーがスローされます。新しいgoogle-services.jsonを既に配置し、SDKを更新しています。
これが私のMainActivityです
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Check Google play service
GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
int resultCode = googleAPI.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.e(LOG_TAG, "This device is not supported.");
finish();
}
}
Log.i(TAG, "InstanceID token: " + FirebaseInstanceId.getInstance().getToken());
}
}
追加を確認してください
apply plugin: 'com.google.gms.google-services'
アプリのgradleファイルの下部で、プロジェクトを削除して再構築します
ここで関連があるかどうかはわかりません。しかし、このクラッシュが発生する可能性がある別のシナリオがあります。
アプリにサービスがあり(プロセスが異なる)、独自のApplication
クラスを作成している場合、サービスとフォアグラウンドアプリは同じApplicationクラス(同じインスタンスではない)を使用して初期化する。クラッシュを処理するためにcom.google.firebase:firebase-crash
依存関係を使用している場合、バックグラウンドサービスyour.app.packagename:background_crash
が作成されます。何らかの理由で、これは私のアプリでクラッシュを引き起こしていました。特に、Applicationクラスでは、次のような呼び出しを行っていたため、
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Applicationクラスで初期化するときのバックグラウンドサービスは、どういうわけかFirebaseが初期化されていないことを前提としています。これを修正するために、私はやった
if (!FirebaseApp.getApps(this).isEmpty())
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
私は同様の問題を抱えており、私にとってはマニフェストの合併に伴うバグ/問題でした。アプリのマニフェストファイルのtools:node="replace"
が原因で、FirebaseInitProvider
が最終的なマニフェストファイルに挿入されていないことがわかりました。したがって、このxmlタグを削除しようとすると、FirebaseInitProvider
が挿入され、Firebaseが適切に初期化されます。
@jmodrakoの答えは私の問題を解決しました... tools:node="replace"
からtools:node="merge"
説明... AndroidManifest.xmlで
From
<application
...
tools:node="replace">
To
<application
...
tools:node="merge">
ライブラリテーマの問題をマージしますか?tools:replace="Android:theme"
を使用して解決されたビルドの問題
build.gradleファイル:
buildscript {
repositories {
jcenter()
mavenLocal()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.1.2'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
jcenter()
mavenLocal()
}
}
\ app\build.gradleファイル:
apply plugin: 'com.Android.application'
Android {
..
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
..
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-messaging:9.0.2'
}
apply plugin: 'com.google.gms.google-services'
FireCreateの初期化をApplicationクラスのonCreate内に移動します。また、オフライン永続性を有効にしている場合、FirebaseDatabase.getInstance()。setPersistenceEnabled(true)は他の初期化の前に来る必要があります。
ビルドアクション(GoogleServicesJson)をファイル名Google-Services.Jsonに変更します。
依存関係に追加するだけです:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
...
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-messaging:9.0.2'
}
適用plugin: 'com.google.gms.google-services'
Android Studio
大丈夫です。
私の場合、アプリの起動時にFirebaseを初期化していませんでした。それを解決するには、次のことをしなければなりませんでした
@Service
public class FirebaseSetup implements CommandLineRunner {
public void run(String... args) throws Exception {
initializeFirebase();
}
private void initializeFirebase() throws FileNotFoundException, IOException {
FileInputStream serviceAccount = new FileInputStream(ResourceUtils.getFile("classpath:ssf1-v1-firebase-adminsdk-zr72u-afcb5bc13b.json"));
FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(GoogleCredentials.fromStream(serviceAccount)).build();
FirebaseApp.initializeApp(options);
}
}
Firebaseでアプリケーションを登録し、google-services.jsonをルートプロジェクトにコピーします。
ルートbuild.gradleにclasspath 'com.google.gms:google-services:3.1.0
を適用します。
apply plugin: 'com.google.gms.google-services
をプロジェクトグラドルに適用します。