Facebook Login su iOS

14 febbraio 2018

In questa lezione verrà mostrato come aggiungere una schermata di login che sfrutti il protocollo OAuth e il social login tramite Facebook, a partire da un progetto appena creato, come illustrato nella precedente lezione.

Configurazione del PodFile

Per iniziare l’integrazione, il primo passo da compiere è l’aggiunta della SDK di Facebook attraverso la modifica del Podfile inizializzato in precedenza.

Apriamo il Podfile con un qualsiasi editor di testo ed aggiungiamo le SDK di Facebook nell’apposita sezione come segue:

target 'SocialLoginHMTLit' do
	use_frameworks!

	# Pods for SocialLoginHMTLit
	pod 'FBSDKCoreKit'
	pod 'FBSDKShareKit'
	pod 'FBSDKLoginKit'

end

L’aggiunta di queste tre SDK offre una completa integrazione della piattaforma nella nostra applicazione, permettendo non solo di effettuare l’autenticazione ma anche la condivisione di stati ed elementi dall’applicazione su Facebook.

Una volta salvato e chiuso il file, da terminale eseguiamo il comando

pod install

per effettuare l’installazione delle librerie nel nostro progetto e per la creazione del workspace da usare al posto del progetto base appena creato. In caso di corretta installazione, il terminale mostrerà un output simile al seguente:

Figura 46. Output del comando pod install (click per ingrandire)

Output del comando pod install

Ora che le librerie sono state correttamente integrate nel progetto, apriamo il progetto SocialLoginHMTLit.xcworkspace dove noteremo la presenza della cartella Pods.

Figura 47. Organizzazione della cartella Pods visibile nel progetto xcworkspace (click per ingrandire)

Organizzazione della cartella Pods visibile nel progetto xcworkspace

Siamo finalmente pronti per integrare il login tramite Facebook.

Modifica del file Info.plist

Per permettere all’applicazione di sfruttare il meccanismo di autenticazione di Facebook, è necessario modificare il file Info.plist aggiungendo le informazioni relative all’applicazione ottenute durante la fase di registrazione sulla piattaforma. In particolare, questa informazione è presente al quinto step (Configurazione dl file info.plist) del processo di registrazione illustrato nella lezione sulla registrazione dell’app su Facebook.

Apriamo il file Info.plist come codice sorgente (tasto destro-> apri come -> codice sorgente) e integrare le informazioni recuperate all’inizio della sezione <dict> come segue:

<dict>
	<key>CFBundleURLTypes</key>
	<array>
		<dict>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>fb118446748837203</string>
			</array>
		</dict>
	</array>
	<key>FacebookAppID</key>
	<string>118446748837203</string>
	<key>FacebookDisplayName</key>
	<string>SocialLoginHTMLit</string>
…
</dict>

Per permettere all’applicazione di usare una delle finestre di dialogo di Facebook, come l’accesso o la condivisione, è necessario aggiungere nel dizionario quanto segue:

<dict>
...
	<key>LSApplicationQueriesSchemes</key>
	<array>
		<string>fbapi</string>
		<string>fb-messenger-share-api</string>
		<string>fbauth2</string>
		<string>fbshareextension</string>
	</array>
…
</dict>

Salviamo e chiudiamo quindi il file.

Modifica dell’AppDelegate

Per inizializzare l’SDK di Facebook all’avvio dell’applicazione, bisogna importare nell’AppDelegate la FBSDKCoreKit come segue.

Swift

import FBSDKCoreKit

Objective-C

#import <FBSDKCoreKit/FBSDKCoreKit.h>

Successivamente, all’interno della funzione application, richiamiamo il metodo d’istanza application:didFinishLaunchingWithOptions di FBSDKApplicationDelegate come segue:

Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
	
	FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
	
	return true
}

Objective-C

- (BOOL)application:(UIApplication *)application 
	didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  
  [[FBSDKApplicationDelegate sharedInstance] application:application
	didFinishLaunchingWithOptions:launchOptions];

  return YES;
}

