A better implementation has been merged into the official kotlin/kotlinx.coroutines repository.
Please, use the official implementation instead.
Coroutine wrappers for Tasks API and ApiFuture API used in Firebase Admin SDK.
The following code shows how to get an user from Firebase and delete it using two approaches.
The standard approach is to write nested callback functions.
val auth = FirebaseAuth.getInstance()
auth.getUserByEmail(email)
.addOnSuccessListener { user ->
auth.deleteUser(user.uid)
.addOnSuccessListener { println("User deleted") }
.addOnFailureListener { exception -> println(exception) }
}
.addOnFailureListener { exception -> println(exception) }
The other approach is the use of a suspended coroutine
to make the code flatter, so we can call the await()
method
to wait the first asynchronous operations (retrieve the user) to complete before starting the second one (delete the user).
val auth = FirebaseAuth.getInstance()
try {
val user = auth.getUserByEmail(email).await()
auth.deleteUser(user.uid).await()
println("User deleted")
} catch (exception: FirebaseAuthException) {
println(exception)
}
Assuming you already have the Firebase Admin SDK as a dependency in your project, you just need to copy and paste the functions into your project.
Firebase SDK version | Function |
---|---|
5.x.x or earlier | Task<T>.await() |
6.x.x or later | ApiFuture<T>.await() |
To run the test cases you'll need to put the private key of a Firebase project in the root path. It also should be named google-services.json
. In case you don't the tests will throw an error due to unauthorized call to the Firebase servers.
If you know how to implement unit tests for the case, please fill an issue and send a pull request.
If you found any bug or want to improve the project, please feel free to fork it, fill issues and send pull requests.