我的Google API存在问题。我需要在我的应用程序中获取用户的所有联系人,但是我不想每次都加载所有数据,因为我将数据存储在我的数据库中。
这就是为什么我想使用同步令牌功能,让我们只获取自上次查询以来已被更改的数据。
为此我使用Google APIs PHP client library。
我编写了我的代码并抛出异常(Google_Service_Exception),这解释了我的Sync Token无效,所以我决定使用try / catch系统重置syncToken,如果它无效。
我的问题是,每次我发出请求时,即使我的令牌有效,我也会引发google_service_exception。
我将令牌存储在我的数据库中,所以我在API资源管理器中对它进行了测试:https://developers.google.com/people/api/rest/v1/people.connections/list它工作正常,所以我不明白为什么我的应用程序无法正常工作。
这是我的代码:
$personFields = 'metadata,names,addresses,biographies,birthdays,emailAddresses,genders,memberships,organizations,phoneNumbers';
$user = $this->get('security.token_storage')->getToken()->getUser();
$syncToken = $user->getContactSyncToken();
$nextPagetoken = '';
$contactData = array();
$people_service = new \Google_Service_PeopleService($client);
do {
try {
$data = $people_service->people_connections->listPeopleConnections(
'people/me',
array(
'personFields' => $personFields,
'requestSyncToken' => true,
'syncToken' => $syncToken,
'pageToken' => $nextPagetoken,
)
);
}catch (\Google_Service_Exception $e){
$data = $people_service->people_connections->listPeopleConnections(
'people/me',
array(
'personFields' => $personFields,
'requestSyncToken' => true,
'syncToken' => '',
'pageToken' => $nextPagetoken,
)
);
}finally{
$syncToken = $data->getNextSyncToken();
$nextPagetoken = $data->getNextPageToken();
if (count($data->getConnections()) != 0) {
$contactData[] = $data->getConnections();
}
}
}while ($nextPagetoken !== null);
$user->setContactSyncToken($syncToken);
$this->getDoctrine()->getManager()->flush();
return $contactData;
感谢您的帮助,对不起我的英语,我不是本地人,也不是很擅长。
答案 0 :(得分:0)
抱歉,我发现问题,在我的用户类中:
public function getContactSyncToken()
{
if($token = $this->contactSyncToken !== null){
return $token;
}else{
return '';
}
}
它总是返回'',现在它适用于:
public function getContactSyncToken()
{
$token = $this->contactSyncToken;
if($token !== null){
return $token;
}else{
return '';
}
}