October 23, 2024
Chicago 12, Melborne City, USA
Android

Cannot upload photo to firebase storage due to google gms error


I am trying to make an application that captures an image and saves it to Firebase storage.

this is the code that is responsible for uploading the photo


private fun uploadAbsensi(bitmap: Bitmap, currentDate: String, currentTime: String) {
        val userId = "testID" //should have no relevance to the issue
        val absensiRef = db.collection("absensi")
            .document(userId)
            .collection("harian")
            .document(currentDate)

        val storage = FirebaseStorage.getInstance()

        absensiRef.get().addOnSuccessListener { documentSnapshot : DocumentSnapshot ->
            if (documentSnapshot.exists()) {
                Toast.makeText(mainActivity, "Anda sudah melakukan absensi hari ini", Toast.LENGTH_SHORT).show()
            } else {
                // Upload photo to Firebase Storage
                val storageRef = storage.reference.child("absensi/${userId}/${currentDate}.jpg")
                val baos = ByteArrayOutputStream()
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
                val data = baos.toByteArray()

                val uploadTask = storageRef.putBytes(data)
                uploadTask.addOnSuccessListener {
                    storageRef.downloadUrl.addOnSuccessListener { uri ->
                        // Save attendance data to Firestore
                        val absensiData = mapOf(
                            "userId" to userId,
                            "photoUrl" to uri.toString(),
                            "date" to currentDate,
                            "time" to currentTime
                        )
                        absensiRef.set(absensiData).addOnSuccessListener {
                            Toast.makeText(mainActivity, "Absensi berhasil disimpan", Toast.LENGTH_SHORT).show()
//                            finish()  // Return after successful attendance
                        }
                    }
                }.addOnFailureListener {
                    Toast.makeText(mainActivity, "Gagal mengunggah foto", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }




this is my build.gradle (app-level)


plugins {
//    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)

    id("com.android.application")
    id("com.google.gms.google-services")
}

android {
    namespace = "com.example.if570_f_000000068544_kevinwijayahadinata_uts"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.if570_f_000000068544_kevinwijayahadinata_uts"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        viewBinding = true
    }
}

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    implementation(libs.androidx.activity)
    implementation(libs.androidx.constraintlayout)
    implementation(libs.androidx.annotation)
    implementation(libs.androidx.lifecycle.livedata.ktx)
    implementation(libs.androidx.lifecycle.viewmodel.ktx)
    implementation(libs.firebase.firestore.ktx)
    implementation(libs.firebase.auth.ktx)
    implementation(libs.androidx.legacy.support.v4)
    implementation(libs.androidx.recyclerview)
    implementation(libs.firebase.storage.ktx)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    implementation(platform("com.google.firebase:firebase-bom:33.4.0"))
    implementation("com.google.firebase:firebase-analytics")
    implementation ("com.google.firebase:firebase-firestore-ktx:24.7.1")
    implementation ("com.google.firebase:firebase-storage-ktx:19.3.1")
    implementation ("androidx.appcompat:appcompat:1.6.1")
    implementation ("androidx.navigation:navigation-fragment-ktx:2.5.3")
    implementation ("androidx.navigation:navigation-ui-ktx:2.5.3")
    implementation ("com.google.android.material:material:1.9.0")
    implementation("com.github.bumptech.glide:glide:4.14.2")






}

and my project-level build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id("com.google.gms.google-services") version "4.4.2" apply false
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.kotlin.android) apply false

}


however, when i try to upload the image to the storage I get this error

Failed to get service from broker.  (Ask Gemini)
                                                                                                    java.lang.SecurityException: Unknown calling package name 'com.google.android.gms'.
                                                                                                        at android.os.Parcel.createExceptionOrNull(Parcel.java:2390)
                                                                                                        at android.os.Parcel.createException(Parcel.java:2374)
                                                                                                        at android.os.Parcel.readException(Parcel.java:2357)
                                                                                                        at android.os.Parcel.readException(Parcel.java:2299)

I have imported every relevant library in the fragment where my uploadAbsensi() function lies (given that there are no errors in the file), and in my firebase I have set the rules to be able to read and write data. I have never created an android app before, so please forgive my lack of knowledge if the solution is simple.



You need to sign in to view this answers

Leave feedback about this

  • Quality
  • Price
  • Service

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video