2012-10-02 5 views
9

अद्यतन:नव जारी किया "गूगल के साथ प्रमाणीकरण Play सेवाओं", GoogleAuthUtil.getToken के माध्यम से एक टोकन प्राप्त करने के साथ कोई समस्या

अभी मैं गूगल एपीआई के Google खाते मैं भी गूगल एप इंजन के लिए उपयोग कर रहा हूँ के साथ हस्ताक्षर किए और अब त्रुटि com.google.android.gms.auth.GoogleAuthException: Unknown


में बदल गया है गूगल अभी भी sign up to one's app via a Google Account लिए एक नया तरीका जारी किया गया और उनके blogpost में कुछ विवरण दिया गया है।

मैं एक एंड्रॉइड ऐप लिख रहा हूं जिसे आपको उपयोगकर्ता खाता बनाने के लिए साइन अप करना है और मैं बैक एंड के लिए Google App Engine का उपयोग कर रहा हूं। नाटक सेवाओं के साथ, मैं उपयोगकर्ताओं को उनके एंड्रॉइड डिवाइस और टोकन से संबद्ध ईमेल प्राप्त करना चाहता हूं। मैं पहले से ही ईमेल प्राप्त कर सकता हूं, हालांकि, टोकन प्राप्त करने से केवल त्रुटियां फेंकती हैं और दस्तावेज़ीकरण काफी स्पष्ट होने के कारण, मुझे नहीं पता कि इन्हें कैसे ठीक किया जाए। GooglePlayServices not available due to error 1 और com.google.android.gms.auth.GooglePlayServicesAvailabilityException: GooglePlayServicesNotAvailable:

private String[] getAccountNames() { 
    mAccountManager = AccountManager.get(this); 
    Account[] accounts = mAccountManager.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
    names = new String[accounts.length]; 
    for (int i = 0; i < names.length; i++) { 
     names[i] = accounts[i].name; 
    } 

    return names; 
} 

हालांकि, जब मैं token = GoogleAuthUtil.getToken(context, email, "scope" फोन कर रहा हूँ, यह मेरे इन त्रुटियों को देता है: यह मैं कैसे ईमेल मिलता है।

अब मेरा सवाल है, क्या मुझे किसी भी अनुमति को सेट करना होगा या इसे ठीक करने के लिए किसी भी पुस्तकालय को शामिल करना होगा? और दायरा पैरामीटर क्या है? स्कोप वैरिएबल को "https://www.googleapis.com/auth/userinfo.profile" पर सेट करने के लिए टोकन कैसे प्राप्त करें और दायरे के लिए क्या रखा जाए इसके लिए एक उदाहरण दिया गया है लेकिन मुझे अभी भी वही त्रुटि मिलती है।

मैंने Google एपीआई कंसोल के लिए भी अपना ऐप पंजीकृत किया और जी + एपीआई सक्षम किया, क्या मुझे वहां कुछ और कॉन्फ़िगर करना है?

उत्तर

2

आप केवल OAuth2 का समर्थन करने वाली Google सेवाओं के लिए टोकन प्राप्त कर सकते हैं। यदि आप अपना स्वयं का webservice लिख रहे हैं, तो आपको इसके मूल प्रमाणीकरण तंत्र (उपयोगकर्ता नाम और पासवर्ड?) का उपयोग करके इसे प्रमाणित करना चाहिए। "स्कोप" स्पष्ट रूप से एक अमान्य दायरा है, लेकिन ऐसा लगता है कि आपके पास Google Play सेवाएं इंस्टॉल नहीं हैं, और यह आपकी त्रुटि का कारण है। आप इसे Play Store से इंस्टॉल कर सकते हैं, लेकिन यह वास्तव में आपके लिए काम नहीं करेगा, क्योंकि आप Google सेवा का उपयोग नहीं कर रहे हैं।

+1

धन्यवाद, मैं वास्तव में गूगल एप इंजन का उपयोग कर रहा है, हालांकि। हालांकि, मैंने अभी सही Google खाते से साइन अप किया है जिसका मैं Google ऐप इंजन का भी उपयोग करता हूं। अब त्रुटि संदेश com.google.android.gms.auth.GoogleAuthException में बदल गया है: अज्ञात। –

+0

यदि आप OAuth2 का उपयोग करके GAE को प्रमाणीकृत करने का प्रयास कर रहे हैं, तो यह तब तक काम नहीं करेगा जब तक आप एंडपॉइंट्स का उपयोग नहीं कर रहे हैं, जो केवल 'विश्वसनीय परीक्षकों' के लिए उपलब्ध है। आप किस क्षेत्र का उपयोग करने की कोशिश कर रहे हैं? पूर्ण स्टैक ट्रेस भी पोस्ट करें। –

+0

मैं Google एपीआई में अपने एंड्रॉइड ऐप की SHA1-कुंजी अपडेट करना भूल गया था। अब, मुझे दायरे के साथ टोकन मिल रहा है "oauth2: https: //www.googleapis.com/auth/plus.me"; क्या यह सबकुछ हल करता है और क्या यह सही दायरा है? दायरे के बारे में क्या "https://www.googleapis.com/auth/userinfo.profile" ;? –

3

आप पहली बार इस तरह, सही ढंग से प्रारूपित गुंजाइश पारित करने के लिए की जरूरत है:

private final static String G_PLUS_SCOPE = 
     "oauth2:https://www.googleapis.com/auth/plus.me"; 
    private final static String USERINFO_SCOPE = 
     "https://www.googleapis.com/auth/userinfo.profile"; 
    private final static String SCOPES = G_PLUS_SCOPE + " " + USERINFO_SCOPE; 

आप Google यहाँ से, https://play.google.com/store/apps/details?id=com.google.android.gms Play सेवाएं इंस्टॉल की जरूरत है। Google Play सेवाओं ने Google Play इंस्टॉल (Froyo +) के साथ सभी डिवाइसों पर रोल करना शुरू कर दिया है।

अधिक यहां दी गई जानकारी नहीं है: http://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html

20

मैं Google डिस्क के लिए गूगल ग्राहक लाइब्रेरी का उपयोग एक ही समस्या थी। समाधान बहुत आसान है। बस अपने स्कोप यूआरएल को "oauth2:" प्रीपेन्ड करें।

गलत:

GoogleAuthUtil.getToken(this, account.name, DriveScopes.DRIVE); 

अधिकार:

GoogleAuthUtil.getToken(this, account.name, "oauth2:" + DriveScopes.DRIVE); 
+0

यह Google रीडर तक पहुंचने का प्रयास करते समय मेरे लिए काम करता था। – losttime

+2

धन्यवाद! मेरे लिए भी काम किया। एकाधिक क्षेत्रों के लिए, आप प्रत्येक स्कोप को सीमित करने वाले रिक्त स्थान के साथ "oauth2: scope1 scope2 scope3" कर सकते हैं। – Yuntao

+0

धन्यवाद! यह मुझे टोकन – ihrupin

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