У меня проблема с Google API. Мне нужно получить все контакты пользователя в моем приложении, однако я не хочу загружать все данные каждый раз, потому что я храню данные в своей базе данных.
Вот почему я хочу использовать функциональность Sync Token, которая позволяет нам получать только данные, которые были изменены с момента нашего последнего запроса.
Для этого я использую Клиентская библиотека PHP API Google.
Я написал свой код, и он выдает исключение (Google_Service_Exception), которое объясняет, что мой токен синхронизации больше недействителен, поэтому я решил использовать систему 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;
Спасибо за вашу помощь и извините за мой английский, я не родной и не очень хорош в этом.
Извините, я нашел проблему, в моем классе пользователя у меня было:
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 '';
}}
Других решений пока нет …