Compatibile con Xcode 8

Google Social Sign In con il linguaggio Swift

ENTRA NEL NOSTRO GRUPPO FACEBOOK

Abbiamo già visto insieme le potenzialità del Social Login, e abbiamo già analizzato nel precedente tutorial come sfruttare il Social Login di Facebook per migliorare la user experience dei nostri utenti.

Oggi voglio fare un passo avanti in questo lungo percorso. Ti spiegherò come integrare il Google Social Sign In con il linguaggio Swift.

É innegabile come nel campo Social Google, come Facebook, può essere un alleato molto potente. Ti accorgerai che tra i tuoi utenti, molto pochi sono quelli che non vantano almeno un account Gmail. Ed è per questo motivo che quello che vogliamo ottenere è poter utilizzare questa gran massa di socialità per identificare in modo semplice, sicuro ed efficace i nostri utenti.

Per poter seguire il tutorial sarà necessario un po’ di conoscenza del linguaggio Objective-C. Perché? Il motivo è che Google non ha ancora rilasciato delle SDK perfettamente integrate con il linguaggio Swift ma ha ancora bisogno di Objective-C (d’altra parte è pur sempre Google).

Probabilmente in futuro questo cambierà, ma nel frattempo ne approfitto per farti imparare qualcosa di utile. Infatti, ti insegnerò a prepare il tuo progetto Swift per accogliere una qualsiasi porzione di codice Objective-C.

Quindi, quello che imparerai in questo tutorial sarà:

  1. Implementare il Google Social Sign In con il linguaggio Swift.
  2. Utilizzare un codice Objective C all’interno di un progetto scritto con il linguaggio Swift.

Pronto? Cominciamo!

Utilizzare Objective C in un progetto con linguaggio Swift

L’interoperabilità è -cito testuale- la capacità di interfacciarsi tra Swift e Obj-C in entrambe le direzioni, consentendo di accedere e utilizzare pezzi di codice scritto in un linguaggio in un file dell’altro linguaggio.

Grazie a questa funzionalità potrai importare, in un progetto scritto in un linguaggio, API già pronte e scritte per l’altro. E’ molto utile per poter replicare delle parti di codice già sviluppate in precedenza senza dover effettuare completamente la traduzione.

Do per scontato che tu sappia già creare un progetto Single View Application: questo tutorial è strutturato per essere molto semplice e adatto a tutti coloro che hanno già un minimo di dimestichezza con lo sviluppo di applicazioni per iOS. Se dovessi rientrare in questa categoria puoi seguire il corso di sviluppo applicazioni iOS con il linguaggio Swift.

Andiamo avanti.

Dopo aver creato un nuovo progetto in Swift, sarà necessario creare un file header. Un Header è un particolare file in cui potrai inserire il tuo codice Objective C. Clicca su File\New\File, seleziona CocoaTouch Class, modifica il linguaggio da Swift a Objective-C, dai un nome alla classe (nel caso in esame è un normalissimo NSObject, il file lo ho chiamato “Social”), e clicca crea.

A questo punto il progetto si accorgerà che stai integrando una classe scritta in Obj-C e ti manderà un avviso a schermo, chiedendoti l’autorizzazione alla creazione di un bridging header in Objective-C

bridging-header-alert

Questo passaggio è fondamentale, clicca su YES, vedrai creati tre nuovi file, che analizzeremo a breve.

Prima di iniziare l’analisi, una brevissima nozione di Objective-C: in Obj-C i momenti di interfaccia e implementazione di una classe sono distinti, tanto che, per ogni classe, vengono creati due file con estensioni distinte: il file con estensione.h contiene l’intestazione della classe, ed è anche definito header, mentre il file con l’implementazione è il file .m (Nota di colore, dal libro Learn Objective-C on the Mac: mentre .h sta appunto per Header, .m è un estensione più o meno casuale, secondo Brad Cox, l’inventore di Objective-C, “semplicemente perchè .c e .o erano già utilizzate ).

Il concetto di header file dovrebbe essere già noto a chi conosce un po’ di C. Comunque, per chi fosse completamente a digiuno, è il file di intestazione, che contiene tutte le funzioni di una libreria che verranno utilizzate nei vari file, evitando di doverli dichiarare all’interno di ogni file .c  E’ un concetto superato nel linguaggio Swift, ma dovendo implementare nel nostro esempio del codice Obj-C sarà utile.

  • Il primo file che analizziamo è appunto il Bridging-Header:
    Questo file è responsabile appunto della connessione tra Objective-C e Swift. All’interno del Bridging-Header file andremo ad importare le librerie di cui avremo bisogno. Nel caso specifico andremo ad importare la classe appena creata:
  •  Il secondo file è Social.h è l’header della classe che abbiamo creato:
    Abbiamo appena dichiarato la funzione run, che ora andremo ad implementare sul file .m.
  • Eccoci al terzo file: Social.m, dove appunto andremo a fare l’implementazione di run:

