una play pide para hacer google español developer descargar contraseñas contraseña comprar como clave autenticacion android authentication oauth accountmanager

play - Android: autenticación de Google



google play store (4)

Compruebe el proyecto de muestra "auth" en el SDK de Android, hace exactamente eso.

Quiero preguntar cuál es la mejor manera de autenticar al usuario con su cuenta de Google ya configurada en el teléfono. Primero miré el ClientLogin, pero no es lo que quiero porque requiere que los usuarios ingresen el inicio de sesión / contraseña en mi aplicación. Puedo hacerlo con OAuth pero allí debería pedirle al usuario que ingrese sus credenciales en el navegador, lo que tampoco es preferible. Quiero usar AccountManager (he observado que contiene el método getPassword para una cuenta en particular pero no funcionó para mí), si es posible usar de alguna manera AccountManager + ClientLogin o AccountManager + OAuth dime por favor. Como resultado, quiero tener capacidades para iniciar sesión con la cuenta de usuario de Google sin preguntar su nombre de usuario / contraseña (con la confirmación en el dispositivo Android, por supuesto). No estoy seguro de que sea posible, pero si existe alguna forma de implementar esto, por favor diríjanme cómo. ..



Puede usar la compilación en AccountManager:

Account[] accounts = accountManager.getAccountsByType("com.google");

Luego extraiga la cuenta que desea de la lista devuelta. El siguiente paso sería llamar a AccountManager.getAuthToken .

Una vez que tenga authToken, puede pasarlo a las API de Google llamando a:

api.setUserToken(token);

a diferencia de setUserCredentials que requieren el usuario y la contraseña.


sí, puede acceder a la información en el accountManager y autenticar al usuario utilizando la cuenta de google registrada (por ejemplo) sin que ella ingrese la contraseña.

El siguiente código es una combinación funcional y combina los ejemplos de nick johnson y tencent

comienza con tu actividad principal:

package com.tg.auth; import android.accounts.Account; import android.accounts.AccountManager; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; public class ZAuth02aActivity extends ListActivity { protected AccountManager accountManager; protected Intent intent; String TAG = "TGtracker"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); accountManager = AccountManager.get(getApplicationContext()); Account[] accounts = accountManager.getAccountsByType("com.google"); this.setListAdapter(new ArrayAdapter<Account>(this, R.layout.list_item, accounts)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Account account = (Account)getListView().getItemAtPosition(position); Intent intent = new Intent(this, AppInfo.class); intent.putExtra("account", account); startActivity(intent); } }

crea una clase AppInfo:

package com.tg.auth; import org.apache.http.impl.client.DefaultHttpClient; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerFuture; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class AppInfo extends Activity { DefaultHttpClient http_client = new DefaultHttpClient(); Activity activity; String TAG = "TGtracker"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_info); activity = this; } @Override protected void onResume() { super.onResume(); //Log.v(TAG, "resuming activity"); AccountManager accountManager = AccountManager.get(getApplicationContext()); //if result is null, you might not have a valid internet connection Log.i(TAG, "got token, yipee: "+updateToken(accountManager, true)); } private String updateToken(AccountManager am, boolean invalidateToken) { String authToken = "null"; try { Account[] accounts = am.getAccountsByType("com.google"); AccountManagerFuture<Bundle> accountManagerFuture; if(activity == null){//this is used when calling from an interval thread accountManagerFuture = am.getAuthToken(accounts[0], "android", false, null, null); } else { accountManagerFuture = am.getAuthToken(accounts[0], "android", null, activity, null, null); } Bundle authTokenBundle = accountManagerFuture.getResult(); authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString(); Log.v(TAG, "newToken preinvalidate: "+authToken); if(invalidateToken) { am.invalidateAuthToken("com.google", authToken); authToken = updateToken(am, false); } } catch (IOException e) { Log.e(TAG, "the exception was: "+e.toString()); e.printStackTrace(); } return authToken; } }

use un archivo de manifiesto, algo así (debe declarar actividades + permisos):

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tg.auth" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"></uses-permission> <uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission> <uses-permission android:name="android.permission.USE_CREDENTIALS"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".ZAuth02aActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AppInfo"></activity> </application> </manifest>

utiliza los archivos de diseño de nick johnson que puedes descargar aquí