A Kotlin-first SDK for Firebase

Overview

Firebase Kotlin SDK GitHub last commit

Built and maintained with 🧡 by GitLive
Real-time code collaboration inside any IDE


The Firebase Kotlin SDK is a Kotlin-first SDK for Firebase. It's API is similar to the Firebase Android SDK Kotlin Extensions but also supports multiplatform projects, enabling you to use Firebase directly from your common source targeting iOS, Android or JS.

Available libraries

The following libraries are available for the various Firebase products.

Service or Product Gradle Dependency API Coverage
Authentication dev.gitlive:firebase-auth:1.4.2 80%
Realtime Database dev.gitlive:firebase-database:1.4.2 70%
Cloud Firestore dev.gitlive:firebase-firestore:1.4.2 60%
Cloud Functions dev.gitlive:firebase-functions:1.4.2 80%
Cloud Messaging dev.gitlive:firebase-messaging:1.4.2 0%
Cloud Storage dev.gitlive:firebase-storage:1.4.2 0%
Remote Config dev.gitlive:firebase-config:1.4.2 20%

Is the Firebase library or API you need missing? Create an issue to request additional API coverage or be awesome and submit a PR

Kotlin-first design

Unlike the Kotlin Extensions for the Firebase Android SDK this project does not extend a Java based SDK so we get the full power of Kotlin including coroutines and serialization!

Suspending functions

Asynchronous operations that return a single or no value are represented by suspending functions in the SDK instead of callbacks, listeners or OS specific types such as Task, for example:

suspend fun signInWithCustomToken(token: String): AuthResult

It is important to remember that unlike a callback based API, wating for suspending functions to complete is implicit and so if you don't want to wait for the result you can launch a new coroutine:

//TODO don't use GlobalScope
GlobalScope.launch {
  Firebase.auth.signOut()
}

Flows

Asynchronous streams of values are represented by Flows in the SDK instead of repeatedly invoked callbacks or listeners, for example:

val snapshots: Flow<DocumentSnapshot>

The flows are cold, which means a new listener is added every time a terminal operator is applied to the resulting flow. A buffer with the default size is used to buffer values received from the listener, use the buffer operator on the flow to specify a user-defined value and to control what happens when data is produced faster than consumed, i.e. to control the back-pressure behavior. Often you are only interested in the latest value received, in this case you can use the conflate operator to disable buffering.

The listener is removed once the flow completes or is cancelled.

Serialization

The official Firebase SDKs use different platform-specific ways to support writing data with and without custom classes in Cloud Firestore, Realtime Database and Functions.

The Firebase Kotlin SDK uses Kotlin serialization to read and write custom classes to Firebase. To use Kotlin serialization in your project add the plugin to your gradle file:

plugins {
    kotlin("multiplatform") // or kotlin("jvm") or any other kotlin plugin
    kotlin("plugin.serialization") version "1.5.30"
}

Then mark you custom classes @Serializable:

@Serializable
data class City(val name: String)

Instances of these classes can now be passed along with their serializer to the SDK:

db.collection("cities").document("LA").set(City.serializer(), city, encodeDefaults = true)

The encodeDefaults parameter is optional and defaults to true, set this to false to omit writing optional properties if they are equal to theirs default values.

You can also omit the serializer but this is discouraged due to a current limitation on Kotlin/JS and Kotlin/Native

Server Timestamp

Firestore and the Realtime Database provide a sentinel value you can use to set a field in your document to a server timestamp. So you can use these values in custom classes they are of type Double:

@Serializable
data class Post(val timestamp: Double = ServerValue.TIMESTAMP)

Default arguments

To reduce boilerplate, default arguments are used in the places where the Firebase Android SDK employs the builder pattern:

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
        .setDisplayName("Jane Q. User")
        .setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
        .build();

user.updateProfile(profileUpdates)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User profile updated.");
                }
            }
        });

//...becomes...

user.updateProfile(displayName = "state", photoURL = "CA")

Named arguments

To improve readability functions such as the Cloud Firestore query operators use named arguments:

citiesRef.whereEqualTo("state", "CA")
citiesRef.whereArrayContains("regions", "west_coast")

//...becomes...

citiesRef.where("state", equalTo = "CA")
citiesRef.where("regions", arrayContains = "west_coast")

Operator overloading

