2015-08-03 11 views
8

के लिए कोई विवरण मैं सफलतापूर्वक को यहां बताए गए Gmail API घड़ी सुविधा का उपयोग करने के लिए गूगल Pub/Sub की स्थापना की है: https://developers.google.com/gmail/api/guides/push मेरे Gmail खाते में इनबॉक्स लेबल को देखने के लिए।Gmail API users.watch - historyId

एक बार नया संदेश मैं तुरन्त तरह का प्रारूप अमान्य एक पुश सूचना प्राप्त पहुंचें: मैं डेटा base64decode मैं ईमेल और historyId प्राप्त करने के बाद

{ message: 
    { data: '.......', 
    attributes: {}, 
    message_id: '1248700053943' }, 
subscription: '.....' } 

। फिर, जैसा कि सुझाव दिया गया है, मैं gmail.users.history.list एपीआई (एपीआई कंसोल के माध्यम से) के साथ startHistoryId इतिहास पर सेट पुश अधिसूचना से अनुरोध करता हूं। और फिर किसी भी जानकारी के बिना सिर्फ खाली प्रतिक्रिया मिल:

GET https://www.googleapis.com/gmail/v1/users/me/history?startHistoryId=4658879&key={YOUR_API_KEY} 
200 OK 
- Show headers 
{ 
"historyId": "4658894" 
} 

तो historyId एक अधिसूचना मान्य नहीं लगता है से। लगता है जीमेल users.watch एपीआई ठीक से काम नहीं कर रहा है, और गलत historyId भेजता है, या मैं बस कुछ याद कर रहा हूँ? जैसे मैं कैसे काम करता है users.history.list गलत समझा

+0

आप आप एपीआई Explorer में के रूप में अपने परीक्षण आवेदन में ठीक उसी ईमेल पते का उपयोग कर रहे हैं? – Tholle

+0

@ थॉल्ले, हां। इसके अलावा, अगर मैं प्रदान की historyId से थोड़ा घटाना, नहीं 4,658,879 लेकिन 4,658,800 कहना और इसका इस्तेमाल startHistoryId के रूप में मैं प्रतिक्रिया सरणी के बीच में कहीं नया संदेश के बारे में डेटा को आकर्षित करने में सक्षम हूँ। यह सटीक नहीं है, और एक जादू की तरह काम करता है, मुझे एक पुश संदेश से histroyId द्वारा सटीक डेटा प्राप्त करने के लिए सीधा तरीका चाहिए। –

उत्तर

13

लग रहा है, और प्रवाह कुछ नीचे वर्णित की तरह होना चाहिए:

  1. users.watch अनुरोध की प्रतिक्रिया से historyId याद रखें।

  2. धक्का अधिसूचना पर उपयोगकर्ताओं को पहले इतिहास के साथ history.list को कॉल करें, अधिसूचना से नए के बजाय प्रारंभ इतिहास के रूप में, और हालिया परिवर्तनों की सूची प्राप्त करें।

  3. अधिसूचना से historyId याद रखें, और गोटो 2.

अगर हम किसी भी कॉल users.history.list करने की प्रतिक्रिया पर देखो, historyId हमेशा की तरह, मौजूद है यह नवीनतम इतिहास परिवर्तन की एक मार्कर है। पुश अधिसूचना नवीनतम historyId लाता है, इसलिए हम इसके साथ users.history.list का अनुरोध (प्रश्न के रूप में) है, तो हम इतिहास के खाली सरणी हो गया, और सर्वर प्रतिक्रिया से खाली "इतिहास" क्षेत्र चला जाता है, यही कारण है कि हम इस मिलता है :

{ 
"historyId": "4658894" 
} 

लेकिन यह नहीं: सिंक गाइड में प्रदान की

{ 
"history": [ ], 
"historyId": "4658894" 
} 

अधिक विवरण: https://developers.google.com/gmail/api/guides/sync#partial

तो हम आसानी से नए संदेश के विवरण पुश अधिसूचना से इनबॉक्स के लिए पहुंचे नहीं मिल सकता है, और इतिहास खनन और syn के साथ सौदा करने की जरूरत है इसे खोजने के लिए chronization।

+5

हां, पुश अधिसूचना सिर्फ एक अमान्य अधिसूचना है। क्लाइंट को परिणामस्वरूप कम से कम इतिहास प्राप्त करने के लिए कम से कम history.list() और फिर संभावित रूप से अन्य कॉल जैसे संदेश.get() को कॉल करना चाहिए। –

+1

क्या ऐसा पहला तरीका है जिसने पहले वेबहूक को ट्रिगर किया था? आपके द्वारा वर्णित मामले में, हमें प्रारंभिक ईमेल कभी नहीं मिलेगा। – squixy

संबंधित मुद्दे