2011-08-15 15 views
12

me gustaría usar el androide AccountManger para sincronizar mi servicio web y la aplicación (sincronización estándar de contactos y calandra), sin embargo, sólo aparece AccountManager para almacenar un nombre de usuario y contraseña. Mi servicio web requiere tres credenciales: un nombre de usuario, una contraseña y una cuenta. ¿Cuál es la mejor práctica para almacenar la tercera pieza de información?almacenar más datos en Android Account Manager

+0

Disculpe si es tonto, pero ¿no puede fusionar el nombre de usuario y la cuenta y mantener un 'Nombre de usuario' lógico? –

Respuesta

25

como P ablisco explicó, puede utilizar la capacidad del administrador de cuentas para almacenar datos de usuario arbitrarios a través del parámetro userData Bundle addAccountExplicitly() 's:

final Bundle extraData = new Bundle(); 
    extraData.putString("someKey", "stringData"); 
    boolean accountCreated = am.addAccountExplicitly(account, password, extraData); 

Más tarde, por ejemplo, en el método de autenticador getAuthToken(), puede recuperar los datos relacionados con la cuenta que está trabajar con:

String myData = am.getUserData(account, "someKey"); 

Desafortunadamente partir de este escrito sólo se puede recuperar las cadenas, por lo que los datos deben ser almacenados como una cadena la primera vez que construye el paquete. Espero que esto ayude a alguien.

+0

Estoy buscando usar el administrador de cuenta para mi aplicación, y necesitaría almacenar cosas como correos electrónicos y userIds. ¿Es seguro hacerlo usando el método anterior? ¿O podría alguna aplicación leer la identificación y el correo electrónico? –

+0

@TomHart - la documentación en getUserData() (la forma en que otras aplicaciones leerían los datos de la cuenta) establece: "Este método requiere que la persona que llama tenga el permiso AUTHENTICATE_ACCOUNTS y ​​que tenga el mismo UID que el autenticador de la cuenta". Eso significa que si la configuración es correcta, solo tu aplicación tendrá acceso a esa información. Sin embargo, AccountManager NO es un área segura para guardar datos confidenciales. El acceso físico al dispositivo permite que cualquiera lea esos datos. Ver: http://developer.android.com/reference/android/accounts/AccountManager.html#getUserData(android.accounts.Account, java.lang.String) –

+1

Hice algunas pruebas y vi que podía leer otros datos de cuentas, solo necesitaba la clave. ¿Tiene alguna recomendación sobre cómo almacenar de manera segura las identificaciones de usuario y correos electrónicos? Todo lo que puedo pensar es utilizar una clave realmente oscura para setUserData, como '.setUserData (" Some ^^! _ Really_StrangeEMa1L_Key! ", UserEmail);' pero si alguien descompila la aplicación, es posible que obtengan la cadena que utilicé. –

2

De la documentación de Android se supone que debe hacer ya sea con la userData Bundle cuando se añade la Cuenta:

AccountManager manager = AccountManager.get(context); 
manager.addAccountExplicitly(account, null, userData); 

o añadir de forma explícita los valores:

manager.setUserData(account, KEY, value); 

pero estoy teniendo problemas con esto:

AccountManager IllegalArgumentException: key is null

+0

Gracias por la respuesta. Terminé abandonando al gerente de cuenta. Al final tuve tantos problemas con eso. Habiendo dicho eso, parece que mi proyecto está creciendo y puedo volver a él. Verificaremos su respuesta pronto – JonWells

Cuestiones relacionadas