In cases where it makes sense, such as Firebase Functions HTTPS Callable, operator overloading is used:

    val addMessage = functions.getHttpsCallable("addMessage")
    //In the official android Firebase SDK this would be addMessage.call(...)
    addMessage(mapOf("text" to text, "push" to true))

Multiplatform

The Firebase Kotlin SDK provides a common API to access Firebase for projects targeting iOS, Android and JS meaning you can use Firebase directly in your common code. Under the hood, the SDK achieves this by binding to the respective official Firebase SDK for each supported platform.

Accessing the underlying Firebase SDK

In some cases you might want to access the underlying official Firebase SDK in platform specific code, for example when the common API is missing the functionality you need. For this purpose each class in the SDK has android, ios and js properties which holds the equivalent object of the underlying official Firebase SDK.

These properties are only accessible from the equivalent target's source set. For example to disable persistence in Cloud Firestore on Android you can write the following in your Android specific code (e.g. androidMain or androidTest):

  Firebase.firestore.android.firestoreSettings = FirebaseFirestoreSettings.Builder(Firebase.firestore.android.firestoreSettings)
          .setPersistenceEnabled(false)
          .build()

NPM modules

If you are building a Kotlin multiplatform library which will be consumed from JS code you may need to include the SDK in your package.json, you can do it as follows:

