2014-11-04 13 views
6

Udało mi się uzyskać powiadomienie push z kalendarza google do mojego systemu, gdy nowe wydarzenie zostanie utworzone w kalendarzu. powiadomienia Push nie ma danych w organizmie POST i nagłówków POST są następujące:jak zdobyć szczegóły wydarzenia z google calendar

[Host] => xxxxxx.xxxx.com 
[Content-Type] => application/json; charset=UTF-8 
[Accept] => */* 
[X-Goog-Channel-ID] => xxxxxxx-xxxxxxxx-8824-f0c2166878be 
[X-Goog-Channel-Expiration] => Thu, 04 Dec 2014 04:27:13 GMT 
[X-Goog-Resource-State] => exists 
[X-Goog-Message-Number] => 11897215 
[X-Goog-Resource-ID] => xxxxxxxxxx-xxxx-pSbC27qOUfg 
[X-Goog-Resource-URI] => https://www.googleapis.com/calendar/v3/calendars/[email protected]/events?key=AIzaSyC_0nytiZWHfabrpWiExxxxxxxxxxx&alt=json 
[Content-Length] => 0 
[Connection] => Keep-alive 
[Accept-Encoding] => gzip,deflate 
[User-Agent] => APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html) 

gdzie są nowe szczegóły wydarzenia, które zostało utworzone w kalendarzu? jak je zdobyć?

brak informacji online i brak informacji w dokumentacji Google (poszukiwali godzin): https://developers.google.com/google-apps/calendar/v3/push

gdzie są szczegóły wydarzenia ??

UPDATE:

ustawić zegarek w moim kalendarzu przy użyciu tego kodu:

service = new Google_Service_Calendar($client);   
$channel = new Google_Service_Calendar_Channel($client); 
$uuid = gen_uuid(); 
$channel->setId($uuid); 
$channel->setType('web_hook'); 
$channel->setExpiration('1919995862000'); 

global $sugar_config; 
$address = $sugar_config['site_url'] . "/index.php?entryPoint=updateFromCal"; 
$channel->setAddress($address); 
$watchEvent = $service->events->watch($bean->google_cal_id_c, $channel); 

Jest to szczegóły kanału wyślę do Kalendarza Google API:

[address] => https://mydomainXXXX/index.php?entryPoint=updateFromCal 
[expiration] => 1919995862000 
[id] => xxxxxxxxxxxxxxx--4558-ac19-b82e0ca32206 
[kind] => 
[params] => 
[payload] => 
[resourceId] => 
[resourceUri] => 
[token] => 
[type] => web_hook 
[modelData:protected] => Array 
    (
    ) 

[processed:protected] => Array 
    (
    ) 

ja nadal otrzymuję ten sam identyfikator zasobu w odpowiedzi, z każdym nowym wydarzeniem, które utworzę w kalendarzu! dlaczego nie mogę uzyskać identyfikatora wydarzenia, które właśnie utworzyłem? co zrobiłem źle? czy oglądam wydarzenia lub kanały?

Odpowiedź, którą otrzymuję, jest nadal wymieniona powyżej, z tym samym identyfikatorem zasobu przez cały czas.

+0

Czy powinienem otrzymać szczegóły zdarzenia, które wywołało powiadomienie push, w samym powiadomieniu push? jeśli nie, skąd mogę wiedzieć, która zmiana zdarzenia spowodowała jego uruchomienie? – Rodniko

+0

@rodnika niestety nie. Zobacz moją odpowiedź poniżej. W skrócie trzeba zrobić synchronizację, aby uzyskać wydarzenie, które uległo zmianie. – FullStack

+0

Możliwy duplikat http: // stackoverflow.com/questions/18308751/response-from-google-regarding-push-notification/ – FullStack

Odpowiedz

7

Push nie zawiera żadnych danych. Mówi tylko, że coś się zmieniło w tym zasobie. Będziesz musiał wykonać żądanie listy, aby dowiedzieć się, co to było. Korzystnie to żądanie listy będzie przyrostową synchronizacją. Zobacz, jak wykonać synchronizację: https://developers.google.com/google-apps/calendar/v3/sync

0

Aby uzyskać szczegółowe informacje o zdarzeniu, należy wykonać żądanie GET, które powinno zwrócić informacje o zasobach jako odpowiedź JSON. Możesz to zrobić, przekazując identyfikator kalendarza i identyfikator zdarzenia (identyfikator zdarzenia w tym przypadku powinien być identyfikatorem zasobu, zakładając, że powiadomienie zostało skonfigurowane do monitorowania zdarzeń).

+1

Dziękuję za odpowiedź, Andy. zasób, który otrzymuję, ma zawsze ten sam identyfikator zasobu, bez względu na to, które nowe wydarzenie doda w kalendarzu. zgodnie z twoją odpowiedzią, nie oglądam wcale wydarzeń, ponieważ wtedy dostałbym inny identyfikator zasobu z każdą wiadomością powiadomienia push o nowym wydarzeniu, prawda? – Rodniko

+0

zaktualizowałem wpis, aby zobaczyć kod zegarka. Czy oglądam kanały lub wydarzenia? jeśli oglądam wydarzenia, dlaczego nie mam identyfikować nowego identyfikatora zdarzenia jako identyfikatora zasobu? – Rodniko

+1

Czy na pewno powinienem otrzymać identyfikator zdarzenia nowego zdarzenia dodanego w kalendarzu w parametrze "X-Goog-Resource-ID" w odpowiedzi na powiadomienie Push? – Rodniko

0

Brakuje przyrostowej synchronizacji. Od wersji the creators themselves nieznacznie zmienionej zgodnie z moimi gustami:

Pierwszą rzeczą, którą musi zrobić aplikacja, jest nowa funkcja wypychania, która polega na zasubskrybowaniu kalendarza zainteresowania. Po zmianie kalendarza Google powiadomi twoją aplikację, a aplikacja wykona wywołanie interfejsu API, aby pobrać aktualizację.

Jako przykład załóżmy, że masz kalendarz [email protected] Twoja aplikacja jest hostowana na serwerze z domeną my-host.com, a powiadomienia push powinny być dostarczane do haka internetowego HTTPS https://my-host.com/notification

Za każdym razem, gdy [email protected] ulegnie zmianie, serwer Kalendarza Google uruchomi sieć -hook callback na https://my-host.com/notification. Po otrzymaniu wywołania zwrotnego aplikacja musi wykonać numer incremental sync.

Powiązane problemy