我正在构建一个客户端应用程序,它使用 Firebase 来做两件事:
我已成功在客户端和后端服务器上正确设置所有内容(使用 Firebase 的 Admin SDK),并且能够正确验证用户身份并允许他们读取/写入数据库。
我还使用 Retrofit2 将请求从客户端发送到后端。
作为允许用户访问数据库的一部分,需要将用户的令牌发送到后端,以便验证用户。
为此,我有以下逻辑:
val user = FirebaseAuth.getInstance().currentUser
if (user != null) {
user.getIdToken(false).addOnCompleteListener {
if (it.isSuccessful) {
val token = it.result?.token
//retrofit logic to send request happens from here
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,获取用户的 Id 令牌是一个异步调用,在我当前的代码库中,我对后端的每次调用都有这个代码块(重复)。
我想知道如何将此代码片段导出到函数(也许是挂起方法?),以便可以在每次调用后端时重用它
我在网上搜索过,看到了很多SO问题,但没有一个适合这种情况。我考虑过传递回调,但是我有几种与后端通信的方法,并且每个方法都需要不同的回调方法。
我正在寻找的解决方案看起来像这样:
fun fetchDataFromDB() {
getIdTokenForUser()
//wait till it finishes and then
//perform request to DB
}
fun updateDataInDB() {
getIdTokenForUser()
//wait till it finishes and then
//perform request to DB
}
//...... …Run Code Online (Sandbox Code Playgroud) android kotlin firebase firebase-authentication kotlin-coroutines
我使用 firebase 构建了一个聊天应用程序,我想将多个图像发送到 firebase 存储。
使用这个库
编译 'com.github.darsh2:MultipleImageSelect:3474549'
在顶部
private StorageReference storageRef;
private FirebaseApp app;
private FirebaseStorage storage;
Run Code Online (Sandbox Code Playgroud)
onCreate() 方法
app = FirebaseApp.getInstance();
storage =FirebaseStorage.getInstance(app);
Run Code Online (Sandbox Code Playgroud)
按钮点击动作
Gallary.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ChatActivity.this, AlbumSelectActivity.class);
intent.putExtra(Constants.INTENT_EXTRA_LIMIT, 10);
startActivityForResult(intent, Constants.REQUEST_CODE);
pwindo1.dismiss();
}
});
Run Code Online (Sandbox Code Playgroud)
活动结果
if (requestCode == Constants.REQUEST_CODE && resultCode == RESULT_OK) {
ArrayList<Image> images = data.getParcelableArrayListExtra(Constants.INTENT_EXTRA_IMAGES);
Uri uri = Uri.parse(String.valueOf(images));
storageRef = storage.getReference("photos");
final StorageReference photoRef = storageRef.child(uri.getLastPathSegment());
photoRef.putFile(uri)
.addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
public …Run Code Online (Sandbox Code Playgroud)