Fatto?

Bene, se proviamo il nostro primo Build & Run noterai l’output con la scritta “Questa è una classe implementata in Objective-C” nella console.

NSLog, avrai già capito, è l’analogo del print in Swift.

Ora sei pronto per inglobare nel tuo progetto Swift qualsiasi classe già esistente in Objective-C, e sfruttare la classe così implementata per lavorare in Objective-C. Una volta compilata la classe in Objective-C, in Swift non avrai bisogno di niente, potrai sfruttare la classe come una qualsiasi classe, senza necessità di import.

Noterai presto che le librerie in Objective-C sono numerosissime, molto più (per ora!) di quelle in Swift, quindi con un pò di pratica sarai in grado di sfruttare questo codice già esistente come base di partenza per i tuoi futuri progetti.

condividi xcoding

Ho impiegato un po’ di tempo a scrivere questo tutorial, sarei davvero felice se contribuissi al mio progetto semplicemente mettendo un mi piace o follow alle mie pagine

[addtoany]

Grazie davvero :-)

Ma, stai tranquillo, non ti lascio così! Quella che hai visto finora è solo teoria. Adesso dobbiamo mettere in pratica quello che hai appena imparato..

E per farlo niente di meglio che chiedere una mano alla concorrenza!

Il Google Sign In con Swift

Ebbene sì, in questa seconda parte di tutorial il nostro alleato è Google! E’ vero che tra Apple e Google è una continua guerra, ma è anche vero che ognuno cerca di sfruttare le enormi potenzialità del concorrente.

Cosa tocca a noi? Noi che siamo nel mezzo, proviamo a raccoglierne i frutti!

Iniziamo col dire che il sito di supporto di Google agli sviluppatori è veramente ben fatto. Se avrai difficoltà di qualsiasi genere non esitare a consultarlo. Unica pecca? La maggior parte è in inglese, ma fortunatamente puoi trovare molte parti in italiano!

Per integrare i framework di Google, per il Social Sign In, utilizzeremo uno strumento chiamato cocoaPods. Questo non è altro che un programma che ti permette, utilizzando la consolle di sistema, di scaricare e importare, direttamente nel tuo progetto Xcode, i file del framework in questione.

Vediamo insieme come utilizzarlo!

CocoaPods

Google suggerisce di utilizzare CocoaPods per integrare i suoi servizi sulla tua applicazione iOS. Puoi anche farne a meno, dato che puoi scaricare manualmente i suoi framework, ma dai comunque un’occhiata a questo servizio. Potrà rivelarsi molto molto utile anche in altre situazioni.

Io ti consiglio di cominciare ad utilizzarlo. Qui trovi un nostro tutorial più approfondito: Come utilizzare CocoaPods per i tuoi progetti iOS.

Cominciamo con l’installazione di CocoaPods (se hai già CocaPods installato puoi saltare questa fase).

  1. Accedi al terminale di sistema, ti basta cercare Teminale tra le applicazioni, e scrivi:
    Dopo averti richiesto la password di amministratore, il tuo Mac provvederà all’installazione. Non preoccuparti se ci vorrà qualche minuto, una volta completata l’operazione il terminale tornerà operativo e pronto alle tue istruzioni.
  2. Non facciamolo attendere. Da terminale recati nella cartella dove è conservato il tuo progetto progetto xCode. Personalmente ho una cartella sulla Scrivania denominata ProgettiXCODE, la mia sottocartella è SocialXCoding, pertanto scriverò:
  3. Se il tuo terminale è fermo nella cartella del tuo progetto, scrivi:
    Questo creerà un file, denominato Podfile, che conterrà i pod (cioè i framework) da aggiungere al tuo progetto.
  4. Per aggiungere il framework per il Google Social Sign In nel tuo Podfile, scrivi:
    Puoi scrivere questo comando anche accedendo direttamente al Podfile dal Finder di sistema.
  5. L’ultimo comando da eseguire è l’installazione del pod:

Quest’ultimo passaggio, in particolare, ti permetterà di configurare CocoaPods per il tuo progetto. Noterai che, al termine dell’operazione, nella cartella del tuo progetto sarà stato creato un nuovo file SocialXCoding.xcworkspace, d’ora in poi per accedere al progetto usa sempre questo file.

Cliccaci sopra ed entra finalmente su Xcode.

Configurare i Google Services per la tua app iOS

Sostanzialmente, come hai già fatto con il Facebook Login, devi dichiarare anche a Google l’esistenza della tua app comunicando i dati della tua applicazione.

Questa è la pagina di Google da dove iniziare a creare la tua app. Una volta che sarai entrato dovrai selezionare iOS come sistema utilizzato. Poi arriverai alla prima pagina di setting del progetto.

