2012-05-12 20 views
5

से एक मूल Google ऑथ-टोकन प्राप्त करना मैं खाता प्रबंधक से Google एथोकोकन प्राप्त करना चाहता हूं जिसे मैं उपयोगकर्ता को प्रमाणीकृत करने के लिए अपनी वेबसाइट सेवा (ऐप इंजन पर होस्ट नहीं) भेज सकता हूं (मुझे केवल ईमेल पता चाहिए और अंत में उसका नाम, अगर इसके लिए कोई अनुमति की आवश्यकता नहीं है)।खाता प्रबंधक

"getAuthToken" विधि के "authTokenType" पैरामीटर के लिए मुझे क्या उपयोग करना है?

और कौन से Google एपीआई मुझे उपयोगकर्ताओं को ईमेल प्राप्त करने के लिए उपयोग करना है?

+0

अभी मिला Stackoverflow पर एक और उत्तर जो उपयुक्त लगता है: http://stackoverflow.com/a/6680837 –

उत्तर

4

इस OpenID कनेक्ट का उपयोग संभव है, लेकिन यह एक तरह से प्रयोगात्मक है, तो विवरण भविष्य में बदल सकता है। यदि आपको 'https://www.googleapis.com/auth/userinfo.email' या 'https://www.googleapis.com/auth/userinfo.profile' स्कोप के लिए OAuth टोकन मिलता है तो आप इसका उपयोग करने के लिए इसका उपयोग कर सकते हैं https://www.googleapis.com/oauth2/v1/userinfo (ईमेल सहित) से उपयोगकर्ता की जानकारी। बेशक उपयोगकर्ता को इसे अधिकृत करने की आवश्यकता है।

आपको सैद्धांतिक रूप से टोकन प्रकार के रूप में "oauth2: https: //www.googleapis.com/auth/userinfo.profile" का उपयोग करके AcccountManager से टोकन प्राप्त करने में सक्षम होना चाहिए, लेकिन यह काम नहीं करता है मेरा डिवाइस (स्टॉक 4.0.4 के साथ गैलेक्सी नेक्सस)। चूंकि AccountManager के माध्यम से टोकन प्राप्त करने से काम नहीं होता है (कम से कम अभी तक), वेबव्यू का उपयोग करने का एकमात्र विश्वसनीय तरीका है और यहां वर्णित ब्राउज़र के माध्यम से एक प्राप्त करें: https://developers.google.com/accounts/docs/MobileApps

यहां एक डेमो वेब ऐप है यह करता है: https://oauthssodemo.appspot.com

(देर से) अद्यतन: Google Play सेवाएं जारी की गई हैं और यह OAuth टोकन प्राप्त करने का पसंदीदा तरीका है। यह एंड्रॉइड 2.2 और उसके बाद वाले सभी उपकरणों पर उपलब्ध होना चाहिए। प्रोफाइल टोकन प्राप्त करना इसके साथ काम करता है, वास्तव में वे इसे डेमो ऐप

+0

क्या कोई उपनाम है जिसका उपयोग मैं https://www.googleapis.com/auth/userinfo.email या https://www.googleapis.com/auth/userinfo.profile के लिए कर सकता हूं (अन्यथा यह यूआरएल अनुमति में दिखाया जाएगा अनुरोध जो मुझे नहीं लगता कि बहुत उपयोगकर्ता के अनुकूल है)? –

+0

कोई भी जो मुझे पता है। क्या आपने टोकन प्राप्त करने का प्रबंधन किया था? जैसा कि मैंने कहा, यह कम से कम मेरे डिवाइस पर काम नहीं कर रहा है। –

+0

जानकारी के लिए ठीक है, बहुत दिलचस्प है। मुझे एक समाधान की आवश्यकता है जो सभी उपकरणों को पार करता है ताकि इस दृष्टिकोण को वास्तव में समझ में नहीं आता है। एकमात्र संभावित समाधान जो मैं अभी सोच सकता हूं वह एक ऐप इंजन टोकन प्राप्त कर रहा है और एक अतिरिक्त ऐप इंजन बैकएंड है जो केवल एक प्रमाणीकरण सेवा प्रदान करेगा। हालांकि मैं वास्तव में इस दृष्टिकोण को नापसंद करता हूं। –

0

आप Google+ का नाम API के साथ उपयोगकर्ता का नाम प्राप्त कर सकते हैं। (यह उपयोगकर्ता का ईमेल पता प्रदान नहीं करेगा)।

यदि यह ठीक है, तो आप "Google पर कौन हैं" जानें, authTokenType के रूप में आप इसका उपयोग कर सकते हैं।

Google द्वारा प्रदान किया गया एक नमूना एप्लिकेशन है जो दर्शाता है कि Google+ API के साथ AndroidAccountManager का उपयोग कैसे करें।

लिंक: http://code.google.com/p/google-plus-java-starter/source/browse/#hg%2Fandroid

+0

धन्यवाद, लेकिन मुझे एक टोकन की आवश्यकता है जिसका उपयोग मैं उपयोगकर्ता के ईमेल प्राप्त करने के लिए कर सकता हूं, क्योंकि बैकएंड उपयोगकर्ताओं की पहचान करने का तरीका है। –

2

में उपयोग करते हैं, मुझे इसके साथ भी समस्याएं आई हैं, क्योंकि मुझे संदर्भ जैसे कुछ भी नहीं मिला।

  1. कहीं अपने Android ऐप्लिकेशन का एक ईवेंट हैंडलर में, एक प्रमाणीकरण टोकन के लिए एक अनुरोध के अंक में उपयोगकर्ता के ईमेल पते पाने के लिए: शायद यह आप (एक Android उदाहरण से नकल कोड खाता प्रबंधक का उपयोग करने पर) मदद कर सकते हैं एंड्रॉयड:

    private class GetAuthTokenCallback implements AccountManagerCallback<Bundle> { 
        public void run(AccountManagerFuture<Bundle> result) { 
         Bundle bundle; 
         try { 
          bundle = result.getResult(); 
          final String access_token = bundle.getString(AccountManager.KEY_AUTHTOKEN); 
          // store token somewhere you can supply it to your web server. 
         } catch (Exception e) { 
          // do something here. 
         } 
        } 
    } 
    
  2. , अपने वेब सर्वर पर कुछ अनुरोध करें एसीसी की आपूर्ति:

    _accountMgr = AccountManager.get(this); 
    Account [] accounts = _accountMgr.getAccounts();     
    Account account = accounts[0]; // For me this is Google, still need to figure out how to get it by name. 
    _accountMgr.getAuthToken(account, AUTH_TOKEN_TYPE, false, new GetAuthTokenCallback(), null); 
    
  3. कॉलबैक में, पहुँच टोकन निकालने निबंध टोकन

  4. वेब सर्वर पर, पहुँच टोकन मान्य और ईमेल पते प्राप्त:

    curl -d 'access_token=<this is the token the app sent you>' https://www.googleapis.com/oauth2/v1/tokeninfo 
    

    आप कुछ इस तरह मिलना चाहिए:

    { 
        "issued_to": "<something>.apps.googleusercontent.com", 
        "audience": "<something>.apps.googleusercontent.com", 
        "scope": "https://www.googleapis.com/auth/userinfo.email", 
        "expires_in": 3562, 
        "email": "<users email address>", 
        "verified_email": true, 
        "access_type": "online" 
    } 
    

    या अगर कुछ गलत हो गया:

    { 
        "error": "invalid_token", 
        "error_description": "Bad Request" 
    } 
    
संबंधित मुद्दे