"dependencies": {
  "@gitlive/firebase-auth": "1.4.2",
  "@gitlive/firebase-database": "1.4.2",
  "@gitlive/firebase-firestore": "1.4.2",
  "@gitlive/firebase-functions": "1.4.2",
  "@gitlive/firebase-storage": "1.4.2",
  "@gitlive/firebase-messaging": "1.4.2",
  "@gitlive/firebase-config": "1.4.2"
}
Comments
  • "framework not found FirebaseCore" build error

    I'm getting such error while trying to build my multiplatform project on macos:

    > Task :linkMultiCoreDebugFrameworkIos FAILED
    e: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld invocation reported errors
    
    The /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld command returned non-zero exit code: 1.
    output:
    ld: framework not found FirebaseCore
    

    My build.gradle file:

    buildscript {
        ext {
            kotlin_version = "1.3.72"
            coroutine_version = "1.3.2"
            coroutines_play_services = "1.3.5"
            serializer_version = "0.13.0"
            androidx_lifecycle_version = "2.2.0"
            moko_mvvm_version = "0.6.0"
            mockk_version = "1.9.3"
            firebase_auth_version = "0.2.0"
        }
        repositories {
            google()
            maven {
                url "https://plugins.gradle.org/m2/"
            }
        }
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
            classpath "com.android.tools.build:gradle:3.6.3"
            classpath 'com.google.gms:google-services:4.3.3'
        }
    }
    
    apply plugin: 'com.android.library'
    apply plugin: 'kotlin-android-extensions'
    
    repositories {
        mavenLocal()
        jcenter()
        google()
    
        maven { url = uri("https://dl.bintray.com/icerockdev/moko") }
    }
    
    group 'com.aramso.curtains.backend'
    version '0.0.1'
    
    apply plugin: 'maven-publish'
    
    def kotlinPluginId = 'org.jetbrains.kotlin.multiplatform'
    final hasPlugin = project.getPlugins().hasPlugin(kotlinPluginId);
    if (hasPlugin) {
        final Plugin plugin = project.getPlugins().getPlugin(kotlinPluginId)
        println 'Plugin already applied - version ' + plugin.properties['kotlinPluginVersion']
    } else {
        apply plugin: "org.jetbrains.kotlin.multiplatform"
    }
    
    android {
        compileSdkVersion(29)
    
        defaultConfig {
            minSdkVersion(21)
            targetSdkVersion(29)
        }
    
        sourceSets {
            main {
                manifest.srcFile 'src/androidMain/AndroidManifest.xml'
                java.srcDirs = ['src/androidMain/kotlin']
                res.srcDirs = ['src/androidMain/resources']
            }
            test {
                java.srcDirs = ['src/androidTest/kotlin']
                res.srcDirs = ['src/androidTest/resources']
            }
        }
    
        testOptions.unitTests.includeAndroidResources = true
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
            kotlinOptions {
                jvmTarget = "1.8"
            }
        }
    }
    
    kotlin {
        targets {
            final def iOSTarget = System.getenv('SDK_NAME')?.startsWith("iphoneos") \
                                  ? presets.iosArm64 : presets.iosX64
    
            fromPreset(iOSTarget, 'ios') {
                binaries {
                    framework('MultiCore')
                }
            }
    
            fromPreset(presets.android, 'android')
        }
        sourceSets {
            commonMain {
                dependencies {
                    implementation kotlin('stdlib-common')
    
                    // COROUTINES
                    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutine_version"
                    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$coroutines_play_services"
    
                    // MOKO - MVVM
                    api "dev.icerock.moko:mvvm:$moko_mvvm_version"
    
                    // SERIALIZATION
                    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serializer_version"
    
                    // FIREBASE AUTH
                    implementation "dev.gitlive:firebase-auth:$firebase_auth_version"
                }
            }
            commonTest {
                dependencies {
                    implementation kotlin('test-common')
                    implementation kotlin('test-annotations-common')
    
                    implementation "io.mockk:mockk:$mockk_version"
                }
            }
            androidMain {
                dependencies {
                    implementation kotlin('stdlib')
    
                    implementation "androidx.lifecycle:lifecycle-extensions:$androidx_lifecycle_version"
                    implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
    
                    // COROUTINES
                    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutine_version"
    
                    // SERIALIZATION
                    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serializer_version"
                }
            }
            androidTest {
                dependencies {
                    implementation kotlin('test')
                    implementation kotlin('test-junit')
                }
            }
            iosMain {
            }
            iosTest {
            }
        }
    }
    
    configurations {
        compileClasspath
    }
    
    task packForXcode(type: Sync) {
        final File frameworkDir = new File(buildDir, "xcode-frameworks")
        final String mode = project.findProperty("XCODE_CONFIGURATION")?.toUpperCase() ?: 'DEBUG'
        final def framework = kotlin.targets.ios.binaries.getFramework("MultiCore", mode)
    
        inputs.property "mode", mode
        dependsOn framework.linkTask
    
        from { framework.outputFile.parentFile }
        into frameworkDir
    
        doLast {
            new File(frameworkDir, 'gradlew').with {
                text = "#!/bin/bash\nexport 'JAVA_HOME=${System.getProperty("java.home")}'\ncd '${rootProject.rootDir}'\n./gradlew \$@\n"
                setExecutable(true)
            }
        }
    }
    
    tasks.build.dependsOn packForXcode
    
    opened by agatap2 28
  • Serialize sealed classes

    Serialize sealed classes

    Solves https://github.com/GitLiveApp/firebase-kotlin-sdk/issues/190 and https://github.com/GitLiveApp/firebase-kotlin-sdk/issues/61

    I haven't unit tested it because it's saying to me that "Tests events were not received". If you have any idea on how to fix this, I could certainly add the testing.

    opened by iruizmar 27
  • SDK Setup Instructions

    SDK Setup Instructions

    I have managed to setup my multiplatform project with this library for Android with no issues and it works great so far! However, iOS is giving me the following error when I try to build the app

    ld: framework not found FirebaseFirestore
    

    which I believe is similar to some of the other issues I've seen in this repo.

    Would it be possible to include working setup instructions for iOS?

    My setup for Android is exactly the same as the usual Firebase guide so I imagine iOS would be the same but I'm probably missing an important step somewhere in between. I should also mention that I have a multi-module project and Firebase is setup as a standalone module to be linked to the rest of the app.

    Thanks very much for building the SDK and I'm hoping to have iOS working the same way as Android 🙏

    opened by gchristov 21
  • Add sealed classes support to serialization

    Add sealed classes support to serialization

    Could you add support of "sealed" class to the FirebaseDecoder.structureDecoder and FirebaseEncoder.structureEncoder functions?

    I would try it with some think like this:

    fun FirebaseEncoder.structureEncoder(descriptor: SerialDescriptor, @Suppress("UNUSED_PARAMETER") vararg typeParams: KSerializer<*>): CompositeEncoder = when(descriptor.kind) {
        StructureKind.LIST, PolymorphicKind.SEALED -> mutableListOf<Any?>()
            .also { value = it }
            .let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity) { _, index, value -> it.add(index, value) } }
        StructureKind.MAP -> mutableListOf<Any?>()
            .let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity, { value = it.chunked(2).associate { (k, v) -> k to v } }) { _, _, value -> it.add(value) } }
        StructureKind.CLASS,  StructureKind.OBJECT -> mutableMapOf<Any?, Any?>()
            .also { value = it }
            .let { FirebaseCompositeEncoder(shouldEncodeElementDefault, positiveInfinity) { _, index, value -> it[descriptor.getElementName(index)] = value } }
        else -> TODO("The firebase-kotlin-sdk does not support $descriptor for serialization yet")
    }
    

    This case is optimized for plain Kotlin.

    Unfortunately, I also have some building problems too, so I cannot implement them myself

    API coverage 
    opened by LartyHD 21
  • Add FirebaseAuth.signInWithEmailAndPassword for Android & iOS

    Add FirebaseAuth.signInWithEmailAndPassword for Android & iOS

    | Library | Class | Member | Platforms | | :-----------------| :------------------------ | :----------------------------------- | :---------------------- | | auth | FirebaseAuth | signInWithEmailAndPassword| Android & iOS |

    API coverage 
    opened by agatap2 21
  • Missing AAR file in 1.4.0 Release

    Missing AAR file in 1.4.0 Release

    Hi,

    There seems to be an issue with a missing AAR file again in the 1.4.0 release as happened with the 1.3.0 release https://github.com/GitLiveApp/firebase-kotlin-sdk/issues/185. I'm guessing it's the same issue.

    The firebase-common-android-debug-1.4.0.aar is the missing file in https://repo.maven.apache.org/maven2/dev/gitlive/firebase-common-android-debug/1.4.0/

    @Reedyuk resolved the issue last time, so perhaps you could fix the issue again.

    Thanks

    opened by jfreeley 20
  • Updated to Kotlin 1.4.10, Coroutines 1.3.9, Serialization 1.0.0

    Updated to Kotlin 1.4.10, Coroutines 1.3.9, Serialization 1.0.0

    I'm sure there's more work to do, but thought I would get this opened in the meantime even if it requires more work. I may or may not have time this week to finish up this work, so if anybody wants to run with this and tidy up the rest I won't be offended.

    A few comments for the changes I made... I noticed the existing project convention was androidAndroidTest for the source folders, but I didn't see them getting used. I've renamed them to androidTest to follow the standard convention. Subsequently, I see failing tests now. Some help here might be warranted.

    Closes #81 Closes #82

    opened by CoreyKaylor 16
  • suspending function firestore#collection#add hangs

    suspending function firestore#collection#add hangs

    Every now and then - maybe about 10% of the times - the following code just hangs:

    override fun createTask(title: String, callback: (SuccessFailure<Unit>) -> Unit) = MainScope().launch {
      try {
        val task = FireStoreTodoTask(
            title = title
        )
    
        val path = "${list.path}/tasks"
        logI(TAG, "On $path creating task $task")
        firebaseStore.collection(path).add(task, FireStoreTodoTask.serializer())
        logI(TAG, "Creating task succeeded")
        callback.invoke(Success(Unit))
      } catch (throwable: Throwable) {
        logI(TAG, "Creating task failed", throwable)
        callback.invoke(Failure(TAG, throwableReasonConverter.convert(throwable)))
      }
    }
    

    After firebaseStore.collection(path).add(task, FireStoreTodoTask.serializer()) nothing happens. The suspend function just keeps running. Neither end I up in the next line nor I get thrown at.

    Has anyone else been experiencing this?

    opened by vanniktech 16
  • Increase Auth coverage

    Increase Auth coverage

    Increases coverage of Firebase Auth, as requested in #23

    • Adds support for Fetching Sign in Methods
    • Adds all properties to the FirebaseUser
    • Adds update methods to FirebaseUser
    • Adds support for Multifactor Requests
    • Adds all common AuthProviders, including generic OAuth.

    I'm not a Javascript developer, so I hope I didnt make any major issues there. Not al methods are tested btw, since I cant get the tests to run, and some are difficult to test anyway.

    NOTE: Depends on #78

    opened by Daeda88 14
  • Sign in with credential implementation

    Sign in with credential implementation

    I don't have enough experience with js, so review it more carefully, please.

    P.S. I can't use typealiases because AuthCredential is abstract class in Android and simple class in iOS

    opened by mksmdvdff 10
  • [iOS] cinterop-FirebaseFirestore not found when building for simulator

    [iOS] cinterop-FirebaseFirestore not found when building for simulator

    Kotlin 1.6.21 Android Studio Chipmunk 2021.2.1. Patch 1 KMM plugin 0.3.2(212-1.6.10-release-974-IJ)-216 dev.gitlive:firebase-firestore:1.6.1 and am using cocoapods Xcode 13.4.1 iOS 15.5 simulator

    This issue just popped up for me recently in the past week or two. I did upgrade the gradle plugin and Android Studio recently, but nonetheless:

    Building for iOS simulator (X64, Intel Mac) fails with this message:

    Task :shared:compileKotlinIosX64 FAILED e: Could not find "dev.gitlive:firebase-firestore-cinterop-FirebaseFirestore" in [{my_project_dir}, /Users/{username}/.konan/klib, /Users/{username}/.konan/kotlin-native-prebuilt-macos-x86_64-1.6.21/klib/common, /Users/{username}/.konan/kotlin-native-prebuilt-macos-x86_64-1.6.21/klib/platform/ios_x64]

    Building for iOS device (arm64) works fine.

    Possibly related to #325

    What I've tried:

    • gradle sync
    • invalidate caches & restart
    opened by walkingbrad 9
  • iOS Linking Issues

    iOS Linking Issues

    > Task :shared:linkDebugFrameworkIosX64 FAILED
    e: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld invocation reported errors
    Please try to disable compiler caches and rerun the build. To disable compiler caches, add the following line to the gradle.properties file in the project's root directory:
        
        kotlin.native.cacheKind.iosX64=none
        
    Also, consider filing an issue with full Gradle log here: https://kotl.in/issue
    The /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld command returned non-zero exit code: 1.
    output:
    ld: framework not found FirebaseDatabase
    

    build.gradle.kts

    ...
    sourceSets {
    ...
        val commonMain by getting {
            dependencies {
                implementation("dev.gitlive:firebase-database:$firebaseKotlinVersion")
            }
        }
    }
    ...
    

    I'm getting a linking error when building for iOS.

    Do I need to include other dependencies in the Android and iOS source sets?

    opened by evandelaney 0
  • ClassCastException when deserialising sealed class from Firestore in KotlinJS

    ClassCastException when deserialising sealed class from Firestore in KotlinJS

    I'm trying to serialise/deserialise the following model into Firestore on KotlinJS with nodeJs() target, which is correctly written to Firestore, along with its generated type.

    @Serializable
    data class ApiSearchSession(
        val id: String,
        val state: ApiState
    )
    
    @Serializable
    sealed class ApiState {
        @Serializable
        object Searching : ApiState()
    }
    

    I'm writing this to Firestore like this

    val document = firebaseFirestore
                .collection("COLLECTION")
                .document(searchSession.id)
            document.set(
                data = searchSession.toApiSearchSession(),
                encodeDefaults = true
            )
    

    However, when deserialising I'm getting a ClassCastException. My deserialisation code is

    val document = firebaseFirestore
                .collection("searchSession")
                .document(id)
                .get()
            return if (document.exists) {
                val apiSearchSession: ApiSearchSession = document.data()
                apiSearchSession.toSearchSession()
            } else {
                null
            }
    

    Am I missing something? I've tried serialising the above to/from Strings with kotlinx.serialisation and it works as it should which lead me to think it's an SDK issue here. I'm on version 1.6.2 of the SDK.

    Thanks in advance! 🙏

    opened by gchristov 2
  • Unable to load class 'com.google.common.collect.Streams'.

    Unable to load class 'com.google.common.collect.Streams'.

    I'm getting this error after adding the Firestore dependency to the build.gradle. I'm putting it in the app level build.gradle, is this the correct one?

    opened by alwynGSU 0
  • firebase-storage & firebase-messaging is not deployed on maven

    firebase-storage & firebase-messaging is not deployed on maven

    Firebase Storage dev.gitlive:firebase-storage & dev.gitlive:firebase-messaging doesn't exist on Maven - they are not deployed.

    https://repo.maven.apache.org/maven2/dev/gitlive/

    > Could not find dev.gitlive:firebase-storage:1.6.1.
         Searched in the following locations:
           - https://dl.google.com/dl/android/maven2/dev/gitlive/firebase-storage/1.6.1/firebase-storage-1.6.1.pom
           - https://repo.maven.apache.org/maven2/dev/gitlive/firebase-storage/1.6.1/firebase-storage-1.6.1.pom
    
    API coverage 
    opened by Murtowski 1
