मैं अपने आवेदन प्रमाणीकरण के लिए GoogleAccountCredential का उपयोग कर में प्रवेश करने की कोशिश कर रहा हूँ पर OAuth 2.0 पहुँच टोकन प्राप्त करने में विफल:एंड्रॉयड एमुलेटर
mGoogleAccountCredential = GoogleAccountCredential.usingOAuth2(context, Arrays.asList(Scopes.EMAIL, Scopes.PLUS_LOGIN));
mGoogleAccountCredential.setSelectedAccountName(accountName);
String token = mGoogleAccountCredential.getToken();
यह असली उपकरणों पर बस ठीक काम करता है, लेकिन एंड्रॉयड एमुलेटर पर mGoogleAccountCredential.getToken()
विफल रहता है
java.lang.IllegalArgumentException: the name must not be empty: null
03-01 19:41:31.604 3203-3361/com.myapp W/System.err: at android.accounts.Account.<init>(Account.java:48)
03-01 19:41:31.604 3203-3361/com.myapp W/System.err: at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
03-01 19:41:31.604 3203-3361/com.myapp W/System.err: at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:255)
- Google Play वर्तमान सेवा एमुलेटर पर (
GoogleApiAvailability.isGooglePlayServicesAvailable(context)
रिटर्न 0) +०१२३५१६४१०६१: निम्न अपवादों के साथ
accountName
सेट कर दिया जाता है और सही जबsetSelectedAccountName
("[email protected]"
के लिए सेट)- सभी अनुमतियाँ, dependecies को पारित कर दिया और विन्यास परियोजना में मौजूद
कोई सुराग क्यों यह एमुलेटर पर काम नहीं कर रहा है?
युपीडी:
गूगल के कोड में थोड़ा खुदाई के बाद: मुद्दा setSelectedAccountName(accountName)
विधि में होता है। यह विधि GoogleAccountManager
से उसे दिए गए खाते के नाम से जुड़े खाते को देने के लिए कहती है। कोई ऐसा कोई खाता नहीं है, तो खाता नाम null
करने के लिए सेट किया जा रहा है:
public final GoogleAccountCredential setSelectedAccountName(String accountName) {
selectedAccount = accountManager.getAccountByName(accountName);
// check if account has been deleted
this.accountName = selectedAccount == null ? null : accountName;
return this;
}
AccountManager
, बारी में, सभी मौजूदा खाते पर चला जाता है और दिए गए खाते के नाम के लिए उनके नाम है। यदि मिलान है, उपयुक्त खाता लौटा दिया जाता है:
public Account getAccountByName(String accountName) {
if (accountName != null) {
for (Account account : getAccounts()) {
if (accountName.equals(account.name)) {
return account;
}
}
}
return null;
}
public Account[] getAccounts() {
return manager.getAccountsByType("com.google");
}
बात यह है कि एमुलेटर पर getAccounts()
रिटर्न खाली सरणी। एक असली डिवाइस पर, हालांकि, यह एक उचित सूची देता है।
क्या आप Google API सिस्टम छवि का उपयोग करते हैं? – Anthony
हां, मैंने इसे अपने प्रश्न – meltedspark
में निर्दिष्ट किया है बस सुनिश्चित करने के लिए (जैसा कि मुझे इस विषय में गहरा अनुभव नहीं है), क्या आपने अपना वर्चुअल डिवाइस बनाने के लिए "Google एपीआई आइटम x86 सिस्टम छवि" का उपयोग किया था, न केवल "आइटम x86 सिस्टम छवि"? मैंने नहीं देखा कि आपने यह कहां निर्दिष्ट किया है (शायद अप्रत्यक्ष रूप से) – Anthony