In questo modo, è possibile utilizzare correttamente la SDK di Facebook.

Infine, per interagire con l’applicazione nativa di Facebook (o con la sua versione web tramite Safari) e gestirne correttamente le risposte è necessario implementare il metodo application:openURL:options come segue:

Swift

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
	let handled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
	
	return handled
}

Objective-C

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

  BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
	openURL:url
	sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
	annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
  ];

  return handled;
}

Integrazione del pulsante di login

Ultimo passo da compiere è l’integrazione del bottone di login all’interno della schermata da mostrare all’utente. Ciò permetterà all’utente di effettuare l’autenticazione tramite Facebook.

Per farlo, apriamo il file ViewController e importiamo la libreria FBSDKLoginKit:

Swift

import FBSDKLoginKit

Objective-C

#import <FBSDKLoginKit/FBSDKLoginKit.h>

Successivamente, modificare la funzione viewDidLoad per effettuare la creazione del bottone:

Swift

override func viewDidLoad() {
	super.viewDidLoad()
	let loginButton = FBSDKLoginButton()
	loginButton.delegate = self
	loginButton.center = view.center
	view.addSubview(loginButton)          
}

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
  loginButton.center = self.view.center;
  [self.view addSubview:loginButton];
}

Per comprendere quando il bottone è stato utilizzato per il login (e, come vedremo, per il logout) implementiamo il FBSDKLoginButtonDelegate, “delegato” del FBSDKLoginButton.

Swift

class ViewController: UIViewController , FBSDKLoginButtonDelegate {
…
}

Objective-C

@interface ViewController : UIViewController <FBSDKLoginButtonDelegate>

Per integrare del tutto il FBSDKLoginButtonDelegate, è necessario implementare i metodi seguenti:

Metodo Utilizzo
loginButton utente ha cliccato sul bottone per effettuare il login
loginButtonDidLogOut utente ha cliccato sul bottone per effettuare il logout

Una possibile implementazione di questi metodi è la seguente.

Swift

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
	if error != nil {
		print(error)
		return
	}
	print("Logged in")
}

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
	print("Logged out!")
}

Objective-C

- (void)loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error {
  if (error != nil || result.isCancelled) {
	return;
  }
  printf("Logged in") 
}

-(void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton {
  printf("Logged out") 
}

Ovviamente, in questi metodi è possibile aggiungere la propria logica dell’applicazione, come il reindirizzamento su un’altra pagina dopo il login oppure la cancellazione delle informazioni dell’utente.

Risultato finale

Effettuate le modifiche al codice sopra proposte, è finalmente possibile eseguire l’applicazione sul proprio dispositivo mobile o sull’emulatore, ottenendo la seguente schermata.

Figura 48. Schermata di Autenticazione con Facebook (click per ingrandire)

Schermata di Autenticazione con Facebook

Cliccando sul bottone, verrà concesso all’utente di autenticarsi con il proprio account Facebook, chiedendogli l’autorizzazione per l’accesso ai dati personali da parte dell’applicazione.

Figura 49. Schermata di a) autenticazione di Facebook, b) autorizzazione per l’accesso ai dati (click per ingrandire)

Schermata di a) autenticazione di Facebook, b) autorizzazione per l’accesso ai dati

Una volta autenticato, l’utente viene reindirizzato nuovamente nella schermata di login, ma al posto del bottone di autenticazione verrà visualizzato il bottone per il logout.

Figura 50. Bottone di logout (click per ingrandire)

Bottone di logout

Cliccando su quest’ultimo comparirà la conferma del logout, come mostrato nella figura seguente.

Figura 50. Conferma di logout (click per ingrandire)

Conferma di logout

Il codice sorgente di questa sezione è reperibile su GitHub, nel branch Facebook Login.

Tutte le lezioni

1 ... 9 10 11 ... 20

Se vuoi aggiornamenti su Facebook Login su iOS inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Facebook Login su iOS

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing