Saltar al contenido

Apple login en Android

GitHub

El login de Apple en Android es poco ortodoxo. Apple no ofrece soporte oficial para Sign in with Apple en Android, así que la solución es un poco chapucera.

Android actualmente usa Chrome Tabs para mostrar un sitio web OAuth2. Este enfoque tiene estos retos:

  • Configuración complicada
  • Requiere un backend

Usaré un diagrama para explicar el flujo en Android:

Ahora que conoces los retos y el flujo, empecemos con la configuración.

  1. Inicia sesión en el Portal de Apple Developer.

  2. Haz clic en Identifiers.

    Sección Identifiers del Apple Developer Portal

    Deberías ver una pantalla como esta:

    Pantalla Identifiers del Apple Developer Portal
    1. Asegúrate de que este campo diga App IDs
    2. Asegúrate de encontrar tu App ID.
  3. Asegúrate de que la Sign in with Apple capability esté habilitada para tu app

    1. Haz clic en tu app Selecciona tu app de la lista
    2. Asegúrate de que la Sign in with Apple capability esté habilitada Casilla de Sign in with Apple capability habilitada
    3. Si no está habilitada, actívala.
  4. Volver a la lista completa All Identifiers

    Botón de navegación de todos los identificadores
  5. Haz clic en App Ids y ve a Services IDs

    Navegación a la sección de Service IDs
  6. Crear un nuevo identificador

    1. Haz clic en el botón +

      Botón para añadir nuevo Service ID
    2. Selecciona Servcice IDs y haz clic en Continue

      Seleccionando la opción Service IDs
    3. Ingresa descripción e identificadores y haz clic Continuie.

      Ingresando los detalles del Service ID
    4. Verifica los detalles y haz clic en Register

      Confirmación del registro del service ID
    5. Haz clic en el service recién creado

      Seleccionando el service ID recién creado
    6. Habilita el Sign in with Apple opción

      Habilitar Sign in with Apple para el service ID
    7. Configurar el Sign In with Apple

      Configurar el botón de Sign in with Apple
    8. Asegúrate de que el Primary App ID esté configurado con el App ID del paso anterior

      Configuración del desplegable Primary App ID
    9. Agrega el dominio donde vas a alojar tu backend.

      Configuración de domain y return URL
    10. Confirma los datos y haz clic en Done

      Confirmando la configuración de domain y return URL
    11. Haz clic en Continue

      Botón Continuar para la configuración del servicio
    12. Haz clic en Save

      Botón Guardar para la configuración del servicio
  1. Volver a la lista completa All Identifiers

    Botón de navegación de todos los identificadores
  2. Haz clic en Keys

    Sección Keys de Apple Developer Portal
  3. Haz clic en el icono de más

    Botón para añadir nueva clave
  4. Ponle un nombre a tu clave

    Ingresando el nombre de la clave
  5. Selecciona Sign in with Apple y haz clic en Configure

    Habilitar y configurar Sign in with Apple para la clave
  6. Selecciona el App ID principal y presiona Save

    Seleccionando el App ID principal para la clave
  7. Haz clic en Continue

    Botón Continuar para configurar la clave
  8. Haz clic en Register

    Botón Registrar para crear la clave
  9. Copia el Key ID y descarga la clave.

    Pantalla de Key ID y botón de descarga
  10. Busca la clave descargada y guárdala en la carpeta del backend.

    Archivo de clave descargado

Para poder usar Login with Apple en Android, necesitas obtener el Team ID. Se usará en el backend.

  1. Ve a este sitio web y desplázate hacia abajo

  2. Busca el Team ID

    Ubicación del Team ID en la cuenta de desarrollador

