2012-08-13 8 views
6

Niedawno zacząłem używać http://code.google.com/p/google-api-php-client/ (Google OAuth2) dla mojej aplikacji internetowej. Jednak rysuję puste, ponieważ nie mogę odczytać strefy czasowej dla mojego użytkownika. Próbowałem wprowadzić go w jakiś sposób na mojej stronie konta Google, ale nie znalazłem żadnego takiego pola. Czy ktoś wie, czy Google naprawdę oferuje takie informacje, a jeśli tak, to w jaki sposób mogę ustawić to na moim koncie?Google auth2 API brakuje informacji o strefie czasowej?

Odpowiedz

5

Najbliższa dostępna opcja to strefa czasowa dostępna w kalendarzu Google. Sprawdź kartę "Ogólne" na stronie ustawień kalendarza: https://www.google.com/calendar

Teraz możesz poprosić o dostęp do kalendarza użytkownika podczas uwierzytelniania ich w usłudze. Użyj zakresu "https://www.googleapis.com/auth/calendar" (docs)

Po uwierzytelnieniu możesz request the calendar you're interested in. Domyślam się, że podstawowym kalendarzem użytkownika jest twój najlepszy zakład.

Wreszcie, każdy kalendarz ma ustawienia z timeZone property.

Here's sample code for the Google API PHP client.

+0

+1 Niezły zastrzyk serwisowy – mate64

1

Na dzień 21 marca 2013 Google nie dostarcza te informacje w swojej odpowiedzi na końcowym userinfo.profile - choć twierdzą, że robią.

Dokumentacja ta twierdzi, że strefa czasowa jest dostępny: https://developers.google.com/accounts/docs/OAuth2Login?hl=en#userinfocall

Jednak tylko bieżąca realizacja zwraca następujące dane:

  • id
  • email
  • verified_email
  • nazwa
  • given_name
  • FAMILY_NAME
  • Link (G + profilu, jeśli jest dostępny)
  • płci
  • urodziny
  • locale
  • hd (wydaje się być domeną Google Apps, jeśli dotyczy)

Zwróć uwagę, że "urodziny" i "hd" nie są wymienione w aktualnej dokumentacji na wyżej wymienionej stronie. Weryfikuję te pola na podstawie odpowiedzi otrzymywanych w czasie rzeczywistym od punktu końcowego.

Najlepszym sposobem na uzyskanie strefy czasowej w tej chwili jest prawdopodobnie użycie JavaScript (w celu pobrania strefy czasowej z przeglądarki użytkownika). Ta odpowiedź StackOverflow wyjaśnia, jak to zrobić:

Getting the client's timezone in JavaScript

Niestety, będzie to musiał wystąpić jako działanie wtórnego, co oznacza, że ​​trzeba dodać te dane do bazy danych oddzielnie od danych pobranych z końcowym . Jedną z rozważanych sztuczek jest przechwytywanie przesunięcia strefy czasowej na stronie, na której inicjowane jest żądanie punktu końcowego, a następnie dołączanie wartości przesunięcia strefy czasowej do wartości "stanu" w żądaniu OAuth.Wartość ta zostanie zwrócona na wywołanie zwrotne i można wyodrębnić ją i dodać do innych informacji profilu, które zostały zwrócone podczas tej samej procedury, w której piszesz do bazy danych.