I dati richiesti sono:

  • Un nome (come per Facebook non è necessario che il nome app sia identico)
  • Il bundleID (questo invece DEVE essere identico) e lo puoi prendere dal tuo progetto Xcode.

Registrazione App su GoogleNella schermata successiva, clicca su Enabled Sign-In, per abilitare la tua app alla login tramite le credenziali Google. Ci sono anche una serie di servizi aggiuntivi che puoi abilitare e sfruttare (sono O.T. in questo tutorial, ma interessantissimi, prenditi 10 minuti per dare un’occhiata!)

Ti sei preso il tuo tempo?

Bene! Non sottovalutare mai le risorse che puoi trovare, se non ti sono utili ora lo potranno essere in futuro, perciò prenditi un appunto.

Completata questa fase, passiamo avanti. Clicca sul pulsante Continue to Generate Configuration File:

Google Sign-In

Nella schermata successiva potrai scaricare il file GoogleService-Info.plist che dovrai incollare nel tuo progetto, semplicemente con un Drag&Drop all’interno della folder.

Vai su Xcode ed apri la schermata di configurazione del progetto. Spostati nella Tab Info. Troverai in fondo una voce URL Types, espandila, ti comprarirà questo:

Google003

Nella voce URL Schemes inserisci le informazioni riguardanti la chiave REVERSED_CLIENT_ID, che trovi nel file GoogleService-Info.plist, che hai appena importato.

Crea una seconda chiave, premendo il tasto +, inserisci nel campo URL Schemes il Bundle ID della tua app.

Questi sono i passaggi che devi eseguire per mettere in comunicazione la tua applicazione iOS con il linguaggio swift ed i Google Services. Tutte le informazioni che genererà la tua applicazione, che riguardano i google services, verranno salvati in uno spazio ad hoc sul tuo account developer google.

AppDelegate e connessione a Google

Dentro il bridging-header che hai già creato, andiamo ad importare la libreria per il Google Sign-In:

Vai ora sull’AppDelegate.swift, e implementa il protocollo GIDSignInDelegate all’interno della classe AppDelegate:

N.B.: Non preoccuparti se ti compare un errore di compilazione, è legato ad alcuni metodi che il nuovo protocollo necessità… lo risolviamo a strettissimo giro.

modifica il metodo application:didFinishLaunchingWithOptions:

Implementiamo ora il metodo application:openURL:

A questo punto implementiamo il protocollo che gestisce il Sign In:
ed infine:
Se hai avuto dei problemi a seguire questa parte del tutorial, forse è il caso che dai una rinfrescata al linguaggio Swift ed ai principi dello sviluppo di un’applicazione iOS.

Il ViewController e la visualizzazione della pagina di Google Sign In

implementiamo innanzitutto il protocollo GIDSignInUIDelegate nella classe del ViewController.

Ora, nella func DidViewLoad inserisci il delegate:

e infine, creiamo il pulsante di login: per far questo creiamo innanzitutto una view all’interno del ViewController, centriamola all’interno della View (se non sai come fare consulta i tutorial sull’auto layout).

A questo punto seleziona la View appena creata, accedi all’Identity Inspector e inserisci la Custom Class GIDSigninButton. Con questa operazione stai andando ad associare alla View creata una classe specifica e identificando la stessa come SignIn Button, il bottone cioè per la creazione del collegamento.

Per completare l’operazione non resta che creare l’IBOutlet che unisca l’interfaccia al codice:

Infine inseriamo le due funzioni che gestiscano la presentazione e la chiusura della schermata di login tramite Google:

Questa funzione infine serve a gestire gli eventi successivi al Google Sign-in:

Essendo fuori scopo al tutorial di oggi l’ho lasciato vuoto, ma puoi ad esempio gestire un Segue verso una nuova schermata. A questo punto il nostro codice è pronto, facciamo finalmente il nostro Build&Run e scopriamo finalmente il nostro bottone.

Una volta cliccato sul bottone dovresti vedere la schermata di Google Sign-In:

Google Social Sign In con il linguaggio Swift

Considerazioni

Come tutti i sistemi di login e signup, anche il Google Social Sign In con il linguaggio Swift va usato con parsimonia. Valuta bene se la tua applicazione ha realmente bisogno di un sistema di login integrato o social e poi fai la tua scelta.

Non mi resta che indirizzarti ai tutorial consigliati:

Buona programmazione!

Changelog:

  • 29/09/2016 – Aggiunto il changelog. Modifiche al testo del tutorial e compatibilità dei codici con Xcode 8 e swift 3.

Start typing and press Enter to search

Scambiare dati tra iPhone e Apple Watch con SwiftLe Stack View in Xcode. Un nuovo modo di concepire le interfacce