我可以从google admin SDK的user.list api中检索thumbnailPhotoUrl
。但是,每当我尝试渲染图像时,Google都会重定向到静态轮廓图像。通过API检索的URL类似于
https://plus.google.com/_/focus/photos/private/AIbEiAIA....
如上所述,这最终会被重定向到:
https://ssl.gstatic.com/s2/profiles/images/silhouette200.png
但是,通过一些逆向工程,我可以通过将/ u / 1 /添加到URL路径的开头来查看照片,如下所示:
https://plus.google.com/u/1/_/focus/photos/private/AIbEiAIA...
根据我的研究,/ u / 1与多个谷歌帐户有关,所以我担心我无法依赖这种方法。谁能帮助我了解这里发生了什么?
答案 0 :(得分:2)
根据我自己的经验,我发现如果 thumbnailPhotoUrl 在网址上隐私,那么照片不公开,即在域外无法查看,也可能是用户没有激活了他们的Google+个人资料,我相信无论如何都要公开他们的照片。
如果网址上有私人路径,最好避免使用 thumbnailPhotoUrl 。我认为使用Users.Photo API将照片检索为Web安全base64数据然后将其编码为内联base64 CSS图像更为可靠。
这是我经常使用的代码段:
import com.google.common.io.BaseEncoding;
import com.google.api.services.admin.directory.model.User;
import com.google.api.services.admin.directory.model.UserPhoto;
public class PhotoUtils {
public void loadPhoto() {
// if the user have not signed up for Google+ yet then their thumbnail is private
String thumbnailUrl = user.getThumbnailPhotoUrl();
String photoData = "";
if((thumbnailUrl != null) && (thumbnailUrl.indexOf("private") > -1)) {
UserPhoto photo = getUserPhoto(user.getId());
if(photo != null) {
photoData = getBase64CssImage(photo.getPhotoData(), photo.getMimeType());
}
}
}
public static String getBase64CssImage(String urlSafeBase64Data, String mimeType) {
urlSafeBase64Data = new String(BaseEncoding.base64().encode(
BaseEncoding.base64Url().decode(urlSafeBase64Data)));
return "data:" + mimeType + ";base64," + urlSafeBase64Data;
}
public UserPhoto getUserPhoto(String userId) throws IOException {
UserPhoto photo = null;
try {
photo = this.getClient().users().photos().get(userId).execute();
} catch(GoogleJsonResponseException e) {
if(e.getMessage().indexOf(NOT_FOUND) == 0) {
log.warning("No photo is found for user: " + userId);
} else {
throw e;
}
}
return photo;
}
}
答案 1 :(得分:0)
这是我的10美分...
最近,我一直在为Angular构建G Suite用户选择器,但遇到了同样的问题。尽管如此,我仍在进行测试和研究,在其中一项测试中,我决定使用NON-ADMIN用户来调用目录api users list endpoint。 (爆炸的头)令我惊讶的是,尽管Google提供了非超级管理员数据,但足以为用户提供私有缩略图网址,因此Google允许这种类型的请求。起初,我认为这是一种意想不到的行为,如果您愿意的话,会出现某种错误。那是我遇到this documentation的时候。
虽然只能由管理员修改用户帐户,但域上的任何用户都可以读取用户配置文件。非管理员用户可以使用viewType参数等于domain_public的users.get或users.list请求来检索用户的公共配置文件。范围https://www.googleapis.com/auth/admin.directory.user.readonly是此用例的理想选择。
所以这是预期的行为。那是它打到我的时候。检索用户数据时生成的专用URL仅应由发出请求的用户使用。如果将URL提供给其他用户,它将重定向到匿名剪影。
由此我可以得出结论,如果我需要检索用户列表并需要查看其照片的能力,则需要使用需要查看各自数据的用户凭据来调用目录api端点。 。这通过我正在构建的G Suite用户选择器小部件达到了我的目的。