पर Google कैलेंडर API OAuth2 समस्याएं मैं एंड्रॉइड हनीकॉम (v3.0) एप्लिकेशन पर काम कर रहा हूं जिसमें Google कैलेंडर API के साथ संचार करने की आवश्यकता है। मैं ईवेंट को पढ़ने और बनाने के लिए अपने एप्लिकेशन को किसी विशेष Google खाते के कैलेंडर डेटा तक पहुंचने की अनुमति देना चाहता हूं।एंड्रॉइड हनीकॉम
दुर्भाग्यवश, मैं OAuth2 का उपयोग करके प्राधिकरण के साथ एक समस्या में भाग गया। यहां मेरे पास अब तक है:
1) Google खाता जिसका कैलेंडर मैं एक्सेस करना चाहता हूं वह एंड्रॉइड डिवाइस के भीतर पंजीकृत है जिसके साथ मैं काम कर रहा हूं।
2) मैंने खाते में Google API कंसोल के भीतर कैलेंडर API सक्षम किया।
3) मैं निम्नलिखित कोड का उपयोग कर इस खाते में प्रवेश करने में सक्षम हूँ:
AccountManager accountManager = AccountManager.get(this.getBaseContext());
Account[] accounts = accountManager.getAccountsByType("com.google");
Account acc = accounts[0]; // The device only has one account on it
4) अब मैं जब कैलेंडर के साथ संवाद स्थापित उपयोग के लिए एक AuthToken प्राप्त करने के लिए करना चाहते हैं। मैंने इस tutorial का पालन किया, लेकिन Google कार्य के बजाय Google कैलेंडर के साथ काम करने के लिए सबकुछ परिवर्तित कर दिया। मैंने AccountManager
से authToken
को सफलतापूर्वक पुनर्प्राप्त किया है जिसका खाता मैं getAuthToken
AUTH_TOKEN_TYPE == "oauth2:https://www.googleapis.com/auth/calendar"
के साथ उपयोग करके उपयोग करना चाहता हूं।
5) यहां समस्याएं शुरू होती हैं। मैं इस बिंदु पर अब कर रहा हूँ:
AccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(tokens[0]); // this is the correct token
HttpTransport transport = AndroidHttp.newCompatibleTransport();
Calendar service = Calendar.builder(transport, new JacksonFactory())
.setApplicationName("My Application's Name")
.setHttpRequestInitializer(accessProtectedResource)
.build();
service.setKey("myCalendarSimpleAPIAccessKey"); // This is deprecated???
Events events = service.events().list("primary").execute(); // Causes an exception!
6) यहाँ अपवाद अंतिम पंक्ति द्वारा दिया गया है:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"message" : "Daily Limit Exceeded. Please sign up",
"reason" : "dailyLimitExceededUnreg",
"extendedHelp" : "https://code.google.com/apis/console"
} ],
"message" : "Daily Limit Exceeded. Please sign up"
}
7) इस Google API Video के अनुसार (एक मिनट प्रतीक्षा या तो लागू सामग्री को पाने के लिए), इस अपवाद का एक कारण यह तथ्य हो सकता है कि मैंने खाते के लिए Google API कंसोल में API एक्सेस को सक्षम नहीं किया है। हालांकि, अगर आप 2 देखते हैं), तो आप देख सकते हैं कि मैंने ऐसा किया है।
8) मेरे लिए, ऐसा लगता है कि समस्या यह है कि मैं सरल API एक्सेस कुंजी को सही ढंग से सेट करने में असमर्थ था, क्योंकि Calendar.setKey
विधि बहिष्कृत है। Google कार्य ट्यूटोरियल के भीतर जो मैंने पहले लिंक किया था, कुंजी Tasks.accessKey = "key"
का उपयोग करके सेट की गई है। मुझे यकीन नहीं है कि कैलेंडर एपीआई के साथ यह कैसे काम करना है, हालांकि। मैंने कई Google खातों की कोशिश की है, जो सभी 5 से अपवाद के साथ आए थे)।
9) मैं यह इंगित करना चाहता हूं कि OAuth2 का उपयोग करने की पारंपरिक विधि मेरे लिए काम करती है। यहाँ कोड मैं उस के लिए इस्तेमाल किया है:
HttpTransport TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
String SCOPE = "https://www.googleapis.com/auth/calendar";
String CALLBACK_URL = "urn:ietf:wg:oauth:2.0:oob";
String CLIENT_ID = "myClientID";
String CLIENT_SECRET = "myClientSecret";
String authorizeUrl = new GoogleAuthorizationRequestUrl(CLIENT_ID, CALLBACK_URL, SCOPE).build();
String authorizationCode = "???"; // At this point, I have to manually go to the authorizeUrl and grab the authorization code from there to paste it in here while in debug mode
GoogleAuthorizationCodeGrant authRequest = new GoogleAuthorizationCodeGrant(TRANSPORT, JSON_FACTORY, CLIENT_ID, CLIENT_SECRET, authorizationCode, CALLBACK_URL);
authRequest.useBasicAuthorization = false;
AccessTokenResponse authResponse = authRequest.execute();
String accessToken = authResponse.accessToken; // gets the correct token
GoogleAccessProtectedResource access = new GoogleAccessProtectedResource(accessToken, TRANSPORT, JSON_FACTORY, CLIENT_ID, CLIENT_SECRET, authResponse.refreshToken);
HttpRequestFactory rf = TRANSPORT.createRequestFactory(access);
AccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(accessToken);
HttpTransport transport = AndroidHttp.newCompatibleTransport();
Calendar service = Calendar.builder(transport, new JacksonFactory())
.setApplicationName("My Application's Name")
.setHttpRequestInitializer(accessProtectedResource)
.build();
Events events = service.events().list("primary").execute(); // this works!
10) अंत में, मेरे सवाल: मैं Google कैलेंडर के साथ प्रयोग के लिए एक काम कर OAuth2 टोकन प्राप्त करने में डिवाइस पर ही खाता प्रबंधक से खाते का उपयोग करना चाहते हैं एपीआई। दूसरी विधि मेरे लिए उपयोगी नहीं है, क्योंकि उपयोगकर्ता को मैन्युअल रूप से अपने वेब ब्राउज़र पर जाना होगा और प्राधिकरण कोड प्राप्त करना होगा, जो उपयोगकर्ता के अनुकूल नहीं है। क्या किसी के भी पास कोई सुझाव है? लंबी पोस्ट के लिए माफ़ी, और धन्यवाद!
हाय, मैं ने वही समस्या का सामना करना पड़ रहा हूँ, मैं इस कोड के टुकड़े इस्तेमाल किया एक कैलेंडर अनुप्रयोग चलाने के लिए है, लेकिन फिर मैं एक 403 मिलता है , प्रतिबंधित त्रुटि का उपयोग, सह उल कृपया आप सहायता करें, मुझे एंड्रॉइड में क्या करना चाहिए? हालांकि मैं नंबर 8 का उपयोग किसी विकल्प के रूप में नहीं कर रहा हूं। कृपया एचएलपी। –
आप एक विकल्प के रूप में क्या उपयोग कर रहे हैं? क्या आपने @ eltrl के उत्तर की जांच की है? – BVB