it-source

Android에서 FirebaseApp.initializeApp(Context)을 먼저 호출하십시오.

criticalcode 2023. 6. 30. 22:26
반응형

Android에서 FirebaseApp.initializeApp(Context)을 먼저 호출하십시오.

이 문제에 직면하여 이 사이트에서 몇 가지 답변을 보았으나 적절한 해결책을 얻지 못했습니다.
는 이전 의 의이전버사전다니습용했을 .Firebase업그레이드 및 업데이트를 사용하여 업그레이드하려고 할 때Firebase에 등급을 매기다.DatabaseReference오류가 표시되고 작동하지 않습니다.
매니페스트 파일 전체 코드를 추가하오니 이 문제를 해결할 수 있도록 도와주시기 바랍니다.
제 기내꺼입니다.manifest

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="firebasechat.com.firebasechat">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:name=".Activity.SimpleBlog"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Activity.RegisterActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

나의Module app아래에 나와 있습니다.

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "firebasechat.com.firebasechat"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        multiDexEnabled  true

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }
}



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.android.support:appcompat-v7:26.+'
compile 'com.android.volley:volley:1.0.0'
compile "com.google.firebase:firebase-database:11.0.0"
compile 'com.google.android.gms:play-services:11.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
testCompile 'junit:junit:4.12'
    testCompile 'junit:junit:4.12'
}

그리고.Project gradle

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:4.2.0'// Updated version of google service
    }
}
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com" // Google's Maven repository
        }
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

는 저의 아는나입니다.Activity.

    public class RegisterActivity extends AppCompatActivity {

    EditText username, password;
    Button registerButton;
    String user, pass;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        username = (EditText)findViewById(R.id.username);
        password = (EditText)findViewById(R.id.password);
        registerButton = (Button)findViewById(R.id.registerButton);


          FirebaseApp.initializeApp(this);



        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                user = username.getText().toString();
                pass = password.getText().toString();


                    final ProgressDialog pd = new ProgressDialog(RegisterActivity.this);
                    pd.setMessage("Loading...");
                    pd.show();

                    String url = "https://pure-coda-174710.firebaseio.com/users.json";

                    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
                        @Override
                        public void onResponse(String s) {

//                            Firebase reference = new Firebase("https://pure-coda-174710.firebaseio.com/users");
                            DatabaseReference reference = FirebaseDatabase.getInstance()
                                    .getReferenceFromUrl("https://pure-coda-174710.firebaseio.com/users");


                            if(s.equals("null")) {
                                reference.child(user).child("password").setValue(pass);
                                Toast.makeText(RegisterActivity.this, "registration successful", Toast.LENGTH_LONG).show();
                            }
                            else {
                                try {
                                    JSONObject obj = new JSONObject(s);

                                    if (!obj.has(user)) {
                                        reference.child(user).child("password").setValue(pass);
                                        Toast.makeText(RegisterActivity.this, "registration successful", Toast.LENGTH_LONG).show();
                                    } else {
                                        Toast.makeText(RegisterActivity.this, "username already exists", Toast.LENGTH_LONG).show();
                                    }

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }

                            pd.dismiss();
                        }

                    },new Response.ErrorListener(){
                        @Override
                        public void onErrorResponse(VolleyError volleyError) {
                            System.out.println("" + volleyError );
                            pd.dismiss();
                        }
                    });

                    RequestQueue rQueue = Volley.newRequestQueue(RegisterActivity.this);
                    rQueue.add(request);

            }
        });
    }
}

의 신의에서.SimpleBlog 프로그램 클래스, in the , FirebaseApp 초기화onCreate()합니다.RegisterActivityFirebase가 하나의 활동이 아닌 전체 응용프로그램으로 초기화되도록 합니다.

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
}

가를 합니다.apply plugin: 'com.google.gms.google-services'에: appgradle

dependencies {
    ....
}

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

Firebase에서 json 구성을 처리하고 종속성 충돌을 방지하려면 플러그인이 필요합니다.자세한 내용은 여기를 참조하십시오.

말 그대로 하루 종일을 보냈습니다.마지막으로, 이것이 해결책이었습니다.

1 대신 0을 사용하면 초기화 파이어베이스 앱이나 그런 것을 사용할 필요가 없습니다.

