{"id":12037,"date":"2016-11-14T15:04:37","date_gmt":"2016-11-14T14:04:37","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12037"},"modified":"2016-11-14T15:04:37","modified_gmt":"2016-11-14T14:04:37","slug":"pubblicare-contenuti-su-facebook-dalle-applicazioni-android","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/pubblicare-contenuti-su-facebook-dalle-applicazioni-android\/","title":{"rendered":"Pubblicare contenuti su facebook dalle applicazioni Android"},"content":{"rendered":"<p>In un <a href=\"http:\/\/www.devapp.it\/wordpress\/come-fare-il-login-su-facebook-dalle-applicazioni-android\/\">articolo precedente<\/a>, abbiamo parlato di come si possono <strong>integrare le funzionalit\u00e0 di Facebook in un&#8217;app Android<\/strong>: ne abbiamo spiegato i concetti di base mentre, dal punto di vista pratico, ci siamo limitati ad effettuare un login.<br \/>\nIn questo articolo, andremo avanti nel discorso occupandoci della pubblicazione di contenuti direttamente dall&#8217;interno delle nostre app.<\/p>\n<h2>Preparazione dell&#8217;esempio<\/h2>\n<p>La preparazione del progetto passa per alcuni punti cardine che abbiamo gi\u00e0 illustrato\u00a0nel tutorial precedente, li riepiloghiamo qui velocemente:<\/p>\n<ul>\n<li>dobbiamo registrarci innanzitutto alla<a href=\"https:\/\/developers.facebook.com\/\" target=\"_blank\"> piattaforma degli sviluppatori Facebook<\/a> utilizzando un comune \u00a0account utente al Social Network. Registriamo quindi la nostra app all&#8217;interno della console tenendo presente che l&#8217;<strong>appID<\/strong>\u00a0che otterremo dovremo usarlo nel progetto Android Studio, magari conservato in una console:\n<pre class=\"lang:xhtml decode:true\">&lt;resources&gt;\r\n    ...\r\n    ...\r\n    &lt;string name=\"facebook_app_id\"&gt;189203758462739&lt;\/string&gt;\r\n&lt;\/resources&gt;<\/pre>\n<\/li>\n<li>integriamo l&#8217;SDK nel progetto Android Studio sfruttando la duttilit\u00e0 di Gradle:\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<\/li>\n<li>inseriamo la permission INTERNET nel file AndroidManifest.xml:\n<pre class=\"lang:xhtml decode:true \">&lt;uses-permission android:name=\"android.permission.INTERNET\" \/&gt;<\/pre>\n<\/li>\n<\/ul>\n<p>Quello che aggiungiamo questa volta \u00e8 la dichiarazione di un ContentProvider all&#8217;interno del file AndroidManifest.xml, all&#8217;interno del nodo &lt;application&gt;:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;provider\r\n            android:name=\"com.facebook.FacebookContentProvider\"\r\n            android:authorities=\"com.facebook.app.FacebookContentProvider1234567890\"\r\n            android:exported=\"true\" \/&gt;<\/pre>\n<p>Notiamo che alla fine del valore impostato per l&#8217;attributo authorities \u00e8 presente una sequenza di numeri (1234567890): l\u00ec dovremo sostituire con il nostro appID per sviluppatori Facebook.<\/p>\n<h2>L&#8217;esempio che abbiamo in mente<\/h2>\n<p>Seguiti questi passi possiamo iniziare\u00a0a lavorare al nostro esempio. Realizziamo un&#8217;app di prova che si pone lo scopo di pubblicare link e immagini su Facebook. Nella prima Activity, condivideremo contenuti: nell&#8217;immagine seguente stiamo compilando il form succederendo l&#8217;URL del nostro sito<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12049\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_01.jpg\" alt=\"android-facebook-integrazione_img_01\" width=\"365\" height=\"529\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_01.jpg 365w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_01-207x300.jpg 207w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_01-300x435.jpg 300w\" sizes=\"auto, (max-width: 365px) 100vw, 365px\" \/><\/a><\/p>\n<p>Il\u00a0FacebookButton permette\u00a0di eseguire accesso e disconnessione con le proprie credenziali utente. Al click del\u00a0pulsante &#8220;INVIA&#8221; verr\u00e0 aperta una finestra di dialogo\u00a0offerta dal Facebook SDK per un&#8217;ulteriore personalizzazione della condivisione:<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12050\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_02.jpg\" alt=\"android-facebook-integrazione_img_02\" width=\"383\" height=\"595\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_02.jpg 383w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_02-193x300.jpg 193w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_02-300x466.jpg 300w\" sizes=\"auto, (max-width: 383px) 100vw, 383px\" \/><\/a><\/p>\n<p>Il\u00a0Button &#8220;Invia un&#8217;immagine&#8221;, posto sul fondo della prima Activity, apre una seconda interfaccia all&#8217;interno della quale potremo scorrere delle\u00a0immagini casuali (cliccando sul tasto &#8220;Ricarica&#8221;) e pubblicare sul Social Network la nostra preferita, una volta individuata.<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12051\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03.jpg\" alt=\"android-facebook-integrazione_img_03\" width=\"476\" height=\"479\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03.jpg 476w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03-150x150.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03-298x300.jpg 298w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03-50x50.jpg 50w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03-125x125.jpg 125w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2016\/05\/android-facebook-integrazione_img_03-300x302.jpg 300w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/a><\/p>\n<h2>Layout e risorse<\/h2>\n<p>La MainActivity ha il seguente layout (file: \/res\/layout\/activity_main.xml):<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\" android:layout_height=\"match_parent\"\r\n    android:padding=\"16dp\"\r\n    &gt;\r\n    &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_alignParentTop=\"true\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        \/&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:id=\"@+id\/gestionePost\"\r\n        android:visibility=\"invisible\"\r\n        android:layout_below=\"@id\/fb_login\"\r\n        android:orientation=\"vertical\"&gt;\r\n\r\n        &lt;EditText\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:hint=\"(url da pubblicare)\"\r\n            android:background=\"@drawable\/form_bg\"\r\n            android:layout_marginBottom=\"5dp\"\r\n            android:layout_marginTop=\"5dp\"\r\n            android:padding=\"5dp\"\r\n            android:id=\"@+id\/url\"\/&gt;\r\n        &lt;EditText\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:hint=\"(titolo)\"\r\n            android:background=\"@drawable\/form_bg\"\r\n            android:layout_marginBottom=\"5dp\"\r\n            android:layout_marginTop=\"5dp\"\r\n            android:padding=\"5dp\"\r\n            android:id=\"@+id\/titolo\"\/&gt;\r\n        &lt;EditText\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:minLines=\"5\"\r\n            android:hint=\"(descrizione)\"\r\n            android:padding=\"5dp\"\r\n            android:background=\"@drawable\/form_bg\"\r\n            android:layout_marginBottom=\"5dp\"\r\n            android:layout_marginTop=\"5dp\"\r\n            android:id=\"@+id\/descrizione\"\/&gt;\r\n        &lt;Button\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:onClick=\"inviaPost\"\r\n            android:text=\"Invia\"\/&gt;\r\n\r\n        &lt;TextView\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginBottom=\"5dp\"\r\n            android:layout_marginTop=\"5dp\"\r\n            android:layout_gravity=\"center_horizontal\"\r\n            android:text=\"(oppure invia un'immagine)\"\/&gt;\r\n\r\n        &lt;Button\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:text=\"Invia un'immagine\"\r\n            android:onClick=\"invioImmagini\"\/&gt;\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n\r\n&lt;\/RelativeLayout&gt;\r\n<\/pre>\n<p>Si tratta di un RelativeLayout con un <strong>FacebookButton<\/strong>, posto in alto in posizione centrale. Sotto di esso, c&#8217;\u00e8 il form, inizialmente invisibile ma pronto a\u00a0manifestarsi al momento dell&#8217;autenticazione eseguita con successo. Le EditText presenti nel form hanno sfondo bianco e bordo blu grazie all&#8217;immagine definita in XML nel file \/res\/drawable\/form_bg.xml:<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;shape xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\r\n    &lt;stroke android:color=\"@color\/colorPrimary\"\r\n        android:width=\"2dp\"\r\n        \/&gt;\r\n    &lt;corners android:radius=\"5dp\"\/&gt;\r\n    &lt;solid android:color=\"@android:color\/white\"\/&gt;\r\n&lt;\/shape&gt;<\/pre>\n<p>Anche la seconda Activity ha un layout piuttosto semplice: due pulsanti per gestire caricamento e pubblicazione sul Social Network delle immagini disponibili (file: \/res\/layout\/activity_invio_immagine.xml):<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:padding=\"10dp\"\r\n    android:orientation=\"vertical\"&gt;\r\n\r\n    &lt;ImageView\r\n        android:layout_width=\"200dp\"\r\n        android:layout_height=\"200dp\"\r\n        android:layout_gravity=\"center_horizontal\"\r\n        android:id=\"@+id\/immagine\"\/&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"&gt;\r\n        &lt;Button\r\n            android:layout_width=\"0dp\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_weight=\"1\"\r\n            android:text=\"Pubblica\"\r\n            android:onClick=\"pubblica\"\/&gt;\r\n        &lt;Button\r\n            android:layout_width=\"0dp\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_weight=\"1\"\r\n            android:text=\"Ricarica\"\r\n            android:onClick=\"ricaricaImmagine\"\/&gt;\r\n    &lt;\/LinearLayout&gt;\r\n\r\n&lt;\/LinearLayout&gt;\r\n<\/pre>\n<p>Le immagini di prova sono state collocate tra i drawable e hanno nome img1.jpg, img2.jpg, img3.jpg e img4.jpg.<\/p>\n<h2>Condivisione di un link<\/h2>\n<p>Nella MainActivity abbiamo un <em>onCreate<\/em> che gestisce per lo pi\u00f9 le attivit\u00e0 di login e logout tramite il pulsante Facebook: tutti elementi che abbiamo gi\u00e0 visto:<\/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                        findViewById(R.id.gestionePost).setVisibility(View.VISIBLE);\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                Profile profile=Profile.getCurrentProfile();\r\n\r\n                ProfileTracker profileTracker=new ProfileTracker() {\r\n                    @Override\r\n                    protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {\r\n                        if (oldProfile!=null &amp;&amp; currentProfile==null)\r\n                            findViewById(R.id.gestionePost).setVisibility(View.GONE);\r\n                    }\r\n                };\r\n\r\n                profileTracker.startTracking();\r\n\r\n                if (Profile.getCurrentProfile()!=null)\r\n                    findViewById(R.id.gestionePost).setVisibility(View.VISIBLE);\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        public void invioImmagini(View v)\r\n        {\r\n            Intent i=new Intent(this, InvioImmagineActivity.class);\r\n            startActivity(i);\r\n        }\r\n\r\n        public void inviaPost(View v)\r\n        {\r\n\r\n            EditText url= (EditText) findViewById(R.id.url);\r\n            EditText txt= (EditText) findViewById(R.id.titolo);\r\n            EditText descr= (EditText) findViewById(R.id.descrizione);\r\n            \r\n            ShareLinkContent content = new ShareLinkContent.Builder()\r\n                    .setContentUrl(Uri.parse(url.getText().toString()))\r\n                    .setContentTitle(txt.getText().toString())\r\n                    .setContentDescription(descr.getText().toString())\r\n                    .build();\r\n            ShareDialog dialog=new ShareDialog(this);\r\n            dialog.show(content);\r\n        }\r\n\r\n    }\r\n<\/pre>\n<p>Il metodo <em>invioImmagini<\/em> \u00e8 legato al pulsante &#8220;Invia un&#8217;immagine&#8221; con cui passeremo alla seconda Activity per sperimentare la pubblicazione di immagini mentre il codice pi\u00f9 interessante si trova nell&#8217;ultimo metodo, <em>inviaPost<\/em>. Al suo interno, troviamo una classe per la condivisione di contenuti, <strong>ShareLinkContent<\/strong>. La classe offre metodi per impostare i valori della condivisione, primo tra tutti l&#8217;URL del link. Costruiamo prima l&#8217;oggetto ShareLinkcontent e poi, per condividerlo, lo affidiamo ad una finestra di dialogo di classe <strong>ShareDialog<\/strong> con cui l&#8217;utente potr\u00e0 modificare altri parametri come \u00e8 abituato a fare con Facebook.<\/p>\n<h2>Condivisione di immagini<\/h2>\n<p>Nella seconda Activity troviamo questo codice Java:<\/p>\n<pre class=\"lang:java decode:true\">public class InvioImmagineActivity extends AppCompatActivity {\r\n\r\n    private ImageView immagineSelezionata;\r\n    private int[] immagini=new int[]{R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4};\r\n    private int posizioneImmagineSelezionata=0;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_invio_immagine);\r\n        getSupportActionBar().setDisplayHomeAsUpEnabled(true);\r\n        immagineSelezionata= (ImageView) findViewById(R.id.immagine);\r\n        immagineSelezionata.setImageResource(immagini[posizioneImmagineSelezionata]);\r\n    }\r\n\r\n    public void ricaricaImmagine(View v)\r\n    {\r\n        cambiaImmagine();\r\n    }\r\n\r\n    private void cambiaImmagine()\r\n    {\r\n        if (posizioneImmagineSelezionata==immagini.length-1)\r\n            posizioneImmagineSelezionata=0;\r\n        else\r\n            posizioneImmagineSelezionata++;\r\n        immagineSelezionata.setImageResource(immagini[posizioneImmagineSelezionata]);\r\n    }\r\n\r\n    public void pubblica(View v)\r\n    {\r\n        Bitmap bmp= BitmapFactory.decodeResource(getResources(), immagini[posizioneImmagineSelezionata]);\r\n\r\n        SharePhoto photo = new SharePhoto.Builder()\r\n                .setBitmap(bmp)\r\n                .setCaption(\"Sport\")\r\n                .build();\r\n\r\n        SharePhotoContent content = new SharePhotoContent.Builder()\r\n                .addPhoto(photo)\r\n                .build();\r\n\r\n        ShareApi.share(content, new FacebookCallback&lt;Sharer.Result&gt;() {\r\n            @Override\r\n            public void onSuccess(Sharer.Result result) {\r\n                Toast.makeText(InvioImmagineActivity.this, \"Condivisione riuscita!\", 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 error) {\r\n                Toast.makeText(InvioImmagineActivity.this, \"Errore di accesso!\", Toast.LENGTH_SHORT).show();\r\n            }\r\n        });\r\n    }\r\n}<\/pre>\n<p>In questa classe, gestiamo per prima cosa le immagini riposte tra i Drawable. Creiamo un array denominato <em>immagini<\/em>. Il metodo <em>cambiaImmagine<\/em> servir\u00e0 a far ruotare l&#8217;immagine selezionata corrente ed il tutto verr\u00e0 fatto tenendo nota della posizione nell&#8217;array ed incrementandolo per l&#8217;occasione. \u00a0Al click sul pulsante &#8220;Ricarica&#8221; non far\u00e0 altro che innescare l&#8217;inserimento dell&#8217;immagine corrente nell&#8217;ImageView presente nel layout.<\/p>\n<p>Il metodo <em>pubblica<\/em> si occuper\u00e0 di svolgere il lavoro con Facebook pubblicando l&#8217;immagine corrente. Anche in questo caso esistono delle classi apposite:<\/p>\n<ul>\n<li><strong>SharePhoto<\/strong> che identificher\u00e0 la risorsa da condividere ed un&#8217;eventuale etichetta;<\/li>\n<li>la classe <strong>SharePhotoContent<\/strong> prender\u00e0 in carico la risorsa foto creata al punto precedente e la render\u00e0 un elemento di condivisione attraverso il Social Network;<\/li>\n<li>piuttosto che usare una ShareDialog, scegliamo la strada della condivisione diretta usando la classe <strong>ShareApi<\/strong>. Dovremo passare solo l&#8217;oggetto <strong>SharePhotoContent<\/strong>, creato poco fa, ed un listener che possieder\u00e0 i metodi per controllare l&#8217;esito della condivisione. In caso di successo verr\u00e0 chiamato <em>onSuccess<\/em>, in questo esempio non svolgiamo gestioni particolari ma facciamo solo apparire un Toast.<\/li>\n<\/ul>\n<h2>Conclusioni<\/h2>\n<p>Esistono molti altri modi per interagire con\u00a0Facebook dalle nostre app Android. Pensiamo ad esempio ai video, altro prodotto multimediale molto sfruttato dai Social Network: anche in questo caso non ci stupir\u00e0 trovare\u00a0le classi <strong>ShareVideo<\/strong> e <strong>ShareVideoContent<\/strong> che potremo usare in una maniera analoga a quanto detto per le foto.<\/p>\n<p>Altra opzione interessante \u00e8 la possibilit\u00e0 di pubblicare in maniera promiscua prodotti multimediali eterogenei: ad esempio, foto e video insieme. In questo caso, si potr\u00e0 gestire un insieme di oggetti SharePhoto e ShareVideo tramite uno <strong>ShareMediaContent<\/strong>.<\/p>\n<p>Questi ed altri elementi potranno essere sfruttati nel dialogo tra Facebook e le nostre app, per approfondimenti la guida ufficiale per sviluppatori offre molti\u00a0spunti interessanti.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In un articolo precedente, abbiamo parlato di come si possono integrare le funzionalit\u00e0 di Facebook in un&#8217;app&#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":[1278,168],"class_list":["post-12037","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-tutorial-pratici","tag-android","tag-facebook"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12037","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=12037"}],"version-history":[{"count":9,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12037\/revisions"}],"predecessor-version":[{"id":12540,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12037\/revisions\/12540"}],"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=12037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}