Como viste en el diagrama, el backend realiza un paso llamado Redirect back to the app. Esto requiere cambios manuales en tu app.

  1. Modifica el AndroidManifest.xml
    1. Abre el archivo, usaré AndroidStudio

      el archivo AndroidManifest.xml en Android Studio
    2. Busca el MainActivity y añade el siguiente Intent filter

      Intent filter code para añadir en MainActivity
      <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="capgo-demo-app" android:host="path" />
      </intent-filter>
  2. Modifica el MainActivity
    1. Por favor, abre la MainActivity

      Archivo MainActivity.java en Android Studio
    2. Añade el siguiente code:

      Code que añadir a MainActivity para gestionar deep links
      @Override
      protected void onNewIntent(Intent intent) {
      String action = intent.getAction();
      Uri data = intent.getData();
      if (Intent.ACTION_VIEW.equals(action) && data != null) {
      PluginHandle pluginHandle = getBridge().getPlugin("SocialLogin");
      if (pluginHandle == null) {
      Log.i("Apple Login Intent", "SocialLogin login handle is null");
      return;
      }
      Plugin plugin = pluginHandle.getInstance();
      if (!(plugin instanceof SocialLoginPlugin)) {
      Log.i("Apple Login Intent", "SocialLogin plugin instance is not SocialLoginPlugin");
      return;
      }
      ((SocialLoginPlugin) plugin).handleAppleLoginIntent(intent);
      return;
      }
      super.onNewIntent(intent);
      }

Se requiere un backend para Android, pero configurarlo también afectará a iOS. Se incluye un ejemplo de backend aquí

Este ejemplo incluye lo siguiente:

  • Una base de datos JSON sencilla
  • Una forma de solicitar el JWT a los servidores de Apple
  • Una verificación de JWT sencilla

Teniendo en cuenta lo anterior, así es como quedaría la env la sección se vería así:

  • ANDROID_SERVICE_ID = ID de servicio
  • IOS_SERVICE_ID = App ID
env: {
PRIVATE_KEY_FILE: "AuthKey_U93M8LBQK3.p8",
KEY_ID: "U93M8LBQK3",
TEAM_ID: "UVTJ336J2D",
ANDROID_SERVICE_ID: "ee.forgr.io.ionic.starter.service2",
IOS_SERVICE_ID: "me.wcaleniewolny.test.ionic.vue",
PORT: 3000,
REDIRECT_URI: "https://xyz.wcaleniewolny.me/login/callback",
BASE_REDIRECT_URL: "capgo-demo-app://path"
}

El uso de la login la función no cambia, es igual que en iOS. Por favor, consulta esa sección para más información. SIN EMBARGO,, initialize el método cambia un poco.

await SocialLogin.initialize({
apple: {
clientId: 'ee.forgr.io.ionic.starter.service2',
redirectUrl: 'https://appleloginvps.wcaleniewolny.me/login/callback'
}
})
  1. Si aún no tienes un App ID, haz clic en el botón más

    Botón para añadir nuevo identificador
  2. Selecciona App IDs y haz clic en continuar

    Seleccionando el tipo de App ID
  3. Haz clic en tipo App y haz clic en Continue

    Seleccionando el tipo de App
  4. Introduce la descripción y el ID de la app

    Ingresando la descripción de la app y bundle ID
  5. Activar Sign with Apple capacidad

    Habilitando la capacidad de Sign in with Apple
  6. Haz clic Continue

    Botón Continuar para registrar la app
  7. Confirma los detalles y haz clic Register

    Confirmando detalles del registro de la app

Si estás usando Apple login en Android para planificar los flujos de autenticación y de cuenta, conéctalo con Uso de @capgo/capacitor-social-login para la capacidad nativa en el uso de @capgo/capacitor-social-login, @capgo/capacitor-social-login para los detalles de implementación en @capgo/capacitor-social-login, @capgo/capacitor-passkey para el detalle de implementación en @capgo/capacitor-passkey, @capgo/capacitor-native-biometric para el detalle de implementación en @capgo/capacitor-native-biometric, y Autenticación de dos factores para el detalle de implementación en la autenticación de dos factores.