Firebase Auth getProfilePhoto() returns 本地路径
Firebase Auth getProfilePhoto() returns local path
我正在使用 Firebase Auth 来管理用户的个人资料。
用户可以使用 firebase auth 的库存配置文件生成器为其帐户设置头像。
我设置头像的代码是
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 时,它 returns 本地路径 (E/SSA: file:///storage/emulated/0/DCIM/Camera/imagename.jpg
) 而不是远程 link。
因此,在不同设备或清除数据后在同一设备上打开同一帐户时,我的头像不会加载。
Firebase 身份验证不会对您提供的照片 URL 进行任何处理。因此,当您调用 .setPhotoUri(uri)
时,uri
是一个本地图像,这实际上就是它存储的值。
如果你想要一个其他人也可以访问的URL,你首先需要将图像上传到某个地方,在该位置获取图像的URL,然后将那 URL 到 setPhotoUri()
.
存储这些图像的常见位置是 Cloud Storage for Firebase,尽管这不是必需的。如果您想这样做,请查看其关于 uploading an image and then getting a download URL 的文档(这是一个公开可读的只读 URL,您可能想将其用于个人资料图片)。
我正在使用 Firebase Auth 来管理用户的个人资料。 用户可以使用 firebase auth 的库存配置文件生成器为其帐户设置头像。
我设置头像的代码是
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 时,它 returns 本地路径 (E/SSA: file:///storage/emulated/0/DCIM/Camera/imagename.jpg
) 而不是远程 link。
因此,在不同设备或清除数据后在同一设备上打开同一帐户时,我的头像不会加载。
Firebase 身份验证不会对您提供的照片 URL 进行任何处理。因此,当您调用 .setPhotoUri(uri)
时,uri
是一个本地图像,这实际上就是它存储的值。
如果你想要一个其他人也可以访问的URL,你首先需要将图像上传到某个地方,在该位置获取图像的URL,然后将那 URL 到 setPhotoUri()
.
存储这些图像的常见位置是 Cloud Storage for Firebase,尽管这不是必需的。如果您想这样做,请查看其关于 uploading an image and then getting a download URL 的文档(这是一个公开可读的只读 URL,您可能想将其用于个人资料图片)。