Releases(v1.6.2)
  • v1.6.2(Aug 16, 2022)

    What's Changed

    • Add EmailAuthProvider.credentialWithLink() by @shepeliev in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/294
    • fixed Koltin versions inconsistency by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/302
    • updated dependencies by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/305
    • added plugin to help checking for dependency updates by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/303
    • [Functions] Fix iOS exception message by @walkingbrad in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/297
    • 1.6.2 by @michaelprichardson in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/331

    New Contributors

    • @walkingbrad made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/297

    Full Changelog: https://github.com/GitLiveApp/firebase-kotlin-sdk/compare/v1.6.1...v1.6.2

    Source code(tar.gz)
    Source code(zip)
  • v1.6.1(Apr 20, 2022)

    This release is for Kotlin 1.6

    What's Changed

    • Updated Kotlin to 1.6.10, Android target SDK to 31, Android Gradle Plugin to 7.1.0 & dependencies by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/277

    Full Changelog: https://github.com/GitLiveApp/firebase-kotlin-sdk/compare/v1.6.0...v1.6.1

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Apr 20, 2022)

    This is the final release for Kotlin 1.5

    What's Changed

    • Add field value increment to firestore by @michaelprichardson in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/284
    • added firebase-installations to be published, updated Firebase docs l… by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/287
    • add tests for arrayUnion and arrayRemove in Firestore by @michaelprichardson in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/290
    • Add start and end query cursors by @michaelprichardson in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/286
    • 1.6.0 release by @michaelprichardson in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/291

    Full Changelog: https://github.com/GitLiveApp/firebase-kotlin-sdk/compare/v1.5.0...v1.6.0

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Apr 6, 2022)

    This release is for Kotlin 1.5

    What's Changed

    • updated Firebase SDKs & dependencies by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/228
    • Add ServerTimestampBehavior in Firestore module by @shepeliev in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/246
    • removed DocumentSnapshot.dataMap() by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/250
    • fix compilation with xcode 13 by @muwasi in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/244
    • updated Firebase JS SDKs by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/254
    • updated Firebase SDKs by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/252
    • Make documentation more understandable about ServerTimeStamp usage. by @fummicc1 in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/270
    • Firestore query-cursors/pagination: Added Query.startAfter (Android, iOS, js) by @tiagonuneslx in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/219
    • allow to get database root reference by @pauminku in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/265
    • Added "parent" field to document and collection references by @litclimbing in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/259
    • Added firebase-installations by @suntrix in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/257
    • enable IR js compiler by @mihbor in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/268
    • Fix crash on ios with remote config by @muwasi in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/245
    • Issue-236 added unit test for database DataSnapshot children count by @thejoeba in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/237
    • Allow database tests to run on ios by @michaelprichardson in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/279
    • Add database reference testing by @thejoeba in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/242
    • add includeMetadataChanges support to firestore Query.snapshots by @nbransby in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/281
    • Serialize sealed classes by @iruizmar in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/271
    • replace safeOffer with trySend by @nbransby in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/283

    New Contributors

    • @muwasi made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/244
    • @fummicc1 made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/270
    • @pauminku made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/265
    • @litclimbing made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/259
    • @thejoeba made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/237
    • @iruizmar made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/271

    Full Changelog: https://github.com/GitLiveApp/firebase-kotlin-sdk/compare/v1.4.3...v1.5.0

    Source code(tar.gz)
    Source code(zip)
  • v1.4.3(Oct 5, 2021)

    What's Changed

    • Removed direct reference of ktx to be in-line with the other android … by @Reedyuk in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/224
    • ➕ Add iosSimulatorArm64 target, introduced in KMM 1.5.30 by @pauldavies83 in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/220
    • Add FirebaseAuth.signInWithEmailLink() API by @shepeliev in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/212
    • Gl 861 add ability to skip ios tests for firebase by @Reedyuk in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/230
    • Gl 855 fix upload issue with firebase by @Reedyuk in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/231

    New Contributors

    • @pauldavies83 made their first contribution in https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/220

    Full Changelog: https://github.com/GitLiveApp/firebase-kotlin-sdk/compare/v1.4.2...v1.4.3

    Source code(tar.gz)
    Source code(zip)
  • v1.4.2(Sep 7, 2021)

    • Fixed issue with publishing missing artifacts, with thanks to @suntrix
    • Added DocumentSnapshot.dataMap() (fixes #186) #214 thanks @suntrix
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Jul 6, 2021)

    Thank you for everyone who participated in the latest release. Special thanks to the following: Updated Kotlin to 1.5.10 (#189) @shepeliev Firebase remote config (#192) @shepeliev Added CollectionReference.document to firestore (#194) @tiagonuneslx Firebase version bump (#196) @suntrix

    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(May 26, 2021)

  • v1.3.0(May 14, 2021)

    Thank you all for being patient for the latest release of the firebase-kotlin-sdk. With special thanks to the following: Updated dependencies, added setSettings() / disableNetwork() / enableNetwork() to FirebaseFirestore (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/138) @suntrix Added AuthTokenResult (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/142) @suntrix Fixed typo in collectionGroupWithID on iosTarget (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/144) @Reedyuk Added authDomain to Firebase options (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/149) @mihbor Updated and improved build config (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/151) @suntrix Added where clause for document reference object (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/153) @avdyushin Fixed broken iOS target (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/154) @Reedyuk Updated to Kotlin 1.4.31 (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/155) @suntrix Use firebase 7.7.0 for iOS cinterop (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/156) @suntrix Added some test for decoding of object with nullable value (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/163) @Reedyuk Fixed issue with errorToException missing exceptions (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/169) @Reedyuk Fixed iOS target (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/170) @Daeda88 iOS target had incorrect firebase field value (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/174) @jfreeley Bumped JS target firebase version (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/177) @Reedyuk Fixed broken link in readme (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/179) @BlakeBarrett Added await while online for JS target (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/180) @Reedyuk Fixed gradle build task for running tests on incompatible target (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/182) @nbransby Added gcmSenderId to config (https://github.com/GitLiveApp/firebase-kotlin-sdk/pull/184) @nbransby

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Jan 7, 2021)

    Add serverTimestamp() to FieldValue (#127) Support for documentId in FieldPath (Firestore) (#125) thanks @leoxs22 add orderByValue, endAt, limitToFirst, limitToLast, equalTo to Query (#129) Add useEmulator() API (#123) thanks @shepeliev add doc changes (#128)

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Dec 17, 2020)

    Prevent accidental removal of photo URL (#100) thanks @tynn Add Firestore Metadata (#106) thanks @Daeda88 Add orderby to firestore (#109) thanks @michaelprichardson Add collection and document function (#110) thanks @michaelprichardson Dependency updates (#118) thanks @suntrix

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Oct 27, 2020)

  • v0.4.0(Oct 23, 2020)

  • v0.2.0(Jul 11, 2020)

    Increased API coverage

    Auth

    Auth.sendPasswordResetEmail() Auth.signInWithEmailAndPassword() Auth.createUserWithEmailAndPassword() User.displayName User.email User.phoneNumber User.sendEmailVerification()

    Functions

    FirebaseFunctions.useFunctionsEmulator()

    Firestore

    FirebaseFirestore.clearPersistence() Query.limit() Query.where(inArray:) Query.where(arrayContainsAny:)

    Serialization

    The new encodeDefaults parameter is optional and defaults to true, set this to false to omit writing optional properties if they are equal to theirs default values.

    Source code(tar.gz)
    Source code(zip)
Owner
GitLive
Extend GitHub with real-time collaborative superpowers
GitLive
This is a first kotlin project

SmallPocket This is a first kotlin app, help user to save links easily, and can export to Evernote as weekly. Steps: copy link anywhere open SmallPock

KotlinChina 31 Dec 17, 2022
A simple karaoke app. My first Android project.

Chorus This is my first Android project ever. I'm very happy that I managed to start it. Thanks a lot to the devs, who made all of the software I'm us

Ilya 1 Jan 18, 2022
Showify is a my first simple ✅ Android application 📱 using DI, where I learn how to use dagger-hilt, retrofit2, mvvm, livedata, Requestly Interceptor

Showify is a my first simple ✅ Android application ?? using DI, where I learn how to use dagger-hilt, retrofit2, mvvm, livedata, Requestly Interceptor and so much more...

MOHIT GUPTA 1 Jun 21, 2022
The app is composed of 2 screens, first is the profile screen, it has the user_name and address pinned at the top and then it lists all of this user’s albums.

The app is composed of 2 screens, first is the profile screen, it has the user_name and address pinned at the top and then it lists all of this user’s albums. When you press on any album it navigates to the second screen which is an album details screen that contains list of the images in an recyclerview grid. Also you have search bar that you can filter within the photos album by the image title.

Mahmoud Ibrahim 4 Jul 10, 2022
The first project for Udacity's Android Nanodegree through Egypt FWD program

The Shoe Store This project will consist of five screens. You don't have to create a shoe store, you can use any other item as long as you create the

Ahmed Gamal 6 Jul 22, 2022
Android Data Managment System Android UI - Kotlin- Firebase

DataManagmentSystem Data Managment System Android UI - Kotlin- Firebase Android Data Managment System App Design And Kotlin with Firebase The project

Burak Bilici 1 Jan 29, 2022
michat - The Kotlin Android application using Google Firebase

michat The Kotlin Android application using Google Firebase View here. Contents General Info Technologies Used Project Status Room for Improvemen

Michael Chirozidi 17 Nov 3, 2022
Firebase Authentication plugin for Ktor framework.

Firebase Authentication is a Ktor plugin which verifies requests authorized by a Firebase Auth Id Token.

Manav Tamboli 2 Jul 16, 2022
FriendlyChat starts in Firebase Android Codelab

FriendlyChat FriendlyChat starts in Firebase Android Codelab. The goal is to create an app to share message among friends using Firebase. I will be st

Airon Gomes 1 Dec 18, 2021
Android Open-Source Telematics App with Firebase© integration

Android Open-Source Telematics App with Firebase© integration Description This Telematics App is developed by Damoov and is distributed free of charge

null 0 Jan 14, 2022
Login-and-Signup - Simple Login-and-Signup with authentication using Firebase API

Simple Login-and-Signup with authentication using Firebase API. Log in Sign Up

Indresh Goswami 0 Mar 25, 2022
An open-source Android app for locating your group's people privately using Facebook Login, Google Maps API and Firebase

An open-source Android app for locating your group's people privately using Facebook Login, Google Maps API and Firebase

Duong Tran Thanh 2 Feb 27, 2022
Simple Login using firebase and compose views

SimpleLogin Project name: SimpleLogin Android Develop in android over MVVM, Kotlin, Compose. Package Structure com.anelcc.SimpleLogin # Root Pack

Anel CC 5 Oct 25, 2022
An e-commerce mobile application built using Android Studio + Java + Firebase.

E-Commerce An e-commerce mobile application built using Android Studio + Java + Firebase. Login for : [email protected] 123456 Screenshots of the app : L

Nisa Efendioğlu 4 Aug 5, 2022
Sample app to demonstrate the integration code and working of Dyte SDK for android, using Kotlin.

Dyte Kotlin Sample App An example app in kotlin using the Dyte Mobile SDK Explore the docs » View Demo · Report Bug · Request Feature Table of Content

Dyte 8 Dec 3, 2021
Kotlin SDK for Jellyfin supporting Android and the JVM.

Jellyfin Kotlin SDK Part of the Jellyfin Project The Jellyfin Kotlin SDK is a library implementing the Jellyfin API to easily access servers. It is cu

Jellyfin 60 Dec 18, 2022
StarkNet SDK for JVM languages (java, kotlin, scala)

☕ starknet jvm ☕ StarkNet SDK for JVM languages: Java Kotlin Scala Clojure Groovy Table of contents Documentation Example usages Making synchronous re

Software Mansion 29 Dec 15, 2022
Application includes Admob SDK, In-App Messaging, Crashlytics, Lottie, Flurry

AdvertisementApplication This application includes Admob SDK, In-App Messaging, Crashlytics, Lottie, Flurry. * Admob: AdMob helps you monetize your mo

Alparslan Köprülü 2 Nov 8, 2021
HQ OpenAPI Specification and Client & Server SDK Generators

HQ-API HQ OpenAPI Specification and Client & Server SDK Generators Cloning Github Repository Get access to Flocktory team in Github Adding a new SSH k

Flocktory Spain, S.L. 1 Sep 2, 2022