Una breve introducción a la gestión de sincronización de cuentas de Android AccountManager

Una breve introducción a la gestión de sincronización de cuentas de Android AccountManager

prefacio

Interfaz de Android – "Configuración Configuración - "Cuentas - "Agregar cuenta, y descubrió que no hay una lista de aplicaciones que se pueden sincronizar, ¿qué está pasando?

Después de una ola de Baidu, estaba un poco mareado al principio, pero básicamente lo entendí después de leer un poco más.

Primero revele la respuesta, es el siguiente código, la longitud de la matriz authTypes devuelta es 0;

AccountManager am = AccountManager.get(Context);
AuthenticatorDescription[] authTypes = am.getAuthenticatorTypes();

Por qué devuelve 0, o cómo hacer que no devuelva 0, se explicará más adelante.

Puede leer los siguientes dos artículos para presentar el conocimiento relacionado con AccountManager:
https://blog.csdn.net/dzkdxyx/article/details/78569867
https://blog.csdn.net/dzkdxyx/article/details/78632945

Introducción a AccountManager

Administrador de cuentas AccountManager, que administra de forma centralizada diferentes tipos de cuentas registradas por aplicaciones.
Los diferentes tipos de servicios de cuenta usarán diferentes métodos de inicio de sesión y autenticación de cuenta, por lo que AccountManager proporciona un módulo de autenticación complementario para diferentes tipos de cuentas. Los autenticadores
manejan los detalles específicos del inicio de sesión/autenticación de la cuenta por sí mismos, y también pueden almacenar la información de la cuenta por sí mismos. .

Authenti... ¿Qué?
Token de autorización (token de autenticación, auth-token): es un token de acceso temporal proporcionado por el servidor.
Todas las solicitudes que necesitan identificar al usuario deben llevar consigo este token cuando se envían al servidor.
Usamos OAuth2, que es el método más popular ahora.

Cómo hacer que su aplicación aparezca en la lista de cuentas sincronizables

Una breve introducción en Internet: https://www.cnblogs.com/mfmdaoyou/p/6844097.html

1. Cree una clase personalizada de AuthenticationService

public class MyAuthenticationService extends Service {

    MyAuthenticator mAuthenticator;

    @Override
    public void onCreate() {
        LogUtil.debug("");
        mAuthenticator = new MyAuthenticator(this);
    }

    @Override
    public IBinder onBind(Intent intent) {
        LogUtil.debug("getBinder()...  returning the AccountAuthenticator binder for intent " + intent);
        LogUtil.debug("mAuthenticator = " + mAuthenticator);
        return mAuthenticator.getIBinder();
    }
}

Asegúrese de recordar registrarse en AndroidManifest.xml

    <service
        android:name=".MyAuthenticationService"
        android:exported="true">
        <intent-filter>
            <action
                android:name="android.accounts.AccountAuthenticator" />
        </intent-filter>
        <meta-data
            android:name="android.accounts.AccountAuthenticator"
            android:resource="@xml/authenticator" />
    </service>

2. Cree el archivo xml/xml del atributo del token de autenticación

autenticador.xml

   <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="com.example.android.samplesync"
    android:icon="@drawable/icon"
    android:smallIcon="@drawable/icon"
    android:label="@string/label"
/>

La información anterior es la información del token que pueden obtener otras aplicaciones.

3. Cree una clase de autenticador personalizada

MyAuthenticator es una clase que hereda de AbstractAccountAuthenticator.

public class MyAuthenticator extends AbstractAccountAuthenticator {

    public MyAuthenticator(Context context) {
        super(context);
    }

    @Override
    public Bundle editProperties(AccountAuthenticatorResponse r, String s) {
        return null;
    }

    @Override
    public Bundle addAccount(AccountAuthenticatorResponse r, String s, String s2, String[] strings,
                             Bundle bundle) throws NetworkErrorException {
        final Bundle result = new Bundle();
        result.putString(AccountManager.KEY_ACCOUNT_NAME, "Test Account");
        result.putString(AccountManager.KEY_ACCOUNT_TYPE, s);
        LogUtil.debug("");
        return result;
    }
    ...
}

Estos son los datos que devuelve el sistema para obtener la información del token obtenida por la aplicación correspondiente, y no serán analizados en detalle.

También hay actividades relacionadas y métodos relacionados que no se presentarán uno por uno.

Para comprender el proceso y la relación de devolución de llamada, puede leer este artículo:
https://blog.csdn.net/wy3243996/article/details/52411139

otro

AccountManager no se ha utilizado en profundidad, por lo que no lo presentaré en detalle aquí.

La administración de la cuenta requiere que la propia aplicación inicie sesión. Después de que el sistema haga clic en "Agregar cuenta" y
seleccione la aplicación correspondiente, salta a la interfaz de inicio de sesión de la aplicación.

En Android 9.0, descubrí que la aplicación Firefox está en la lista "Agregar cuenta",
pero no veo la aplicación Firefox en la lista "Agregar cuenta" de Android 11.0, ¿cuál es el problema?

La investigación encontró que el nuevo firefox de la versión de Android 11 no realiza administración de cuentas.

Luego, cómo verificar la administración de la cuenta en el apk:
método (1) use la herramienta para descomprimir el apk, vea el archivo AndroidManifest.xml
método (2) arrastre el apk a Android Studio para ver el archivo AndroidManifest.xml

Buscar: "Auténtica",

Compruebe si existe el siguiente servicio



   <service
            android:name=".AuthenticationService"
            android:exported="true">
            <intent-filter>
                <action
                    android:name="android.accounts.AccountAuthenticator" />
            </intent-filter>
            <meta-data
                android:name="android.accounts.AccountAuthenticator"
                android:resource="@xml/authenticator" />
        </service>

Si lo ve, significa que la aplicación admite la función de sincronización de cuentas, si no, significa que no se ha adaptado para admitir.

Supongo que te gusta

Origin blog.csdn.net/wenzhi20102321/article/details/126631128
Recomendado
Clasificación