android - एंड्रॉइड क्लाइंट में खाता प्रबंधक से ऑथोकोकन अब तक काम नहीं कर रहा है




google-app-engine authentication (2)

Google इंजीनियर से इसके लिए सहायता मिली। मेरा लेख बदल गया टोकन समाप्त हो गया था। मैंने शुरू में दिसंबर के शुरू में कार्यान्वयन को कार्यान्वित किया था (9वीं सटीक होना)। जाहिर है कि खाता प्रबंधक क्या ऑथोकन कैश करता है, इसलिए मैं 9 दिसंबर से उसी लेख का उपयोग कर रहा था। जब मैं छुट्टियों से वापस आया तो यह समाप्त हो गया था।

इस समस्या को हल करने के लिए, अब मैं getAuthToken को कॉल करता हूं, फिर उस टोकन पर अमान्य AuthToken को कॉल करें, फिर फिर से GetAuthToken को कॉल करें। यह एक वैध ऑथोकन उत्पन्न करता है और यह ठीक काम करता है, भले ही यह थोड़ा गुंजाइश हो और यदि अनावश्यक हो तो खाता प्रबंधक को हर बार एक नया ऑटोकन मिला, या यह देखने के लिए चेक किया गया कि कैश किए गए व्यक्ति की समयसीमा समाप्त हो गई है या नहीं।

ध्यान दें कि आपको खाता प्रकार के साथ टोकन प्रकार को मिश्रण नहीं करना चाहिए: अमान्य AuthToken को "आह" के बजाय "com.google" के साथ बुलाया जाना चाहिए या यह चुपचाप विफल हो जाएगा।

मैं बहुत उत्तेजित हूँ। मैं जावा में Google App Engine का उपयोग कर एंड्रॉइड के लिए एक टर्न-आधारित मल्टीप्लेयर ऑनलाइन गेम बनाने का प्रयास कर रहा हूं।

वे एकदम सही फिट की तरह लगते हैं। एंड्रॉइड के लिए एक Google खाता की आवश्यकता है, और जीएई प्रमाणीकरण के लिए Google खाते का उपयोग करता है, जबकि नि: शुल्क और स्केलेबल होता है।

तो छुट्टियों से पहले मैं एंड्रॉइड 2.0 में नए खाता प्रबंधक एपीआई का उपयोग करके अपने एंड्रॉइड क्लाइंट से अपने जीएई ऐप को प्रमाणीकरण प्राप्त करने में सक्षम था। निम्न कोड आपको उपयोगकर्ता के Google खाते के ऑथटोकन तक पहुंचने और फिर प्रमाणीकरण के लिए इसका उपयोग करने की अनुमति देता है, ताकि उपयोगकर्ता को अपना खाता उपयोगकर्ता नाम और पासवर्ड मैन्युअल रूप से दर्ज न करना पड़े:

   AccountManager mgr = AccountManager.get(this); 
   Account[] accts = mgr.getAccountsByType("com.google"); 
   Account acct = accts[0];
   AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null);
   Bundle authTokenBundle = accountManagerFuture.getResult(); 
   String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();

मैं तब परिणामस्वरूप ऑथोकोकन स्ट्रिंग को उचित यूआरएल में जोड़ सकता था और एक वैध कुकी प्राप्त कर सकता था जिसे मैं तब सभी अनुरोधों के लिए उपयोग कर सकता था। केवल एक चीज है, कभी-कभी पिछले हफ्ते उसने मेरे लिए काम करना बंद कर दिया। अब जब मैं उपरोक्त कोड से ऑथोकोकन का उपयोग करने का प्रयास करता हूं, तो मुझे कुकी वापस नहीं मिलती है और मेरा कोड गायब कुकी के लिए एक NullPointerException फेंकता है।

जब मैं पुराने तरीके से वापस जाता हूं, जब उपयोगकर्ता मैन्युअल रूप से अपने Google उपयोगकर्ता नाम और पासवर्ड में प्रवेश कर रहा था और मुझे " https://www.google.com/accounts/ClientLogin " से ऑथोकोकन मिलता है, तो यह ठीक काम करता है।

कृपया मुझे किसी को बताएं कि उपयोगकर्ता के फोन पर Google खाते से ऑथटोकन का उपयोग करके Google ऐप इंजन ऐप के लिए एंड्रॉइड क्लाइंट बनाया गया है, और मुझे कुछ सुराग दें कि यह अब क्यों काम नहीं कर रहा है।

मैं वास्तव में यह काम करना चाहता हूं। मेरे विकल्प उपयोगकर्ताओं को उनके क्रेडेंशियल दर्ज करने की आवश्यकता है (जो गुंजाइश है, और जिन्हें उन्हें नहीं करना चाहिए), या सर्वर के लिए किसी अन्य समाधान के साथ जा रहे हैं।

अग्रिम में धन्यवाद।


प्रति जवाब नहीं, लेकिन मुझे एंड्रॉइड v2.2.1 के साथ एक एंड्रॉइड नेक्सस पर सही टोकन प्राप्त करने के लिए लाइन 4 में "एंड्रॉइड" के साथ "आह" को प्रतिस्थापित करना पड़ा। अन्य उपकरणों / संस्करणों के बारे में निश्चित नहीं है। लाइन 4 फिर से बदल जाता है:

... = mgr.getAuthToken(acct, "ah", null, this, null, null);

में:

... = mgr.getAuthToken(acct, "android", null, this, null, null);






accountmanager