Vai al contenuto

Login Apple su Android

Il login Apple su Android è complicato. Apple non ha supporto ufficiale per Sign in with Apple su Android, quindi la soluzione è leggermente hacky.

Android attualmente utilizza schede Chrome per visualizzare un sito web OAuth2. Questo approccio presenta le seguenti sfide:

  • Configurazione difficile
  • È richiesto un backend

Lascia che usi un diagramma per spiegare il flusso su Android:

        flowchart TD
            A("await SocialLogin.login()") -->|Handled in the plugin|B(Generate the login URL)
            B --> |Pass the link| C(Open the Chrome browser)
            C --> D(Wait for the user to login)
            D --> |Apple redirects to your backend|E(Handle the data returned from Apple)
            E --> F(Redirect back to the app)
            F --> G(Return to JS)
        

Ora che sei consapevole delle sfide e del flusso, iniziamo la configurazione.

  1. Accedi al Portale Sviluppatori Apple.

  2. Clicca su Identifiers.

    Sezione Identifiers del Portale Sviluppatori Apple

    Dovresti vedere una schermata simile a questa:

    Schermata Identifiers del Portale Sviluppatori Apple
    1. Assicurati che questo campo dica App IDs
    2. Assicurati di poter trovare il tuo App ID.
  3. Assicurati che la capacità Sign in with Apple sia abilitata per la tua app

    1. Clicca sulla tua app Selezione della tua app dall'elenco
    2. Assicurati che la capacità Sign in with Apple sia abilitata Casella di controllo capacità Sign in with Apple abilitata
    3. Se non è abilitata, abilitala.
  4. Torna a All Identifiers

    Pulsante di navigazione All Identifiers
  5. Clicca su App Ids e vai a Services IDs

    Navigazione alla sezione Services IDs
  6. Crea un nuovo identificatore

    1. Clicca sul pulsante più

      Pulsante aggiungi nuovo service ID
    2. Seleziona Servcice IDs e clicca Continue

      Selezione dell'opzione Service IDs
    3. Inserisci una descrizione e un identificatore e clicca Continuie.

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

      Conferma della registrazione del service ID
    5. Clicca sul servizio appena creato

      Selezione del service ID appena creato
    6. Abilita l’opzione Sign in with Apple

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

      Pulsante Configure per Sign in with Apple
    8. Assicurati che il Primary App ID sia impostato sull’App ID configurato nel passaggio precedente

      Menu a discesa impostazione Primary App ID
    9. Aggiungi il dominio su cui ospiterai il tuo backend.

      Campi impostazione dominio e URL di ritorno
    10. Conferma i dati e clicca Done

      Conferma della configurazione dominio e URL di ritorno
    11. Clicca su Continue

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

      Pulsante Save per la configurazione del servizio
  1. Torna a All Identifiers

    Pulsante di navigazione All Identifiers
  2. Clicca su Keys

    Sezione Keys nel Portale Sviluppatori Apple
  3. Clicca sull’icona più

    Pulsante aggiungi nuova chiave
  4. Dai un nome alla tua chiave

    Campo inserimento nome chiave
  5. Seleziona Sign in with Apple e clicca Configure

    Abilitazione e configurazione di Sign in with Apple per la chiave
  6. Seleziona il primary App ID e premi Save

    Selezione del primary App ID per la chiave
  7. Clicca su Continue

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

    Pulsante Register per la creazione della chiave
  9. Copia l’ID della chiave e scarica la chiave.

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

    File chiave scaricato

Per utilizzare Login with Apple su Android, devi ottenere il Team ID. Sarà 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 sviluppatore

Come hai 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

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

      Codice intent filter 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 la MainActivity
    1. Apri la MainActivity

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

      Codice da aggiungere a MainActivity per gestire 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);
      }

È richiesto un backend per Android, ma configurare un backend influenzerà anche iOS. Un backend di esempio è fornito qui

Questo esempio fornisce quanto segue:

  • Un semplice database JSON
  • Un modo per richiedere il JWT dai server di Apple
  • Una semplice verifica JWT

Dato tutto ciò che ho detto in questo tutorial, ecco come apparirebbe la sezione env:

  • 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"
}

L’utilizzo della funzione login non cambia, è lo stesso di iOS. Dai un’occhiata a quella sezione per maggiori informazioni. TUTTAVIA, il metodo initialize cambia un po’.

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

    Pulsante più aggiungi nuovo identificatore
  2. Seleziona App IDs e clicca continue

    Selezione del tipo App IDs
  3. Clicca sul tipo App e clicca Continue

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

    Inserimento della descrizione app e bundle ID
  5. Abilita la capacità Sign with Apple

    Abilitazione della capacità Sign in with Apple
  6. Clicca Continue

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

    Conferma dei dettagli di registrazione dell'app