2014-11-04 4 views
6

캘린더에 새 일정이 만들어지면 Google 캘린더에서 내 시스템으로 푸시 알림을받는 데 성공했습니다. 푸시 알림은 POST 본문에 데이터가없는 및 ​​POST 헤더는 다음과 같습니다 달력에서 생성 된 새로운 이벤트 세부 사항은Google 캘린더에서 일정 세부 정보를 얻는 방법

[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) 

? 어떻게받을 수 있습니까?

온라인 어떤 정보와 구글 문서에 대한 정보는 없음 (시간 동안 검색 한) : 이벤트 세부 사항은 https://developers.google.com/google-apps/calendar/v3/push

?

UPDATE : 이것은 구글 캘린더 API에 내가 전송 채널 정보입니다

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); 

: 나는이 코드를 사용하여 내 캘린더에 시계를 설정

[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 
    (
    ) 

를 내가 응답에서 동일한 리소스 ID를 얻습니다. 새 이벤트는 캘린더에서 만듭니다. 방금 만든 이벤트의 이벤트 ID를 얻을 수없는 이유는 무엇입니까? 내가 뭘 잘못 했니? 이벤트 나 채널을보고 있습니까?

내가받는 응답은 여전히 ​​위에서 언급 한 것과 동일하며 항상 동일한 리소스 ID를 사용합니다.

+0

푸시 알림 자체에서 푸시 알림을 트리거 한 이벤트 세부 정보를 수신하기로되어 있습니까? 그렇지 않은 경우, 어떤 이벤트 변경으로 트리거되었는지 어떻게 알 수 있습니까? – Rodniko

+0

@rodnika 불행히도 없습니다. 아래 내 대답을 참조하십시오. 즉, 변경된 이벤트를 얻으려면 동기화가 필요합니다. – FullStack

+0

가능한 중복 http : // stackoverflow.co.kr/questions/18308751/google 관련 문의 - 푸시 알림/ – FullStack

답변

7

푸시에 데이터가 없습니다. 그것은 그 자원에서 무엇인가가 변경되었다는 것을 알려주는 것입니다. 그것이 무엇인지 알아 내기 위해 목록 요청을해야합니다. 이 목록 요청은 증분 동기화가됩니다. 여기에서 동기화를 수행하는 방법을 살펴보십시오. https://developers.google.com/google-apps/calendar/v3/sync

0

이벤트 세부 정보를 얻으려면 리소스 정보를 JSON 응답으로 반환해야하는 GET 요청을해야합니다. 캘린더 ID와 이벤트 ID (이 경우 이벤트 ID는 이벤트를보기 위해 알림이 설정되었다고 가정하면 리소스 ID 여야 함)를 전달하면됩니다.

+1

답변 해 주셔서 감사합니다. Andy. 내가받는 리소스는 캘린더에 추가 한 새 이벤트와 관계없이 항상 동일한 리소스 ID를 갖습니다. 귀하의 회신에 따르면, 나는 전혀 이벤트를 보지 못합니다. 왜냐하면 새로운 이벤트의 모든 푸시 알림 메시지에 다른 리소스 ID가 있기 때문입니다. – Rodniko

+0

시계의 코드를 볼 수 있도록 게시물을 업데이트했습니다. 채널이나 이벤트를보고 있습니까? 이벤트를 보면 리소스 ID로 새 이벤트 ID를 알 수 있습니까? – Rodniko

+1

푸시 알림 응답의 "X-Goog-Resource-ID"매개 변수에 캘린더에 내가 추가 한 새 이벤트의 이벤트 ID를 받아야합니까? – Rodniko

0

증분 동기화가 누락되었습니다. 내 취향에 따라 약간 수정 된 the creators themselves부터 :

첫 번째로해야 할 일은 관심있는 캘린더를 구독하는 것입니다. 캘린더가 변경되면 Google에서 앱에 알리고 앱에서 API 호출을 통해 업데이트를받습니다.

예를 들어, [email protected]이라는 달력이 있다고 가정 해 보겠습니다. 앱이 my-host.com 도메인이있는 서버에서 호스팅되고 푸시 알림이 HTTPS 웹 후크에 전달되어야 함 https://my-host.com/notification

[email protected]이 변경 될 때마다 Google 캘린더 서버가 웹을 트리거합니다 -hook 콜백은 https://my-host.com/notification입니다. 콜백을받은 후 앱에서 incremental sync을 수행해야합니다.

관련 문제