Project Gradle에서 Google 서비스 4.1.0이 아닌 4.0.0을 사용합니다.

또한, 마지막에 플러그인 문을 적용하는 것도 제 경험으로는 필요하지 않습니다.

(도구 => Firebase Assistant에서 Firebase 데이터베이스를 추가했으면 합니다.1단계와 2단계는 올바르고 녹색입니다.)

FirebaseApp 설명서에 따르면 앱에서 다른 Firebase 프로젝트에 액세스해야 하는 경우를 제외하고는 이 초기화를 호출할 필요가 없습니다.

나는 이 초기화를 실행했고 때때로 사용자가 내 앱을 열 때 크래시 시간이 발생하기 때문에 이 코드 줄을 제거하면 모든 것이 잘 작동합니다. 초기화를 호출해야 합니다.

Firebase App 설명서 캡처:

enter image description here

업데이트: 이 라인을 추가하려고 하면 아래 예외가 발생합니다 [일부 광고 네트워크는 이 라인을 필요로 합니다, 그들은 또한 그들의 웹사이트에 일부 프로세스를 추가합니다.AndroidManifest]

Firestore 클라이언트의 오프라인 지속성에 대한 배타적 잠금을 가져오지 못했습니다.이는 일반적으로 앱의 여러 프로세스에서 Firestore를 사용하고 있음을 의미합니다.다중 프로세스 Android 앱은 모든 프로세스에서 응용 프로그램 클래스의 코드를 실행하므로 응용 프로그램 클래스에서 Firestore를 초기화하지 않아도 됩니다.여러 프로세스에서 의도적으로 Firestore를 사용하는 경우에는 오프라인 지속성(즉, setPersistenceEnabled(true) 호출)만 활성화할 수 있습니다.

수정 방법:

당신의 래메소 추에니 방법에 하세요.Application 명령어:

private boolean isMainProcess(Context context) {
    if (null == context) {
        return true;
    }
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    int pid = android.os.Process.myPid();
    for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
        if (APPLICATION_ID.equals(processInfo.processName) && pid == processInfo.pid) {
            return true;
        }
    }
    return false;
}

onCreate의 신의의Application

@Override
public void onCreate() {
    super.onCreate();
    if (!isMainProcess(this)) {
        FirebaseApp.initializeApp(this);
        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        FirebaseFirestore.getInstance().setFirestoreSettings(settings);
        // other things
        return;
    }
    // other things
}

업데이트: 때때로 앱이 예외 아래로 떨어집니다.

응용 프로그램 My Application Class: java.lang을 만들 수 없습니다.잘못된 상태 예외:이 프로세스 MY_APPLICATION_ID에서 기본 FirebaseApp이 초기화되지 않았습니다.FirebaseApp.initializeApp(Context)을 먼저 호출하십시오.

수정 방법: 업데이트 허용onCreate방법:

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
    boolean isMain = isMainProcess(this);
    FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder().setPersistenceEnabled(isMain).build();
    FirebaseFirestore.getInstance().setFirestoreSettings(settings);
    if (!isMain) {
        // other things
        return;
    }
    // other things
}

동일한 문제가 발생하여 다음과 같이 해결되었습니다.

활동 중:

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
}

app의 그라들(파일 끝에 있음):

dependencies {
    ....
}

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

프로젝트의 Gradle입니다.

   dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.gms:google-services:3.0.0'
}
  1. 얼마 전에도 같은 문제가 있었습니다.

    초기화하지 않고 Firebase 인스턴스를 가져오려고 합니다.Firebase 인스턴스를 가져오기 전에 다음 코드를 추가하십시오.

    최신 버전의 파이어베이스와 구글 플레이 서비스를 가져오기만 하면 됩니다.

    최근 업데이트 버전(예):

이 행에 build.gradle을 추가합니다.

