Vai al contenuto

Apple login su Android

GitHub

Il login con Apple su Android è poco pulito. Apple non offre supporto ufficiale per Sign in with Apple su Android, quindi la soluzione è un po' un workaround.

Attualmente Android usa le Chrome tabs per visualizzare un sito OAuth2. Questo approccio presenta queste sfide:

  • Configurazione difficile
  • È necessario un backend

Uso un diagramma per spiegare il flusso su Android:

Ora che conosci le sfide e il flusso di lavoro, iniziamo la configurazione.

  1. Accedi con Portale Apple Developer.

  2. Clicca su Identifiers.

    Sezione Identifiers del Apple Developer Portal

    Dovresti vedere una schermata simile a questa:

    Schermata Identifiers del Apple Developer Portal
    1. Assicurati che questo campo riporti App IDs
    2. Verifica di poter trovare il tuo App ID.
  3. Assicurati che la Sign in with Apple capability sia abilitata per la tua app

    1. Clicca sulla tua app Seleziona la tua app dall'elenco
    2. Verifica che la Sign in with Apple capability sia abilitata Checkbox della capability Sign in with Apple abilitata
    3. Se non è abilitata, attivala.
  4. Torna all'elenco All Identifiers

    Pulsante Tutti gli identificatori
  5. Clicca su App Ids e vai su Services IDs

    Navigazione verso la sezione Service IDs
  6. Creare un nuovo identifier

    1. Clicca sul pulsante +

      Pulsante Add new service ID
    2. Seleziona Servcice IDs e cliccare su Continue

      Selezionare l'opzione Service IDs
    3. Inserire descrizione e identifier e cliccare Continuie.

      Inserimento dettagli service ID
    4. Verifica i dettagli e clicca Register

      Conferma la registrazione del service ID
    5. Clicca sul nuovo service creato

      Seleziona il nuovo service ID
    6. Abilita l'opzione Sign in with Apple opzione

      Abilita Sign in with Apple per il service ID
    7. Configura il Sign In with Apple

      Configura il pulsante per Sign in with Apple
    8. Verifica che la Primary App ID è impostato sull'App ID configurato nel passaggio precedente

      Imposta il menu a tendina Primary App ID
    9. Aggiungi il dominio su cui ospiterai il tuo backend.

      Configurazione dei campi domain e return URL
    10. Conferma i dati e clicca su Done

      Conferma della configurazione di domain e return URL
    11. Clicca su Continue

      Pulsante Continua per la configurazione del servizio
    12. Clicca su Save

      Pulsante Salva per la configurazione del servizio
  1. Torna all'elenco All Identifiers

    Pulsante Tutti gli identificatori
  2. Clicca su Keys

    Sezione Keys nel portale Apple Developer
  3. Clicca sull'icona plus

    Pulsante Aggiungi chiave
  4. Dai un nome alla chiave

    Inserimento del nome della chiave
  5. Seleziona Sign in with Apple e clicca su Configure

    Abilitazione e configurazione di Sign in with Apple per la chiave
  6. Seleziona l'App ID principale e premi Save

    Selezione dell'App ID principale per la chiave
  7. Clicca su Continue

    Pulsante Continua per la configurazione della chiave
  8. Clicca su Register

    Pulsante Registra per la creazione della chiave
  9. Copia il Key ID e scarica la chiave.

    Schermata Key ID e pulsante di download
  10. Trova la chiave scaricata e salvala nella cartella del backend.

    File della chiave scaricato

Per poter utilizzare Login with Apple su Android, devi ottenere il Team ID. Verrà utilizzato nel backend.

  1. Vai su questo sito web e scorri verso il basso

  2. Trova il Team ID

    Posizione del Team ID nell'account developer

Configurazione del redirect dell'app

Sezione: “Configurazione dell'app redirect”

Come visto nel diagramma, il backend esegue un passaggio chiamato Redirect back to the app. Questo richiede modifiche manuali alla tua app.

  1. Modifica il AndroidManifest.xml
    1. Apri il file, userò AndroidStudio

      il file AndroidManifest.xml in Android Studio
    2. Trova il MainActivity e aggiungi il seguente Intent filter

      Intent filter code da aggiungere in 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 il MainActivity
    1. Per favore, apri il MainActivity

      File MainActivity.java in Android Studio
    2. Aggiungi il seguente code:

      Code da aggiungere a MainActivity per gestire i deep link
      @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);
      }

Il backend è richiesto per Android, ma la sua configurazione influirà anche su iOS. Viene fornito un esempio di backend qui

Questo esempio include quanto segue:

  • Un semplice database JSON
  • Un metodo per richiedere il JWT dai server Apple
  • Una semplice verifica del JWT

Considerando tutto quello che ho detto in questo tutorial, ecco come env dovrebbe apparire la sezione:

  • ANDROID_SERVICE_ID = Service ID
  • 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"
}

The usage of the login function non cambia, è identico a quello per iOS. Consulta quella sezione per maggiori dettagli. TUTTAVIA, il initialize il metodo cambia leggermente.

await SocialLogin.initialize({
apple: {
clientId: 'ee.forgr.io.ionic.starter.service2',
redirectUrl: 'https://appleloginvps.wcaleniewolny.me/login/callback'
}
})
  1. Se non hai ancora un App ID, clicca sul pulsante plus

    Pulsante per aggiungere un nuovo identifier
  2. Seleziona App IDs e clicca su continue

    Selezione del tipo di App ID
  3. Clicca sul tipo App e clicca Continue

    Selezione del tipo di App
  4. Inserisci la descrizione e l'app ID

    Inserimento descrizione app e bundle ID
  5. Abilita Sign with Apple capability

    Abilitazione capability Sign in with Apple
  6. Clicca su Continue

    Pulsante Continue per la registrazione app
  7. Conferma i dettagli e clicca Register

    Conferma dei dettagli di registrazione app

Se stai usando Apple login su Android per pianificare i flussi di autenticazione e account, collegandolo a Utilizzo di @capgo/capacitor-social-login per la funzionalità nativa in Utilizzo di @capgo/capacitor-social-login, @capgo/capacitor-social-login per i dettagli di implementazione in @capgo/capacitor-social-login, @capgo/capacitor-passkey per i dettagli di implementazione in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric per i dettagli di implementazione in @capgo/capacitor-native-biometric, e Autenticazione a due fattori per i dettagli sull'implementazione dell'autenticazione a due fattori.