{"id":11960,"date":"2016-10-11T13:12:29","date_gmt":"2016-10-11T11:12:29","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=11960"},"modified":"2016-10-11T13:12:29","modified_gmt":"2016-10-11T11:12:29","slug":"come-fare-il-login-su-facebook-dalle-applicazioni-android","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/come-fare-il-login-su-facebook-dalle-applicazioni-android\/","title":{"rendered":"Come fare il login su facebook dalle applicazioni Android"},"content":{"rendered":"<p>In questo tutorial di <strong>programmazione android<\/strong>, iniziamo a discutere la possibilit\u00e0 di far lavorare insieme il Social Network pi\u00f9 famoso del mondo ed il sistema operativo mobile pi\u00f9 diffuso: rispettivamente, Facebook e Android.<br \/>\nIl colosso dei Social mette a disposizione un vero e proprio SDK per il Robottino Verde che render\u00e0 molto veloce l&#8217;integrazione delle sue funzionalit\u00e0 all&#8217;interno delle nostre app. I primi scopi che ci poniamo in quest&#8217;ottica sono la predisposizione di un progetto e le modalit\u00e0 che permettono di effettuare il login dall&#8217;interno di un&#8217;app.<\/p>\n<h2>Preparazione del progetto<\/h2>\n<p>Per prima cosa si deve avere a disposizione un account presso la piattaforma on line <a href=\"https:\/\/developers.facebook.com\" target=\"_blank\">&#8220;Facebook for developers&#8221;<\/a>: \u00e8 possibile registrarvisi\u00a0possedendo semplicemente\u00a0\u00a0credenziali di accesso valide a Facebook.<br \/>\nUna volta entrati si dovr\u00e0 <strong>creare una nuova applicazione<\/strong>: con essa <strong>ci verr\u00e0 consegnato un APP Id<\/strong> che la identificher\u00e0 e potremo procedere ad una serie di configurazioni. Ci verr\u00e0 chiesto se vogliamo creare un&#8217;app iOS, Android o di altro genere.<\/p>\n<p>Per l&#8217;ID si dovr\u00e0 fornire alcuni dati: nome visualizzato dell&#8217;app, email di contatto, un identificativo che tipicamente coincider\u00e0 con il namespace Java ed una categoria tra quelle elencate.<\/p>\n<p>Fatto ci\u00f2 passeremo alla configurazione del nostro progetto in Android Studio aggiungendo tra le dipendenze di Gradle il Facebook SDK:<\/p>\n<pre class=\"lang:java decode:true\">dependencies {\r\n    ...\r\n    ... \r\n    compile 'com.facebook.android:facebook-android-sdk:4.+'\r\n}<\/pre>\n<p>Nel file <strong>AndroidManifest.xml<\/strong> dovremo invece aggiungere tre elementi:<\/p>\n<ul>\n<li>l&#8217;<strong>app ID<\/strong> ottenuta nella piattaforma online (salvandolo ad esempio tra le risorse stringa);<\/li>\n<li>la dichiarazione della <strong>FacebookActivity<\/strong> tra le componenti dell&#8217;app tramite la quale eseguiremo il login verso il Social Network;<\/li>\n<li>la <strong>permission INTERNET<\/strong> che permetter\u00e0 di accedere alla Rete.<\/li>\n<\/ul>\n<p>La struttura che il file manifest assumer\u00e0 sar\u00e0, di massima, la seguente:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;manifest ...&gt;\r\n\r\n    &lt;uses-permission android:name=\"android.permission.INTERNET\"\/&gt;\r\n\r\n    &lt;application ... &gt;\r\n       ...\r\n       ...\r\n\r\n        &lt;activity android:name=\"com.facebook.FacebookActivity\"\r\n            android:configChanges=\r\n                \"keyboard|keyboardHidden|screenLayout|screenSize|orientation\"\r\n            android:theme=\"@android:style\/Theme.Translucent.NoTitleBar\"\r\n            android:label=\"@string\/app_name\" \/&gt;\r\n\r\n        &lt;meta-data android:name=\"com.facebook.sdk.ApplicationId\"\r\n            android:value=\"@string\/facebook_app_id\"\/&gt;\r\n\r\n    &lt;\/application&gt;\r\n\r\n&lt;\/manifest&gt;<\/pre>\n<h2>Il Facebook Button<\/h2>\n<p>Per integrare nella nostra applicazione le funzionalit\u00e0 di Facebook avremo bisogno, per prima cosa, di permettere all&#8217;utente di autenticarsi con le proprie credenziali. Quello che faremo sar\u00e0 attivare la FacebookActivity tramite la quale verranno chieste le credenziali o, se gi\u00e0 loggato, ci verr\u00e0 notificato che l&#8217;utente ha\u00a0gi\u00e0 superato la fase di identificazione. Alla chiusura dell&#8217;Activity fornita da Facebook, il codice ricever\u00e0 in un apposito listener la comunicazione relativa e ci sar\u00e0 possibile conoscere il profilo dell&#8217;utente che sta usando la nostra app.<\/p>\n<p>Il modo pi\u00f9 familiare all&#8217;utente per attivare il meccanismo di accesso alla piattaforma\u00a0\u00e8 il <strong>Facebook Button<\/strong>, widget che ci viene gi\u00e0 fornito dal SDK.\u00a0Proviamo ad utilizzarlo.<br \/>\nLo inseriamo nel layout:<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;com.facebook.login.widget.LoginButton\r\n        android:id=\"@+id\/fb_login\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_centerInParent=\"true\"\r\n        \/&gt;<\/pre>\n<p>Quello che segue \u00e8 il codice di una normale Activity che, oltre ai consueti elementi, riesce a gestire un login tramite Facebook Button:<\/p>\n<pre class=\"lang:java decode:true\">public class MainActivity extends AppCompatActivity {\r\n\r\n    private LoginButton fb_Button;\r\n    private CallbackManager callbackManager;\r\n\r\n    @Override\r\n        protected void onCreate(Bundle savedInstanceState)\r\n            {\r\n                super.onCreate(savedInstanceState);\r\n                FacebookSdk.sdkInitialize(getApplicationContext());\r\n                setContentView(R.layout.activity_main);\r\n\r\n                callbackManager = CallbackManager.Factory.create();\r\n\r\n                fb_Button = (LoginButton)findViewById(R.id.fb_login);\r\n\r\n                fb_Button.registerCallback(callbackManager, new FacebookCallback&lt;LoginResult&gt;() {\r\n                    @Override\r\n                    public void onSuccess(LoginResult loginResult) {\r\n                        Toast.makeText(MainActivity.this, \"Login effettuato con successo!\", Toast.LENGTH_SHORT).show();\r\n                    }\r\n\r\n                    @Override\r\n                    public void onCancel() {\r\n\r\n                    }\r\n\r\n                    @Override\r\n                    public void onError(FacebookException e) {\r\n                        Toast.makeText(MainActivity.this, \"Errore di accesso!\", Toast.LENGTH_SHORT).show();\r\n                    }\r\n                });\r\n\r\n\r\n            }\r\n\r\n        @Override\r\n        protected void onActivityResult(int requestCode, int responseCode, Intent data)\r\n        {\r\n            super.onActivityResult(requestCode, responseCode, data);\r\n            callbackManager.onActivityResult(requestCode, responseCode, data);\r\n        }\r\n\r\n    }<\/pre>\n<p>Notiamo gli elementi principali:<\/p>\n<ul>\n<li>all&#8217;inizio del metodo <em>onCreate<\/em>\u00a0viene inizializzato il nostro\u00a0SDK con l&#8217;invocazione a <em>FacebookSdk.sdkInitialize(Context)<\/em>;<\/li>\n<li>gestiamo il click sul Facebook Button come su un normale pulsante anche se il listener ad esso collegato \u00e8 pi\u00f9 complesso del normale. In caso di login effettuato con successo, verr\u00e0 invocato il metodo <em>onSuccess<\/em>;<\/li>\n<li>per le attivit\u00e0 di login vere e proprie come l&#8217;inserimento delle credenziali Facebook o la notifica che l&#8217;utente risulta gi\u00e0 loggato verr\u00e0 invocata la FacebookActivity alla cui uscita il controllo passer\u00e0 per il metodo <em>onActivityResult<\/em>.<\/li>\n<\/ul>\n<h2>Chi ha fatto login?<\/h2>\n<p>Se con il Facebook Button gestiamo in maniera comoda il login di un utente, la priorit\u00e0 nell&#8217;immediato proseguimento del lavoro consiste nel conoscere i dati di colui che ha effettuato l&#8217;accesso. Allo scopo esiste la classe <strong>Profile<\/strong>, finalizzata a gestire i dati di accesso degli utenti. Mette a disposizione una serie di metodi come <em>getFirstName()<\/em>, <em>getLastName()\u00a0<\/em>e <em>getLinkUri()<\/em> che permettono di accedere a nome, cognome o link della pagina Facebook dell&#8217;utente.<\/p>\n<p>Si pu\u00f2 ottenere un riferimento al profilo attuale mediante l&#8217;invocazione:<\/p>\n<pre class=\"lang:java decode:true \">Profile profile=Profile.getCurrentProfile();<\/pre>\n<p>Per seguire gli accessi alla nostra app tramite Facebook si pu\u00f2 fare uso della classe <strong>ProfileTracker<\/strong> che ci avviser\u00e0 di ogni login\/logout che si verifica:<\/p>\n<pre class=\"lang:java decode:true \">ProfileTracker profileTracker=new ProfileTracker() {\r\n                    @Override\r\n                    protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {\r\n                        Toast.makeText(MainActivity.this, \"Errore di accesso!\", Toast.LENGTH_SHORT).show();\r\n                    }\r\n                };\r\n\r\n                profileTracker.startTracking();<\/pre>\n<p>Il frammento di codice qui mostrato pu\u00f2 essere collocato nell&#8217;<em>onCreate<\/em> dell&#8217;Activity ed il metodo <em>onCurrentProfileChanged()\u00a0<\/em>verr\u00e0 invocato ad ogni cambio di accesso: il parametro oldProfile sar\u00e0 non nullo in caso di logout mentre il currentProfile sar\u00e0 non nullo in caso di avvenuto login.<\/p>\n<h2>Conclusioni<\/h2>\n<p>Quanto abbiamo visto in questa lezione mostra i due passi fondamentali per l&#8217;utilizzo della piattaforma Facebook in un&#8217;app Android: predisposizione del progetto e accesso alla piattaforma Social mediante le credenziali in possesso dell&#8217;utente. Da qui, nei prossimi tutorial di questo sito, muoveremo verso nuove attivit\u00e0 che permetteranno di interagire in maniera attiva con la piattaforma.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo tutorial di programmazione android, iniziamo a discutere la possibilit\u00e0 di far lavorare insieme il Social&#8230;<\/p>\n","protected":false},"author":561,"featured_media":12422,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1682,1],"tags":[1757,1562,1758,969],"class_list":["post-11960","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-tutorial-pratici","tag-android-tutorial","tag-creare-app-android","tag-login-facebook-app-android","tag-programmatori-android"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11960","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=11960"}],"version-history":[{"count":6,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11960\/revisions"}],"predecessor-version":[{"id":12423,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/11960\/revisions\/12423"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/12422"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=11960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=11960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=11960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}