我正在建立一个网站,我想允许谷歌登录。我不希望我的客户再次将他们的个人资料图片上传到我的网站。我对如何使用 facebook 进行操作有一些线索,但是一旦用户通过 Google 帐户进行身份验证,我如何从 google plus 帐户中获取个人资料图片?有没有这方面的API?如果是,请分享。
8 回答
当 plus 客户端连接时,我们可以通过 plus 客户端轻松获取它,即
if(plusClient.isConnected){
plusClient.getCurrentPerson().getImage().getUrl();
}
它将为您提供图像的 url。
您可以使用给定的技巧获取 Google 个人资料图片 URL:
老把戏
https://plus.google.com/s2/photos/profile/(user_id)?sz=150
但这现在不起作用,因为谷歌已经改变了他们的政策,所以下面给出了这样做的新技巧
新把戏
请求网址
https://www.googleapis.com/plus/v1/people/115950284...320?fields=image&key={YOUR_API_KEY}
这将以 json 格式提供 Google 个人资料图片网址,如下所示
回复 :
{
"image":
{
"url": "https://lh3.googleusercontent.com/-OkM...AANA/ltpH4BFZ2as/photo.jpg?sz=50"
}
}
有关更多详细信息,您还可以查看
如何通过 Google plus 中的用户 ID 获取用户图像?
编码快乐!!
有关详细信息,请参阅https://developers.google.com/+/api/latest/people/get,但通常您需要执行以下步骤:
- 使用 OAuth2,使用
plus.login
范围对它们进行身份验证。 - 他们登录后,您可以使用 people.get 方法和 userId 值为“me”。这给出了他们完整的个人资料
- 他们的照片将在
image.url
现场
+1 @Prisoner 所说的,您应该使用 plus.login 对用户进行身份验证,然后使用特殊字符串检索用户me
。
获取照片 URL 和封面照片 URL 的完整示例。
<html>
<head>
<script src="https://apis.google.com/js/client:plusone.js"></script>
</head>
<body>
<span id="signinButton">
<span
class="g-signin"
data-callback="signinCallback"
data-clientid="YOUR_CLIENT_ID"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/plus.login">
</span>
</span>
<script>
function signinCallback (resp) {
gapi.client.load('plus', 'v1', function() {
gapi.client.plus.people.get({userId: 'me'}).execute(getProfilePic);
});
}
function getProfilePic(person){
console.log(person.image.url);
console.log(person.cover.coverPhoto.url);
}
</script>
</body>
</html>
当页面加载时,会呈现登录按钮,当用户登录时,会触发回调。触发回调时,加载plus客户端。在 plus 客户端加载之后,对 people.get 进行 API 调用。
愿此代码帮助您获取带有图片的 Google+ 个人资料信息
<?php
/* * Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require_once 'google-api-php-client/src/apiClient.php';
require_once 'google-api-php-client/src/contrib/apiPlusService.php';
session_start();
$id = $_POST['id'];
$client = new apiClient();
$client->setApplicationName("Google+ PHP Starter Application");
// oauth2_client_id, oauth2_client_secret, and to register your oauth2_redirect_uri.
$client->setClientId('357142505911.apps.googleusercontent.com');
$client->setClientSecret('LbJa7YOJ1Th-e-TOosEJxI4A');
$client->setRedirectUri('http://www.w3resource.com/API/google-plus/example.php');
$client->setDeveloperKey('AIzaSyD3stLpkt7jJw0mkMsJtM9m_zrgg26rrsI');
$plus = new apiPlusService($client);
if (isset($_REQUEST['logout'])) {
unset($_SESSION['access_token']);
}
if (isset($_GET['code'])) {
$client->authenticate();
$_SESSION['access_token'] = $client->getAccessToken();
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
if (isset($_SESSION['access_token'])) {
$client->setAccessToken($_SESSION['access_token']);
}
if ($client->getAccessToken()) {
$me = $plus->people->get($id);
$optParams = array('maxResults' => 100);
$activities = $plus->activities->listActivities($id, 'public', $optParams);
// The access token may have been updated lazily.
$_SESSION['access_token'] = $client->getAccessToken();
} else {
$authUrl = $client->createAuthUrl();
}
?>
<!doctype html>
<html>
<head><link rel='stylesheet' href='style.css' /></head>
<body>
<header><h1>Google+ Sample App</h1></header>
<div class="box">
<?php if(isset($me) && isset($activities)): ?>
<div class="me">
<p><a rel="me" href="<?php echo $me['url'] ?>"><?php print $me['displayName'] ?></a></p>
<p><?php print $me['tagline'] ?></p>
<p><?php print $me['aboutMe'] ?></p>
<div><img src="<?php echo $me['image']['url']; ?>?sz=82" /></div>
</div>
<div class="activities">Your Activities:
<?php foreach($activities['items'] as $activity): ?>
<div class="activity">
<p><a href="<?php print $activity['url'] ?>"><?php print $activity['title'] ?></a></p>
</div>
<?php endforeach ?>
</div>
<?php endif ?>
<?php
if(isset($authUrl)) {
print "<a class='login' href='$authUrl'>Connect Me!</a>";
} else {
//print "<a class='logout' href='?logout'>Logout</a>";
}
?>
</div>
</body>
</html>
http://www.avatarapi.com/提供了一个 API,它根据 Google 的公开信息返回用户的姓名和个人资料图片。
可以在此 API 端点通过 SOAP 或 HTTP 调用它: http ://www.avatarapi.com/avatar.asmx
此 API 的好处之一是它不需要用户通过 Google 进行身份验证。但是,在您的特定情况下,这将是一个问题。
根据新方式登录谷歌的文档,它说
公共 Uri getPhotoUrl ()
如果用户有个人资料图片并且您从新的 GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)} 或配置了 requestProfile() 开始构建配置,则返回已登录用户的照片 url;否则为空。不保证对所有用户都存在,即使已配置。
正如最后一行所说 Not guaranteed to be present for all users, even when configured
,您应该处理 null 情况。
P/S:有时,如果已经创建了 Google+ 个人资料图片,但在您在设备中添加 Google 帐户之后,您可能需要从设备中删除现有的 Google 帐户,然后重新添加。
此处建议使用以下网址:
https://plus.google.com/s2/photos/profile/GOOGLE-ID?sz=100
我以前从未在任何文档中看到过这一点,因此 Google+ 可能不支持,但现在可以使用。
也许 +class 或 +Prisoner 可以说一些关于此 url 的支持以获取个人资料图片的信息?