【问题标题】:Firebase Auth getProfilePhoto() returns local pathFirebase Auth getProfilePhoto() 返回本地路径
【发布时间】:2021-08-07 03:31:53
【问题描述】:

我正在使用 Firebase 身份验证来管理用户的个人资料。 用户可以使用 firebase auth 的 stock profile builder 为其帐户设置头像。

我设置头像的代码是

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode)
    {
        case CODE_PICK:
        {
            if(resultCode == Activity.RESULT_OK)
            {
                if(data != null)
                {
                    loadingDialog.ShowLoadingDialog();
                    Uri uri = data.getData();
                    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

                    UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                                .setPhotoUri(uri)
                                .build();

                    if(user != null)
                    {
                        user.updateProfile(profileUpdates)
                                .addOnCompleteListener(new OnCompleteListener<Void>()
                                {
                                    @Override
                                    public void onComplete(@NonNull @NotNull Task<Void> task)
                                    {
                                        if(task.isSuccessful())
                                        {
                                            Target target = new PicassoImageTarget().picassoImageTarget(AccountActivity.this, "media", "avatar.png");

                                            Picasso.get()
                                                    .load(uri)
                                                    .into(target);

                                            userVars.setAvatar(true);
                                        }
                                        else
                                        {
                                            Toast.makeText(AccountActivity.this, "Failed to upload avatar! Please try again later.", Toast.LENGTH_LONG).show();
                                        }
                                        loadingDialog.HideLoadingDialog();
                                    }
                                });
                    }
}

我在用户登录时检索照片的代码是

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null)
{
    Uri photoUrl = user.getPhotoUrl();

    Log.e("SSA", String.valueOf(photoUrl));

    Target target = new PicassoImageTarget().picassoImageTarget(SplashScreenActivity.this, "media", "avatar.png");
    if(photoUrl != null)
    {
        Picasso.get()
               .load(photoUrl)
               .into(target);

        userVars.setAvatar(true);
    }
    else
    {
        Picasso.get()
               .load(R.drawable.ic_main_avatar)
               .into(target);

        userVars.setAvatar(false);
    }
}

当我记录 Uri photoUrl = user.getPhotoUrl(); 之后返回的 photoUrl 时,它返回本地路径 (E/SSA: file:///storage/emulated/0/DCIM/Camera/imagename.jpg) 而不是远程链接。 因此,从不同设备或清除数据后在同一设备中打开同一帐户时,我的头像未加载。

【问题讨论】:

    标签: java android firebase firebase-authentication picasso


    【解决方案1】:

    Firebase 身份验证不会对您提供的照片网址进行任何处理。所以当你调用.setPhotoUri(uri) 时,uri 是一个本地图像,这就是它所存储的值。

    如果您想要一个其他人也可以访问的 URL,您首先需要将图像上传到某个地方,获取该位置的图像的 URL,然后将 那个 URL 传递给 @987654325 @。

    存储这些图像的常见位置是 Cloud Storage for Firebase,尽管这不是必需的。如果您想这样做,请查看其在 uploading an image 上的文档,然后查看 getting a download URL(这是一个公开可读的只读 URL,您可能希望将其用于个人资料图片)。

    【讨论】:

    • 没想到@Frank 本人的回复,但非常感谢。作为记录,我最初的方法实际上是使用 Firebase 存储。但后来当我发现 Firebase Auth 有一个原生的个人资料照片方法时,我放弃了它,以避免单独使用 Auth 实现相同的实现。
    猜你喜欢
    • 2021-10-03
    • 2022-01-16
    • 2019-04-12
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多