dependencies {

    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation 'com.google.firebase:firebase-core:16.0.7'
    implementation 'com.firebase:firebase-jobdispatcher:0.8.5'


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



dependencies {
    classpath 'com.android.tools.build:gradle:3.3.1'
    classpath 'com.google.gms:google-services:4.2.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

그게 다야.코딩을 즐기십시오.

우선 프로젝트 구성 JSON이 잘못되거나 대부분 Firebase 업그레이드에서 구식이 될 수 있습니다.

도구->파이어베이스->클라우드 메시징->파이어베이스 클라우드 메시징 설정으로 이동합니다.

과거에 이러한 작업을 수행한 적이 있더라도 수시로 업데이트되므로 여기서 다시 확인해 볼 가치가 있습니다.프로젝트를 동기화했더니 문제가 해결되었습니다.

전화 건 것에 대해서는FirebaseApp.initializeApp적어도 FCM의 경우에는 그럴 필요가 없습니다.FCM 설명서를 참조하십시오.

게다가, 만약 그것이 null을 반환한다면, 그것은 그것이 실패한다는 것을 의미하므로, 그것을 부르기 전에 호출합니다.getInstance안 됩니다.

이것이 바로 getInstance of Firebase입니다.인스턴스 ID:

public static FirebaseInstanceId getInstance() {
    return getInstance(FirebaseApp.getInstance());
}

반면에, 다음과 같은 경우:

@Nullable
public static FirebaseApp initializeApp(Context var0) {
    Object var1 = sLock;
    synchronized(sLock) {
        if (zzf.containsKey("[DEFAULT]")) {
            return getInstance();
        } else {
            FirebaseOptions var2;
            return (var2 = FirebaseOptions.fromResource(var0)) == null ? null : initializeApp(var0, var2);
        }
    }
}

그것은 그것을 의미합니다.initializeApp아온다를 합니다.null구성에 문제가 있을 수 있습니다.적어도 - 확인할 가치는 있습니다.당신이 어디에 있는지 알기 위해, 어느 지점에 브레이크 포인트를 둡니다.Context이 보이고, 이를 평가해 .FirebaseApp.initialize(context)null을 .

을 프로젝트의 4에서 4.build.gradle

classpath 'com.google.gms:google-services:4.0.1'

그리고 이 코드를 onCreate()에 추가합니다.

FirebaseApp.initializeApp(this);

그것은 나에게 효과가 있었다.

저도 같은 문제가 있었는데 Firebase 스토리지 종속성을 추가했을 때만 이 문제가 발생했다는 것을 알게 되었습니다.그래서 API 28을 사용하면서 모든 파이어베이스 종속성에 동일한 가져오기 버전이 있는지 확인했습니다.16.0.5스토리지 종속성 기준.

implementation 'com.google.firebase:firebase-core:16.0.5'
implementation 'com.google.firebase:firebase-auth:16.0.5'
implementation 'com.google.firebase:firebase-database:16.0.5'
implementation 'com.google.firebase:firebase-storage:16.0.5'

내 Gradle 버전을 다음으로 업데이트했습니다.

classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'

그리고 앱 모듈 아래에 라인을 추가했습니다.

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

그 후에 저는 효과가 있었습니다.

이 오류를 방지하려면 Android https://firebase.google.com/docs/android/setup 용 Firebase 설정과 관련된 모든 단계를 따라야 합니다.

두 단계를 수행하는 것을 잊어버리고 수정한 것과 동일한 오류가 발생했습니다.

프로젝트 수준 Gradle 빌드 파일에 클래스 경로 'com.google.gms:google-services:4.2.0'추가합니다.

모듈 수준 그라들 빌드 파일에 'com.google.gms.google-services' 플러그인 적용을 추가합니다.

gradle main 클래스 경로 'com.google.gms:google-services:4.2.0' 업데이트

애플리케이션 클래스에 아무것도 추가하거나 Firebase에 대한 initializeApp()을 호출할 필요가 없습니다.도구 -> Firebase -> (임의의 기능) -> 1단계와 2단계가 녹색인지 확인하고 확인합니다.

하여 Gradle을 합니다.classpath 'com.google.gms:google-services:4.2.0'

바로 그겁니다.

사용하지 않았습니다.FirebaseApp.initializeApp(Context)내 프로젝트에서.

저한테는 효과가 있어요.Gradle 파일을 확인하고 다음 행을 구현했는지 확인해야 합니다.

더하다apply plugin: 'com.google.gms.google-services'의 gradle 당의 gradle(앱)로

또는

이것을 추가합니다.classpath 'com.google.gms:google-services:4.2.0'당신의 영광(프로젝트)으로

저도 같은 문제가 있었습니다. 저의 Project build.gradle을 다음과 같이 수정했습니다.

     dependencies {

    classpath 'com.android.tools.build:gradle:3.2.1'
    classpath 'com.google.gms:google-services:3.2.0'

....
                   }

그런 다음 아래 라인을 앱 모듈에 추가했습니다.

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

그리고 그것은 해결되었습니다.

Google 업데이터 때문에 이 오류가 발생했습니다. 필요한 것은 다음과 같습니다.

다음 종속성 변경

dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:4.1.0'
    }

로.

 dependencies {
            classpath 'com.android.tools.build:gradle:3.3.2'
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
            classpath 'com.google.gms:google-services:4.0.0'
        }

차이점은 구글 서비스:4.1.0을 4.0.0으로 변경해야 한다는 것입니다.

또한 이 플러그인을 찾을 수 없습니다.apply plugin: 'com.google.gms.google-services'

implementation 'com.google.firebase:firebase-core:16.0.6

FirebaseApp.initializeApp(Context) 오류가 발생하면 build.gradle에 "mavenCentral"을 추가합니다.

enter code here repositories {google() jcenter() mavenCentral() }

Gradle 버전을 다운그레이드하거나 업그레이드해 보십시오.

build은 다음과 같습니다 build.gradle은 다음과 같습니다.

dependencies {
    classpath 'com.android.tools.build:gradle:3.3.0'
}

로 변경

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.0'
}

