2012-02-13 17 views
10

मैं प्रोग्रामर नहीं हूं, लेकिन मुझे इसे स्वयं करने की ज़रूरत है। मैं कुछ मदद की जरूरत है।Google ओपनआईडी के साथ एंड्रॉइड प्रमाणीकरण। आगे क्या?

मैं पिछले दो दिनों से समाधान ढूंढ रहा हूं और मुझे कोई भी नहीं मिला।

ठीक है। मैं एंड्रॉइड नेटिव ऐप लिख रहा हूं। मेरा पहला लक्ष्य Google खाते के माध्यम से लॉगिन की संभावना प्राप्त करना है (जो पहले से ही फोन पर सेट है)।

तो मैं खाता प्रबंधक का उपयोग कर रहा "com.google" खाता प्राप्त करने के लिए, मैं एक प्रमाणीकरण टोकन इस तरह से हो रही है:

Account[] mAccounts = mAccountManager.getAccountsByType("com.google"); 
AccountManagerFuture<Bundle> response = 
    mAccountManager.getAuthToken(mAccounts[0], "android", null, this, null, null); 

Bundle authTokenBundle; 
String authToken; 

try { 
    authTokenBundle = response.getResult(); 
    authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString(); 
} catch (OperationCanceledException e) { 
    Log.e(TAG, e.getMessage()); 
} catch (AuthenticatorException e) { 
    Log.e(TAG, e.getMessage()); 
} catch (IOException e) { 
    Log.e(TAG, e.getMessage()); 
} 

और मेरे सवाल है - क्या मेरा अगला कदम क्या होना चाहिए? मैं इस प्रमाणीकरण प्रक्रिया के साथ आगे कैसे जा सकता हूं? मुझे इस टोकन का उपयोग कैसे करना चाहिए?

मुझे कुछ संसाधन मिल गए हैं, लेकिन उनमें से अधिकतर ओएथ का उपयोग कर रहे हैं या वेब-आधारित हैं। मुझे केवल प्रमाणित करने की आवश्यकता है और (यदि यह संभव है) उपयोगकर्ता का नाम प्राप्त करें (मेरे पास पहले से ही ई-मेल पता है), मुझे किसी भी Google सेवाओं तक पहुंचने की आवश्यकता नहीं है।

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

+0

यदि आप कोशिश करते हैं और प्राप्त करते हैं तो अकाउंट्स(), क्या यह आपको वह जानकारी नहीं देता है? मैंने इसे कभी भी इसके बारे में नहीं पढ़ा, लेकिन इसके साथ थोड़ा सा –

+0

खेलें और इस आलेख को आजमाएं: http://joakim.erdfelt.com/wiki/index.php/AndroidGetAccount –

उत्तर

8

दरअसल, ओएआईडीआईडी ​​ओपनआईडी की बजाय आप चाहते हैं - ओपनआईडी स्वाभाविक रूप से वेब-आधारित है, इसलिए आपको WebView या ब्राउज़र के साथ कुछ हुप्स से कूदना होगा। OAuth 2 आपको ऐप से सीधे Google एपीआई के साथ खाता प्रबंधक से टोकन का उपयोग करने की अनुमति देता है। सिद्धांत रूप में कर सकता है यह;

getAuthToken() करने के लिए अपने कॉल में, authTokenType पैरामीटर OAuth 2 गुंजाइश है, जो आप userinfo.profile और userinfo.email ईमेल पता (आप पहले से ही यह है, लेकिन आप यह सत्यापित नहीं किया है प्रमाणित करने के लिए होना चाहता हूँ है धोखा दिया जाना चाहिए) और उपयोगकर्ता का नाम प्राप्त करने के लिए।

यहाँ मैं एक ऐसी ही स्थिति में पूर्ण कार्यक्षेत्र के लिए उपयोग करें:

private static final String OAUTH2_SCOPE = 
    "oauth2:" + 
    "https://www.googleapis.com/auth/userinfo.profile" + 
    " " + 
    "https://www.googleapis.com/auth/userinfo.email"; 
बेशक

, तो आप सिर्फ पूरी स्ट्रिंग शाब्दिक इनलाइन इस्तेमाल कर सकते हैं, लेकिन मैं इसे बनाने और स्पष्ट होना पसंद करते हैं, और यह यदि आवश्यक हो तो बाद में इसे बदलना आसान बनाता है।

मेरे मामले में, मैं इस तरह getAuthTokenByFeatures(), कुछ का उपयोग करें:

am.getAuthTokenByFeatures("com.google", OAUTH2_SCOPE, null, this, null, null, 
          new AccountManagerCallback<Bundle>() 
{ 
    public void run(AccountManagerFuture<Bundle> future) { 
     try { 
      Bundle bundle = future.getResult(); 
      System.out.println("Got Bundle:\n" + 
           " act name: " + 
           bundle.getString(AccountManager.KEY_ACCOUNT_NAME) + 
           "\n act type: " + 
           bundle.getString(AccountManager.KEY_ACCOUNT_TYPE) + 
           "\n auth token: " + 
           bundle.getString(AccountManager.KEY_AUTHTOKEN)); 
     } catch (Exception e) { 
      System.out.println("getAuthTokenByFeatures() cancelled or failed:"); 
      e.printStackTrace(); 
     } 
    } 
}, null); 

लेकिन आप अपने कोड के लिए एक ही उपाय पर अमल कर सकते हैं। फिर आप Google उपयोगकर्ता जानकारी API के साथ OAuth टोकन का उपयोग कर सकते हैं, जैसा कि ईमेल सत्यापित करने और उपयोगकर्ता का नाम प्राप्त करने के लिए Using OAuth 2.0 for Login में वर्णित है।

+0

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

+0

आपने जो कोशिश की है @TheJohnny, bocoz मुझे भी मेरे आवेदन के लिए एक ही समस्या का सामना करना पड़ रहा है ......... –

+0

@ दर्शन कंप्यूटिंग मैंने ब्राउजर का उपयोग करके पहुंच प्राप्त कर लिया है। यानी उपयोगकर्ता अपने फोन में साइन इन किए गए किसी भी खाते का उपयोग कर सकते हैं। बस रंग नोट ऐप आदि की तरह। मैं इसे कैसे प्राप्त कर सकता हूं? –

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