相关疑难解决方法(0)

如何在 OnCompleteListener Firebase 中使用异步/等待/协程

我正在构建一个客户端应用程序,它使用 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

9
推荐指数
1
解决办法
1万
查看次数

将多个图像上传到 Firebase 存储

我使用 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)

android firebase firebase-storage

5
推荐指数
2
解决办法
2万
查看次数