파이어베이스 콘솔에 앱을 추가하고 애플리케이션의 새 Google-services.json 파일을 업데이트해 보십시오.이것은 제가 다른 프로젝트의 데이터베이스와 json 파일로 앱을 구현하려고 했을 때 저에게 효과가 있었습니다.

마이그레이션 후 새 SDK에 대한 종속성을 업데이트해야 합니다. https://stackoverflow.com/a/61681739/5279996

당신은 지금 매우 오래된 파이어베이스 방법을 사용하고 있습니다.

***FirebaseApp.initializeApp(context)*** 

이것을 제거합니다.그러면:

패키지 이름을 가진 앱을 파이어베이스 프로젝트에 추가하기만 하면 됩니다. 이 링크에서 구글 Json 파일을 다운로드하십시오. 여기에 패키지 이름을 추가한 다음 다운로드한 구글 Json 파일을 "앱"에 복사하십시오.

지시된 라이브러리를 앱 레벨과 프로젝트 레벨 그라들로 모두 분류할 수 있습니다.이제 동기화만 하면 됩니다.

프로젝트를 수행하면 파이어베이스를 사용할 준비가 됩니다.

이 오류가 발생하면 최신 버전의 Firebase 종속성을 사용하지 않기 때문입니다.

모든 종속성을 최신 종속성으로 업데이트하면 바로 사용할 수 있습니다!

이 두 줄을 build.gradle(앱 수준)에 넣습니다.

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

enter image description here ( Firebase > Settings > Android App > SDK 설정 방법

만약 그것이 맞다면, 그것은 'google-services' 파일을 찾을 수 없다는 오류를 발생시킬 것입니다.아들의

그런 다음 Firebase > Setting > Android App > "google-services.json"에서 생성된 Google-services.json 파일을 복사하여 파일을 생성합니다.

이 파일을 저장할 경로에 대해 걱정할 필요가 없습니다.이 파일을 저장해야 하는 위치가 표시됩니다.예를 들어 app/(build.gradle(app level)) 옆에 저장합니다.

코틀린을 사용하면,

"Android에서 FirebaseApp.initializeApp(Context)을 먼저 호출하십시오."

다음은 올바른 Firebase Analytics 초기화의 예입니다.

// declare_analytics
private lateinit var firebaseAnalytics: FirebaseAnalytics



class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        // Obtain the FirebaseAnalytics instance.
        firebaseAnalytics = Firebase.analytics


        val parameters = Bundle().apply {
            this.putString("level_name", "Jorgesys B. " + System.currentTimeMillis())
            this.putInt("level_difficulty", 10)
        }

        firebaseAnalytics.setDefaultEventParameters(parameters)


    }

언급URL : https://stackoverflow.com/questions/45977847/make-sure-to-call-firebaseapp-initializeappcontext-first-in-android

반응형