Skip to content

Commit 1546e58

Browse files
Merge branch 'master' into database-transactions
2 parents 1ed1028 + f3ec8f6 commit 1546e58

File tree

57 files changed

+663
-188
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+663
-188
lines changed

.github/workflows/publish.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ jobs:
8585
uses: eskatos/gradle-command-action@v1
8686
with:
8787
arguments: :firebase-functions:publish
88+
env:
89+
sonatypeUsername: ${{ secrets.SONATYPEUSERNAME }}
90+
sonatypePassword: ${{ secrets.SONATYPEPASSWORD }}
91+
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_PRIVATE_KEY }}
92+
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.PASSPHRASE }}
93+
- name: Publish Firebase Installations
94+
uses: eskatos/gradle-command-action@v1
95+
with:
96+
arguments: :firebase-installations:publish
8897
env:
8998
sonatypeUsername: ${{ secrets.SONATYPEUSERNAME }}
9099
sonatypePassword: ${{ secrets.SONATYPEPASSWORD }}

README.md

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ The following libraries are available for the various Firebase products.
1212

1313
| Service or Product | Gradle Dependency | API Coverage |
1414
| ------------------------------------------------------------------------------------ | :-----------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
15-
| [Authentication](https://firebase.google.com/docs/auth#kotlin-android) | [`dev.gitlive:firebase-auth:1.4.3`](https://search.maven.org/artifact/dev.gitlive/firebase-auth/1.4.3/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-auth/src/commonMain/kotlin/dev/gitlive/firebase/auth/auth.kt) |
16-
| [Realtime Database](https://firebase.google.com/docs/database#kotlin-android) | [`dev.gitlive:firebase-database:1.4.3`](https://search.maven.org/artifact/dev.gitlive/firebase-database/1.4.3/pom) | [![70%](https://img.shields.io/badge/-70%25-orange?style=flat-square)](/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/database.kt) |
17-
| [Cloud Firestore](https://firebase.google.com/docs/firestore#kotlin-android) | [`dev.gitlive:firebase-firestore:1.4.3`](https://search.maven.org/artifact/dev.gitlive/firebase-firestore/1.4.3/pom) | [![60%](https://img.shields.io/badge/-60%25-orange?style=flat-square)](/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt) |
18-
| [Cloud Functions](https://firebase.google.com/docs/functions/callable#kotlin-android)| [`dev.gitlive:firebase-functions:1.4.3`](https://search.maven.org/artifact/dev.gitlive/firebase-functions/1.4.3/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-functions/src/commonMain/kotlin/dev/gitlive/firebase/functions/functions.kt) |
19-
| [Cloud Messaging](https://firebase.google.com/docs/messaging#kotlin-android) | [`dev.gitlive:firebase-messaging:1.4.3`](https://search.maven.org/artifact/dev.gitlive/firebase-messaging/1.4.3/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) |
20-
| [Cloud Storage](https://firebase.google.com/docs/storage#kotlin-android) | [`dev.gitlive:firebase-storage:1.4.3`](https://search.maven.org/artifact/dev.gitlive/firebase-storage/1.4.3/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) |
21-
| [Remote Config](https://firebase.google.com/docs/remote-config/get-started?platform=android) | [`dev.gitlive:firebase-config:1.4.3`](https://search.maven.org/artifact/dev.gitlive/firebase-config/1.4.3/pom) | ![20%](https://img.shields.io/badge/-20%25-orange?style=flat-square) |
15+
| [Authentication](https://firebase.google.com/docs/auth) | [`dev.gitlive:firebase-auth:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-auth/1.6.1/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-auth/src/commonMain/kotlin/dev/gitlive/firebase/auth/auth.kt) |
16+
| [Realtime Database](https://firebase.google.com/docs/database) | [`dev.gitlive:firebase-database:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-database/1.6.1/pom) | [![70%](https://img.shields.io/badge/-70%25-orange?style=flat-square)](/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/database.kt) |
17+
| [Cloud Firestore](https://firebase.google.com/docs/firestore) | [`dev.gitlive:firebase-firestore:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-firestore/1.6.1/pom) | [![60%](https://img.shields.io/badge/-60%25-orange?style=flat-square)](/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt) |
18+
| [Cloud Functions](https://firebase.google.com/docs/functions)| [`dev.gitlive:firebase-functions:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-functions/1.6.1/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-functions/src/commonMain/kotlin/dev/gitlive/firebase/functions/functions.kt) |
19+
| [Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) | [`dev.gitlive:firebase-messaging:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-messaging/1.6.1/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) |
20+
| [Cloud Storage](https://firebase.google.com/docs/storage) | [`dev.gitlive:firebase-storage:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-storage/1.6.1/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) |
21+
| [Installations](https://firebase.google.com/docs/projects/manage-installations) | [`dev.gitlive:firebase-installations:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-installations/1.6.1/pom) | [![90%](https://img.shields.io/badge/-90%25-green?style=flat-square)](/firebase-installations/src/commonMain/kotlin/dev/gitlive/firebase/installations/installations.kt) |
22+
| [Remote Config](https://firebase.google.com/docs/remote-config) | [`dev.gitlive:firebase-config:1.6.1`](https://search.maven.org/artifact/dev.gitlive/firebase-config/1.6.1/pom) | ![20%](https://img.shields.io/badge/-20%25-orange?style=flat-square) |
23+
2224

2325

2426

@@ -65,8 +67,8 @@ The Firebase Kotlin SDK uses Kotlin serialization to read and write custom class
6567

6668
```groovy
6769
plugins {
68-
kotlin("multiplatform") // or kotlin("jvm") or any other kotlin plugin
69-
kotlin("plugin.serialization") version "1.5.30"
70+
kotlin("multiplatform") version "1.6.10" // or kotlin("jvm") or any other kotlin plugin
71+
kotlin("plugin.serialization") version "1.6.10"
7072
}
7173
```
7274

@@ -102,6 +104,33 @@ data class Post(
102104

103105
```
104106

107+
<h4>Polymorphic serialization (sealed classes)</h4>
108+
109+
This sdk will handle polymorphic serialization automatically if you have a sealed class and its children marked as `Serializable`. It will include a `type` property that will be used to discriminate which child class is the serialized.
110+
111+
You can change this `type` property by using the `@FirebaseClassDiscrminator` annotation in the parent sealed class:
112+
113+
```kotlin
114+
@Serializable
115+
@FirebaseClassDiscriminator("class")
116+
sealed class Parent {
117+
@Serializable
118+
@SerialName("child")
119+
data class Child(
120+
val property: Boolean
121+
) : Parent
122+
}
123+
```
124+
125+
In combination with a `SerialName` specified for the child class, you have full control over the serialized data. In this case it will be:
126+
127+
```json
128+
{
129+
"class": "child",
130+
"property": true
131+
}
132+
```
133+
105134
<h3><a href="https://kotlinlang.org/docs/reference/functions.html#default-arguments">Default arguments</a></h3>
106135

107136
To reduce boilerplate, default arguments are used in the places where the Firebase Android SDK employs the builder pattern:
@@ -172,13 +201,14 @@ If you are building a Kotlin multiplatform library which will be consumed from J
172201

173202
```json
174203
"dependencies": {
175-
"@gitlive/firebase-auth": "1.4.3",
176-
"@gitlive/firebase-database": "1.4.3",
177-
"@gitlive/firebase-firestore": "1.4.3",
178-
"@gitlive/firebase-functions": "1.4.3",
179-
"@gitlive/firebase-storage": "1.4.3",
180-
"@gitlive/firebase-messaging": "1.4.3",
181-
"@gitlive/firebase-config": "1.4.3"
204+
"@gitlive/firebase-auth": "1.6.1",
205+
"@gitlive/firebase-config": "1.6.1",
206+
"@gitlive/firebase-database": "1.6.1",
207+
"@gitlive/firebase-firestore": "1.6.1",
208+
"@gitlive/firebase-functions": "1.6.1",
209+
"@gitlive/firebase-installations": "1.6.1",
210+
"@gitlive/firebase-messaging": "1.6.1",
211+
"@gitlive/firebase-storage": "1.6.1"
182212
}
183213
```
184214

build.gradle.kts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat
33
import org.gradle.api.tasks.testing.logging.TestLogEvent
44

55
plugins {
6-
kotlin("multiplatform") version "1.5.32" apply false
6+
kotlin("multiplatform") version "1.6.10" apply false
77
id("base")
88
}
99

@@ -17,12 +17,12 @@ buildscript {
1717
}
1818
}
1919
dependencies {
20-
classpath("com.android.tools.build:gradle:7.0.4")
21-
classpath("com.adarshr:gradle-test-logger-plugin:2.1.1")
20+
classpath("com.android.tools.build:gradle:7.2.0")
21+
classpath("com.adarshr:gradle-test-logger-plugin:3.2.0")
2222
}
2323
}
2424

25-
val targetSdkVersion by extra(30)
25+
val targetSdkVersion by extra(32)
2626
val minSdkVersion by extra(19)
2727

2828
tasks {
@@ -44,7 +44,7 @@ subprojects {
4444

4545
group = "dev.gitlive"
4646

47-
apply(plugin="com.adarshr.test-logger")
47+
apply(plugin = "com.adarshr.test-logger")
4848

4949
repositories {
5050
mavenLocal()
@@ -107,7 +107,7 @@ subprojects {
107107
into.writeText(
108108
from.readText()
109109
.replace("require('firebase-kotlin-sdk-", "require('@gitlive/")
110-
// .replace("require('kotlinx-serialization-kotlinx-serialization-runtime')", "require('@gitlive/kotlinx-serialization-runtime')")
110+
// .replace("require('kotlinx-serialization-kotlinx-serialization-runtime')", "require('@gitlive/kotlinx-serialization-runtime')")
111111
)
112112
}
113113
}
@@ -197,12 +197,12 @@ subprojects {
197197
}
198198

199199
dependencies {
200-
"commonMainImplementation"("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2-native-mt")
201-
"androidMainImplementation"("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.5.2-native-mt")
202-
"androidMainImplementation"(platform("com.google.firebase:firebase-bom:29.0.1"))
200+
"commonMainImplementation"("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1-native-mt")
201+
"androidMainImplementation"("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.6.1-native-mt")
202+
"androidMainImplementation"(platform("com.google.firebase:firebase-bom:29.3.0"))
203203
"commonTestImplementation"(kotlin("test-common"))
204204
"commonTestImplementation"(kotlin("test-annotations-common"))
205-
"commonTestImplementation"("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2-native-mt")
205+
"commonTestImplementation"("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1-native-mt")
206206
"jsTestImplementation"(kotlin("test-js"))
207207
"androidAndroidTestImplementation"(kotlin("test-junit"))
208208
"androidAndroidTestImplementation"("junit:junit:4.13.2")

firebase-app/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ android {
4040
resources.pickFirsts.add("META-INF/LGPL2.1")
4141
}
4242
lint {
43-
isAbortOnError = false
43+
abortOnError = false
4444
}
4545
}
4646

@@ -120,8 +120,8 @@ kotlin {
120120
sourceSets {
121121
all {
122122
languageSettings.apply {
123-
apiVersion = "1.5"
124-
languageVersion = "1.5"
123+
apiVersion = "1.6"
124+
languageVersion = "1.6"
125125
progressiveMode = true
126126
}
127127
}

firebase-app/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-common": "1.4.3",
27-
"firebase": "9.4.1",
28-
"kotlin": "1.5.31",
29-
"kotlinx-coroutines-core": "1.5.2-native-mt"
26+
"@gitlive/firebase-common": "1.6.1",
27+
"firebase": "9.7.0",
28+
"kotlin": "1.6.10",
29+
"kotlinx-coroutines-core": "1.6.1-native-mt"
3030
}
3131
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json" == 8.9.1
1+
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json" == 8.15.0

firebase-auth/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ android {
5050
resources.pickFirsts.add("META-INF/LGPL2.1")
5151
}
5252
lint {
53-
isAbortOnError = false
53+
abortOnError = false
5454
}
5555
}
5656

@@ -149,8 +149,8 @@ kotlin {
149149
sourceSets {
150150
all {
151151
languageSettings.apply {
152-
apiVersion = "1.5"
153-
languageVersion = "1.5"
152+
apiVersion = "1.6"
153+
languageVersion = "1.6"
154154
progressiveMode = true
155155
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
156156
}

firebase-auth/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
},
2424
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
2525
"dependencies": {
26-
"@gitlive/firebase-app": "1.4.3",
27-
"firebase": "9.4.1",
28-
"kotlin": "1.5.31",
29-
"kotlinx-coroutines-core": "1.5.2-native-mt"
26+
"@gitlive/firebase-app": "1.6.1",
27+
"firebase": "9.7.0",
28+
"kotlin": "1.6.10",
29+
"kotlinx-coroutines-core": "1.6.1-native-mt"
3030
}
3131
}

firebase-auth/src/androidMain/kotlin/dev/gitlive/firebase/auth/auth.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import com.google.firebase.auth.ActionCodeResult.*
1111
import com.google.firebase.auth.FirebaseAuth.AuthStateListener
1212
import dev.gitlive.firebase.Firebase
1313
import dev.gitlive.firebase.FirebaseApp
14-
import dev.gitlive.firebase.safeOffer
1514
import kotlinx.coroutines.channels.awaitClose
1615
import kotlinx.coroutines.flow.Flow
1716
import kotlinx.coroutines.flow.callbackFlow
@@ -30,7 +29,7 @@ actual class FirebaseAuth internal constructor(val android: com.google.firebase.
3029
actual val authStateChanged: Flow<FirebaseUser?> get() = callbackFlow {
3130
val listener = object : AuthStateListener {
3231
override fun onAuthStateChanged(auth: com.google.firebase.auth.FirebaseAuth) {
33-
safeOffer(auth.currentUser?.let { FirebaseUser(it) })
32+
trySend(auth.currentUser?.let { FirebaseUser(it) })
3433
}
3534
}
3635
android.addAuthStateListener(listener)
@@ -40,7 +39,7 @@ actual class FirebaseAuth internal constructor(val android: com.google.firebase.
4039
actual val idTokenChanged get(): Flow<FirebaseUser?> = callbackFlow {
4140
val listener = object : com.google.firebase.auth.FirebaseAuth.IdTokenListener {
4241
override fun onIdTokenChanged(auth: com.google.firebase.auth.FirebaseAuth) {
43-
safeOffer(auth.currentUser?.let { FirebaseUser(it) })
42+
trySend(auth.currentUser?.let { FirebaseUser(it) })
4443
}
4544
}
4645
android.addIdTokenListener(listener)

firebase-auth/src/androidMain/kotlin/dev/gitlive/firebase/auth/credentials.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ actual object EmailAuthProvider {
2828
email: String,
2929
password: String
3030
): AuthCredential = AuthCredential(com.google.firebase.auth.EmailAuthProvider.getCredential(email, password))
31+
32+
actual fun credentialWithLink(
33+
email: String,
34+
emailLink: String
35+
): AuthCredential = AuthCredential(com.google.firebase.auth.EmailAuthProvider.getCredentialWithLink(email, emailLink))
3136
}
3237

3338
actual object FacebookAuthProvider {

firebase-auth/src/commonMain/kotlin/dev/gitlive/firebase/auth/credentials.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ expect class OAuthCredential : AuthCredential
1515

1616
expect object EmailAuthProvider {
1717
fun credential(email: String, password: String): AuthCredential
18+
fun credentialWithLink(email: String, emailLink: String): AuthCredential
1819
}
1920

2021
expect object FacebookAuthProvider {

firebase-auth/src/commonTest/kotlin/dev/gitlive/firebase/auth/auth.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ class FirebaseAuthTest {
105105
assertFalse(Firebase.auth.isSignInWithEmailLink(invalidLink))
106106
}
107107

108+
@Test
109+
fun testCredentialWithLink() {
110+
val link = "http://localhost:9099/emulator/action?mode=signIn&lang=en&oobCode=_vr0QcFcxcVeLZbrcU-GpTaZiuxlHquqdC8MSy0YM_vzWCTAQgV9Jq&apiKey=fake-api-key&continueUrl=https%3A%2F%2Fexample.com%2Fsignin"
111+
val email = "[email protected]"
112+
val credential = EmailAuthProvider.credentialWithLink(email, link)
113+
assertEquals("password", credential.providerId)
114+
}
115+
108116
private suspend fun getTestUid(email: String, password: String): String {
109117
val uid = Firebase.auth.let {
110118
val user = try {

firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/auth.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import cocoapods.FirebaseAuth.*
88
import dev.gitlive.firebase.Firebase
99
import dev.gitlive.firebase.FirebaseApp
1010
import dev.gitlive.firebase.FirebaseException
11-
import dev.gitlive.firebase.safeOffer
1211
import dev.gitlive.firebase.auth.ActionCodeResult.*
1312
import kotlinx.cinterop.*
1413
import kotlinx.coroutines.CompletableDeferred
@@ -29,12 +28,12 @@ actual class FirebaseAuth internal constructor(val ios: FIRAuth) {
2928
get() = ios.currentUser?.let { FirebaseUser(it) }
3029

3130
actual val authStateChanged get() = callbackFlow<FirebaseUser?> {
32-
val handle = ios.addAuthStateDidChangeListener { _, user -> safeOffer(user?.let { FirebaseUser(it) }) }
31+
val handle = ios.addAuthStateDidChangeListener { _, user -> trySend(user?.let { FirebaseUser(it) }) }
3332
awaitClose { ios.removeAuthStateDidChangeListener(handle) }
3433
}
3534

3635
actual val idTokenChanged get() = callbackFlow<FirebaseUser?> {
37-
val handle = ios.addIDTokenDidChangeListener { _, user -> safeOffer(user?.let { FirebaseUser(it) }) }
36+
val handle = ios.addIDTokenDidChangeListener { _, user -> trySend(user?.let { FirebaseUser(it) }) }
3837
awaitClose { ios.removeIDTokenDidChangeListener(handle) }
3938
}
4039

firebase-auth/src/iosMain/kotlin/dev/gitlive/firebase/auth/credentials.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ actual object EmailAuthProvider {
2020
password: String
2121
): AuthCredential =
2222
AuthCredential(FIREmailAuthProvider.credentialWithEmail(email = email, password = password))
23+
24+
actual fun credentialWithLink(
25+
email: String,
26+
emailLink: String
27+
): AuthCredential =
28+
AuthCredential(FIREmailAuthProvider.credentialWithEmail(email = email, link = emailLink))
2329
}
2430

2531
actual object FacebookAuthProvider {

firebase-auth/src/jsMain/kotlin/dev/gitlive/firebase/auth/auth.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ actual class FirebaseAuth internal constructor(val js: firebase.auth.Auth) {
2323

2424
actual val authStateChanged get() = callbackFlow<FirebaseUser?> {
2525
val unsubscribe = js.onAuthStateChanged {
26-
safeOffer(it?.let { FirebaseUser(it) })
26+
trySend(it?.let { FirebaseUser(it) })
2727
}
2828
awaitClose { unsubscribe() }
2929
}
3030

3131
actual val idTokenChanged get() = callbackFlow<FirebaseUser?> {
3232
val unsubscribe = js.onIdTokenChanged {
33-
safeOffer(it?.let { FirebaseUser(it) })
33+
trySend(it?.let { FirebaseUser(it) })
3434
}
3535
awaitClose { unsubscribe() }
3636
}

firebase-auth/src/jsMain/kotlin/dev/gitlive/firebase/auth/credentials.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ actual class OAuthCredential(js: firebase.auth.AuthCredential) : AuthCredential(
1616
actual object EmailAuthProvider {
1717
actual fun credential(email: String, password: String): AuthCredential =
1818
AuthCredential(firebase.auth.EmailAuthProvider.credential(email, password))
19+
20+
actual fun credentialWithLink(
21+
email: String,
22+
emailLink: String
23+
): AuthCredential = AuthCredential(firebase.auth.EmailAuthProvider.credentialWithLink(email, emailLink))
1924
}
2025

2126
actual object FacebookAuthProvider {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAuthBinary.json" == 8.9.1
1+
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAuthBinary.json" == 8.15.0

0 commit comments

Comments
 (0)