Recentemente abbiamo lanciato Android Studio 2.2 con molte caratteristiche nuove e perfezionati. È facile non notare alcuni dei cambiamenti poiché sono stati apportati nell'ambito del plugin Android Gradle, come nel caso dell'operazione di packaging e firma dell'APK integrato e riscritto recentemente.
Recentemente abbiamo lanciato Android Studio 2.2 con molte caratteristiche nuove e perfezionati. È facile non notare alcuni dei cambiamenti poiché sono stati apportati nell'ambito del plugin Android Gradle, come nel caso dell'operazione di packaging e firma dell'APK integrato e riscritto recentemente.

APK Signature Scheme v2


Dopo aver introdotto il nuovo APK Signature Scheme v2 in Android 7.0 Nougat, abbiamo deciso di riscrivere come funziona l'assemblaggio dei file APK nel plugin Android Gradle. Puoi leggere tutti i dettagli tecnici più specifici relativi alle firme v2 nella documentazione, ma qui ti proponiamo una breve sintesi tl;dr delle informazioni che ti serveranno per sviluppare app Android.
  • La firma crittografica dell'APK, che viene utilizzata per verificarne l'integrità, si trova ora immediatamente prima della ZIP Central Directory.
  • La firma viene calcolata e verificata in base al contenuto binario dell'intero file APK, a differenza del contenuto dei file decompressi di ogni file nell'archivio in v1.
  • Un APK può essere firmato da entrambe le firme v1 e v2 contemporaneamente, così rimane retrocompatibile con le precedenti release di Android.

Perché abbiamo introdotto questo cambiamento nel modo in cui Android verifica i file APK? Innanzitutto, per una maggiore sicurezza ed estensibilità di questo nuovo formato di firma, e poi per le prestazioni. Infatti grazie alle nuove firme, la verifica sul dispositivo richiede molto meno tempo (e niente costose decompressioni) e di conseguenza si velocizza l’installazione delle app.

Il risultato di questo nuovo schema di firma, tuttavia, è che si sono creati nuovi vincoli nel processo di creazione di APK. Dato che solo i contenuti dei file non compressi venivano verificati in v1, ciò permetteva di apportare parecchie modifiche dopo la firma APK, infatti i file potevano essere spostati o anche ricompressi. Lo strumento zipalign, che rientrava nel processo di compilazione, faceva esattamente questo: veniva utilizzato per allineare le voci ZIP sui corretti limiti di byte per migliorare le prestazioni di runtime.

Poiché le firme v2 verificano tutti i byte in archivio e non le singole voci ZIP, eseguire zipalign dopo la firma non è più possibile. Ecco perché la compressione, l'allineamento e la firma ora avvengono in un unico passaggio integrato durante il processo di compilazione.

In caso di attività personalizzate nel processo di compilazione che comportino la manomissione o post-elaborazione del file APK in alcun modo, assicurati di disattivarle altrimenti rischi di rendere la firma v2 non valida e il tuo APK incompatibile con Android 7.0 e le versioni successive.

Se decidi di eseguire la firma e l'allineamento manualmente (ad esempio dalla riga di comando), ti offriamo un nuovo strumento nell'SDK di Android, chiamato apksigner, che fornisce sia le verifiche sia le firme v1 e v2 dell'APK. Ricorda che devi eseguire zipalign prima di eseguire apksigner se usi le firme v2. Ricorda inoltre che lo strumento jarsigner di JDK non è compatibile con le firme v2 di Android, quindi non è possibile utilizzarlo per ri-firmare i tuoi APK se desideri conservare la firma v2.

Qualora desiderassi disabilitare l'aggiunta delle firme v1 o v2 durante la compilazione con il plugin Gradle Android, potresti aggiungere queste righe alla tua sezione signingConfig in build.gradle:
v1SigningEnabled false v2SigningEnabled false

Nota: entrambi gli schemi di firma sono abilitati per impostazione predefinita nel plugin Android Gradle 2.2.

Build di release per APK più piccoli


Durante la riscrittura del packager, abbiamo colto l'occasione per ottimizzare le dimensioni degli APK di release, con conseguenti download più veloci, aggiornamenti delta più piccoli sul Play Store e meno spazio sprecato sul dispositivo. Ecco alcuni dei cambiamenti che abbiamo apportato:
  • I file presenti nell'archivio da ora vengono ordinati per minimizzare le differenze tra le build APK.
  • Tutti i timestamp dei file e metadati vengono azzerati.
  • La compressione dei Livelli 6 e 9 è controllata in parallelo per tutti i file e consente di usare quella ottimale, ossia se L9 offre scarsi benefici in termini di dimensioni, si può scegliere L6 per ottenere prestazioni migliori.
  • Le librerie native sono archiviate in forma non compressa e la pagina viene allineata nell'APK. Tutto ciò supporta l'opzione android:extractNativeLibs="false" di Android 6.0 Marshmallow e consente alle app di utilizzare meno spazio sul dispositivo oltre che generare aggiornamenti più piccoli per il Play Store.
  • La compressione Zopfli non viene utilizzata per supportare gli algoritmi di aggiornamento del Play Store. E non ti consigliamo di ricomprimere i tuoi APK con Zopfli. La pre-ottimizzazione delle risorse individuali, come nel caso dei file PNG nei progetti, è ancora valida e infatti viene consigliata.

Questi cambiamenti contribuiscono a rendere la release più piccola possibile in modo che gli utenti possano scaricare e aggiornare l'app anche tramite una connessione lenta o su dispositivi meno potenti. Ma cosa succede con le build di debug?

Build di debug per installazioni veloci


Durante lo sviluppo delle app dovresti cercare di mantenere un ciclo di iterazione veloce, ossia cambiare il codice, compilare e distribuire su un dispositivo o un emulatore collegato. A partire da Android Studio 2.0 ci siamo impegnati per rendere queste fasi quanto più rapide possibile. Con Instant Run, ora siamo in grado di aggiornare solo il codice e le risorse modificati durante il runtime, mentre il nuovo emulatore offre un supporto multi-processore e una maggiore velocità ADB per installazioni e trasferimenti dell'APK più rapidi. I miglioramenti alle build possono ridurre ulteriormente il tempo impiegato e abbiamo introdotto il packaging incrementale e la compressione parallela per le build di debug in Android Studio 2.2. Insieme ad altre caratteristiche come le risorse di packaging selettivo per la densità del dispositivo di destinazione e di ABI, tutto questo velocizzerà ulteriormente la tua capacità di programmare.

Un avvertimento però: i file APK creati per Instant Run o richiamando una build di debug non sono destinati alla distribuzione nel Play Store! Contengono codice di strumentazione aggiuntivo per Instant Run e non hanno tutte le risorse necessarie per la configurazione di dispositivi diversi da quello collegato quando hai iniziato la build. Assicurati di distribuire solo le versioni di release dell'APK che si possono creare utilizzando il comando Generate Signed APK di Android Studio o con l'attività assembleRelease Gradle.

L’Acquisizione: come acquisiamo nuovi utenti?

Il motto "crea e il resto verrà da sé’" raramente funziona nel mondo di oggi. L'Acquisizione è un campo molto vasto e comprende una serie di iniziative diverse, come la pubblicità, le pubbliche relazioni, il marketing e molto altro ancora.

L’Acquisizione: come acquisiamo nuovi utenti?

Il motto "crea e il resto verrà da sé’" raramente funziona nel mondo di oggi. L'Acquisizione è un campo molto vasto e comprende una serie di iniziative diverse, come la pubblicità, le pubbliche relazioni, il marketing e molto altro ancora.


Nel mio ultimo post ho descritto i cinque componenti di Pirate Metrics, ossia Acquisizione, Attivazione, Fidelizzazione, Riferimento e Reddito e quanto siano fondamentali nel raggiungere il successo di un prodotto. In questo post mi concentrerò sul primo parametro della metrica, ossia l'acquisizione, dimostrando come si possa usare la suite Firebase per monitorare, ma anche per migliorare un prodotto.





Nel corso degli anni il contributo più significativo da parte di Google nell’ambito dell’acquisizione è stato Adwords. Attraverso le campagne Adwords, puoi già raggiungere i clienti non solo quando eseguono una ricerca, ma anche quando utilizzano YouTube e Google Play. Grazie alla nuova integrazione di Firebase con Adwords, puoi potenziare al massimo il tuo flusso di lavoro per l’acquisizione.

In primo luogo, potrai accertarti automaticamente che la campagna raggiunga gli utenti giusti tenendo traccia degli eventi in-app aperti da loro.

Supponiamo di aver creato un gioco con più campagne in esecuzione contemporaneamente e, grazie a questa integrazione, non solo potrai sapere quali campagne apportano il maggior numero di utenti ai prezzi migliori, ma anche quali sono quelle che ti procurano gli utenti più coinvolti.

Puoi anche attribuire le acquisizioni da più di 30 altre reti, e monitorare direttamente le prestazioni della campagna in Firebase Analytics. E, come ci si aspetterebbe, puoi segmentare gli utenti acquisiti da queste diverse fonti nelle audience dedicate.

È possibile anche specificare quale dei tuoi eventi in-app siano importanti, così Adwords si rivolgerà automaticamente agli utenti che possono eseguire tali eventi. Continuando con l'esempio di prima del gioco, supponiamo che il gioco abbia entrambe le modalità, single e multiplayer. Comunicando ad Adwords l'evento dell'avvio di un gioco multiplayer, potresti aumentare le probabilità di acquisire gli utenti che vogliono giocare in quella modalità.

Puoi anche rivolgerti al pubblico che hai creato in Firebase Analytics e ciò può rivelarsi estremamente efficace per il retargeting, come nel caso degli utenti che potrebbero aver rinunciato dopo aver avuto delle difficoltà a un certo livello, riconquistandoli con un’offerta molto allettante di power up.

L’integrazione Firebase con Adwords ti aiuta a ottenere il massimo dal tuo investimento. Per ulteriori informazioni ti segnaliamo la documentazione ufficiale.

Oltre ad Adwords, un altro ingegnoso strumento a tua disposizione, che fa parte di Firebase, è Dynamic Links. Ti consente di creare un singolo URL da condividere con i potenziali utenti, che vengono reindirizzati ai rispettivi store per scaricarlo sia su Android che iOS. È inoltre possibile aggiungere a un link alcuni dati personalizzati in grado di sopravvivere al processo di installazione in un’app. Puoi utilizzare questo per migliorare notevolmente l’acquisizione da canali come i social media.

Ad esempio, diciamo che tu voglia mettere in evidenza un prodotto già in vendita sulla tua app di e-commerce. È sufficiente creare un link dinamico, aggiungere alcune informazioni, come ad esempio un ID che la tua app possa quindi consumare e con cui creare un deeplink direttamente al prodotto. Gli utenti che hanno l'app saranno dunque portati direttamente alla pagina del prodotto, invece quelli che non ce l’hanno verranno indirizzati al Play Store o all’App Store per poi essere portati direttamente alla pagina del prodotto quando aprono la tua app per la prima volta.

Affronteremo di nuovo l’argomento di Dynamic Links in uno dei post futuri, ma la documentazione relativa a questo argomento è disponibile se desideri consultarla.

Nel nostro prossimo post parleremo dell’Attivazione.

La sicurezza è sempre stata fondamentale per il Web, ma le difficoltà legate alla migrazione dei siti hanno impedito l’adozione di HTTPS per molti anni. Nell’interesse di un Web più sicuro per tutti, Google ha collaborato al fianco di molte altre aziende nell’ambito dell’ecosistema online per comprendere e affrontare meglio queste problematiche e ciò ha prodotto un cambiamento reale. Un Web con HTTPS onnipresenti non è nel lontano futuro ma è nel presente, grazie alla navigazione sicura che sta diventando la prassi per gli utenti di Chrome.
La sicurezza è sempre stata fondamentale per il Web, ma le difficoltà legate alla migrazione dei siti hanno impedito l’adozione di HTTPS per molti anni. Nell’interesse di un Web più sicuro per tutti, Google ha collaborato al fianco di molte altre aziende nell’ambito dell’ecosistema online per comprendere e affrontare meglio queste problematiche e ciò ha prodotto un cambiamento reale. Un Web con HTTPS onnipresenti non è nel lontano futuro ma è nel presente, grazie alla navigazione sicura che sta diventando la prassi per gli utenti di Chrome.

Abbiamo aggiunto una nuova sezione alla Report Card HTTPS del nostro Rapporto sulla Trasparenza che include i dati su come l’utilizzo di HTTPS stia aumentando col passare del tempo. Più della metà delle pagine caricate e due terzi del tempo totale trascorso dagli utenti Chrome sui loro desktop avvengono via HTTPS e si prevede che questi parametri mantengano una forte tendenza all’aumento.
Percentuale di pagine caricate tramite HTTPS in Chrome



Mentre il resto del Web passa a HTTPS, continuiamo a impegnarci per garantire che la migrazione a HTTPS sia un gioco da ragazzi, offrendo vantaggi commerciali oltre che una maggiore sicurezza. Attualmente HTTPS consente di ottenere le migliori prestazioni offerte dal Web e potenti funzionalità che agevolano le conversioni dei siti, comprese alcune nuove caratteristiche come Service Worker per il supporto offline e le notifiche push sul Web ma anche altre funzionalità già esistenti, quali il riempimento automatico della carta di credito e l’API per la geolocalizzazione in HTML5 che sono troppo potenti per essere utilizzate con una connessione HTTP poco sicura. Come per tutte le maggiori migrazioni di siti, ci sono alcuni accorgimenti che i webmaster devono adottare per garantire che la transizione del posizionamento di ricerca avvenga senza problemi quando si passa a HTTPS. Per chiarire meglio questo concetto abbiamo pubblicato due FAQ per facilitare la corretta transizione dei siti, e continueremo ad aggiornare la nostra guida ai principi fondamentali del Web.


Abbiamo visto l’esito positivo della transizione di molti siti con effetti trascurabili sul posizionamento di ricerca e sul rispettivo traffico. Brian Wood, Director of Marketing SEO presso Wayfair, un grande sito di vendita al dettaglio, ha commentato: “Siamo stati in grado di effettuare la migrazione di Wayfair.com a HTTPS senza rilevare un impatto significativo sul posizionamento o sul traffico di ricerca naturale nell’ambito di Google. Siamo molto soddisfatti di poter dire che adesso tutti i siti di Wayfair sono totalmente HTTPS”. CNET, un grande sito di notizie nel settore tecnologico, ha avuto un’esperienza simile: “Il mese scorso abbiamo portato a termine la transizione di CNET.com a HTTPS senza problemi”, ha affermato John Sherwood, Vice President of Engineering & Technology presso CNET. “Da allora non abbiamo rilevato alcun cambiamento di posizionamento o del traffico di ricerca naturale nell’ambito di Google”.


I webmaster che includono gli annunci nei loro siti dovrebbero anche monitorare attentamente le prestazioni e i ricavi degli annunci nel corso delle migrazioni di grandi siti. La percentuale di traffico degli annunci Google distribuita su HTTPS è fortemente aumentata negli ultimi 3 anni. Tutti gli annunci provenienti da qualsiasi fonte Google supportano HTTPS, inclusi AdWords, AdSense e DoubleClick Ad Exchange; gli annunci venduti direttamente, ossia tramite DoubleClick for Publishers, devono ancora essere designati come conformi a HTTPS. Ciò significa che gli annunci provenienti da Google presenti su qualsiasi sito rimarranno tali e quali dopo la migrazione a HTTPS. Molti partner editoriali l’hanno già constatato dopo aver effettuato una transizione corretta a HTTPS. Jason Tollestrup, Director of Programmatic Advertising per il Washington Post, afferma: “Non ho visto alcun impatto finanziario sul fatturato di AdX con il passaggio a SSL”.


Giacché la migrazione a HTTPS diventa sempre più semplice, continueremo a impegnarci per produrre un Web la cui sicurezza sia un requisito predefinito. Perché dunque non pianifichi la tua migrazione a HTTPS già da oggi?

Pubblicato da Adrienne Porter Felt ed Emily Schechter, Chrome Security Team

È stato un anno ricco di eventi poiché il Google Brain Team ha reso TensorFlow open source per accelerare la ricerca sul machine learning e ottimizzare ancora di più la tecnologia per tutti ...
È stato un anno ricco di eventi poiché il Google Brain Team ha reso TensorFlow open source per accelerare la ricerca sul machine learning e ottimizzare ancora di più la tecnologia per tutti. Abbiamo riscontrato una quantità impressionante di attività in relazione a questo progetto: oltre 480 persone hanno contribuito direttamente a TensorFlow, tra cui Googler, ricercatori esterni, programmatori indipendenti, studenti e sviluppatori senior presso altre grandi aziende. TensorFlow è ora il progetto di machine learning più diffuso su GitHub.

Grazie a più di 10.000 commit in soli 12 mesi, abbiamo apportato numerosi miglioramenti alle prestazioni, aggiunto il supporto per il distributed training, portato TensorFlow su iOS e su Raspberry Pi, e abbiamo anche integrato TensorFlow con l’infrastruttura Big Data ampiamente utilizzata. Abbiamo anche reso TensorFlow accessibile da Go, Rust e Haskell, rilasciato avanzatissimi modelli di classificazione di immagini e risposto a migliaia di domande su GitHub, StackOverflow e sulla mailing list di TensorFlow durante questo percorso.

A Google, TensorFlow supporta tutto, dalle caratteristiche del prodotto su larga scala alla ricerca esplorativa. Recentemente abbiamo lanciato importanti miglioramenti a Google Translate grazie a TensorFlow (e alle unità di elaborazione Tensor, che sono acceleratori hardware speciali per TensorFlow). Project Magenta sta lavorando su nuovi modelli basati sull'apprendimento per rinforzo che possono produrre melodie e uno studente di dottorato in visita ha recentemente collaborato con il team di Google Brain per creare un modello TensorFlow che possa interpolare automaticamente tra stili artistici. DeepMind ha anche deciso di usare TensorFlow per le sue attività di ricerca come, ad esempio, la recente produzione di interessanti modelli generativi di parlato e musica basati su audio raw.

Ci interessa molto vedere come le persone nel resto del mondo utilizzano TensorFlow. Per esempio:
  • I biologi marini australiani lo utilizzano per trovare i lamantini in decine di migliaia di foto ad alta risoluzione e capirne meglio le popolazioni, attualmente a rischio di estinzione.
  • Un intraprendente agricoltore di cetrioli giapponese ha creato un modello con TensorFlow per ordinare i cetrioli in base alla dimensione, forma e ad altre caratteristiche.
  • I radiologi lo hanno adattato per identificare segni del morbo di Parkinson nelle scansioni mediche.
  • Alcuni scienziati nella Bay Area hanno equipaggiato TensorFlow e Raspberry Pi in modo da tenere traccia del sistema di trasporto Caltrain.

Ci impegniamo costantemente a raggiungere la completa scalabilità di TensorFlow, dalla ricerca alla produzione, e dal più piccolo Raspberry Pi fino alle server farm dotate di GPU o TPU. Ma questo è molto di più di un progetto singolo open source: infatti stiamo facendo del nostro meglio per promuovere un ecosistema open source di modelli di software e di machine learning correlati.
  • Il progetto TensorFlow Serving semplifica il processo di gestione dei modelli TensorFlow in produzione.
  • I modelli “Wide and Deep” TensorFlow combinano i punti di forza dei modelli lineari tradizionali con le moderne reti neurali a livelli.
  • Per chi fosse interessato a lavorare con TensorFlow nel cloud, Google Cloud Platform ha recentemente lanciato Cloud Machine Learning che offre TensorFlow sotto forma di servizio gestito.

Inoltre il repository di modelli TensorFlow continua a ingrandirsi grazie ai contributi della community, con più di 3000 repository correlati a TensorFlow elencati su GitHub! Per partecipare alla community di TensorFlow, puoi seguire il nostro nuovo account Twitter (@tensorflow), trovarci su GitHub, porre e rispondere alle domande su StackOverflow e fare parte della lista di discussione della community.

Grazie infinite a tutti voi che avete già scelto TensorFlow per i vostri prodotti all’avanguardia, la vostra ricerca ambiziosa, i vostri start-up in forte crescita e i vostri progetti scolastici. Un ringraziamento particolare a tutti coloro che hanno contribuito direttamente al codebase. In collaborazione con la community del machine learning globale, non vediamo l’ora di poter rendere TensorFlow persino migliore nei prossimi anni!

Originariamente pubblicato sul blog Google Research

Google Assistant racchiude tutta la tecnologia e l'intelligenza che abbiamo creato per anni, da Knowledge Graph a Natural Language Processing. Assistant, per essere veramente un assistente, dovrebbe essere in grado di connettere gli utenti su tutti i servizi e le app che utilizzano regolarmente. Ciò rende realmente importante l'abilitazione di un ecosistema in cui gli sviluppatori possano offrire servizi diversificati e unici agli utenti attraverso Google Assistant.
Google Assistant racchiude tutta la tecnologia e l'intelligenza che abbiamo creato per anni, da Knowledge Graph a Natural Language Processing. Assistant, per essere veramente un assistente, dovrebbe essere in grado di connettere gli utenti su tutti i servizi e le app che utilizzano regolarmente. Ciò rende realmente importante l'abilitazione di un ecosistema in cui gli sviluppatori possano offrire servizi diversificati e unici agli utenti attraverso Google Assistant.

A ottobre abbiamo visto l'anteprima di Actions on Google, la piattaforma degli sviluppatori per Google Assistant. Actions on Google migliora ulteriormente l'esperienza dell'utente con Assistant perché ti consente di offrire i tuoi servizi ad Assistant. Già da oggi puoi creare Conversation Actions per Google Home e richiedere di diventare un partner con accesso in anteprima per le prossime funzionalità della piattaforma.

Conversation Actions per Google Home

Le Conversation Actions ti permettono di coinvolgere gli utenti fornendo loro informazioni, servizi e assistenza. E qual è l'aspetto più positivo? Che è realmente una conversazione, ossia gli utenti non dovranno abilitare una delle loro funzionalità o installare un'app, possono semplicemente chiedere di parlare con la tua azione. Per il momento abbiamo fornito due campioni di sviluppo per mostrare cosa è possibile fare, basta dire "Ok Google, parla con Number Genie" o provare con "Ok Google, parla con Eliza per il classico esercizio di intelligenza artificiale anni sessanta".


Puoi cominciare visitando il sito Actions on Google per sviluppatori. Per contribuire a creare un'esperienza di sviluppo semplice e agevole, abbiamo collaborato con diversi partner di sviluppo, compresi API.AI e Gupshup per gli strumenti di sviluppo di interazione conversazionale, DashBot e VoiceLabs per gli strumenti di analisi dati, e alcune società di consulenza come Assist, Notify.IO, Witlingo e Spoken Layer. Puoi andare a vedere l'insieme di campioni e risorse di interfaccia utente vocale (VUI) che abbiamo creato o le integrazioni dei nostri partner con accesso in anteprima che verranno lanciate nelle prossime settimane.

Introduzione alle Conversation Actions di Wayne Piekarski

Prossimamente! Actions per Pixel e Allo + Supporto per acquisti e prenotazioni

Questo è solo l'inizio e ci interessa molto vedere ciò che svilupperai per Google Assistant. Nel corso del tempo continueremo ad aggiungere altre funzionalità alla piattaforma, tra cui rendere le tue integrazioni disponibili sulle diverse superfici Assistant, come i telefoni Pixel e Google Allo. Abiliteremo inoltre il supporto per gli acquisti e le prenotazioni e promuoveremo anche integrazioni più profonde con Assistant su più mercati verticali. Gli sviluppatori interessati a creare azioni utilizzando queste nuove caratteristiche possono registrarsi al programma per partner con accesso in anteprima e contribuire allo sviluppo futuro della piattaforma.
Crea, esplora e comunicaci la tua opinione su Actions on Google! Resta in contatto, non dimenticare di iscriverti alla newsletter, partecipa alla nostra community Google+ e usa il tag "actions-on-google" su StackOverflow.

Pubblicato da Jason Douglas, PM Director per Actions on Google

Oggigiorno molti utenti preferiscono utilizzare un login federato, come nel caso di Google Sign-in, Facebook, Twitter e altri provider, e non dover creare un nuovo account per ciascun servizio che utilizzano. Ogni utente ha il suo provider di login federato preferito e sarebbe impegnativo dover integrare e gestire ognuno di questi login nella tua app. Ed è in questo caso che Firebase Authentication può aiutarti.
Oggigiorno molti utenti preferiscono utilizzare un login federato, come nel caso di Google Sign-in, Facebook, Twitter e altri provider, e non dover creare un nuovo account per ciascun servizio che utilizzano. Ogni utente ha il suo provider di login federato preferito e sarebbe impegnativo dover integrare e gestire ognuno di questi login nella tua app. Ed è in questo caso che Firebase Authentication può aiutarti.

Firebase Authentication supporta molti provider popolari di login federati. Devi solo integrarli con Firebase Authentication e lasciare che Firebase gestisca automaticamente multipli provider di login federati da dietro le quinte.

Tuttavia gli utenti, a seconda della loro provenienza, potrebbero preferire dei provider per i quali Firebase ancora non offre un supporto incorporato. Ad esempio in Giappone e in molti altri paesi asiatici, Login LINE è molto diffuso e utilizzato da centinaia di milioni di utenti, quindi consigliamo anche a te di supportarlo. Per fortuna è piuttosto semplice integrare Login LINE, proprio come molti altri login federati, con Firebase Authentication utilizzando Custom Auth.

In uno dei nostri precedenti blog post, abbiamo spiegato come supportare il login federato non disponibile out-of-the-box per Firebase Authentication sul Web utilizzando l'SDK JavaScript. In questo post, ti mostreremo come integrarlo con il Login LINE su iOS e Android.

Panoramica del design



Ecco come si presenta il flusso del login.

Fase 1: usa l'SDK Login LINE per eseguire l'accesso dell'utente e acquisire il suo Access Token LINE

Fase 2: invia il suo Access Token LINE al tuo server e convalidalo con il server di autenticazione LINE. Se il token è valido, crea un token Firebase Custom Auth corrispondente all'utente e rinvialo al dispositivo dell'utente.

Fase 3: usa il token Firebase Custom Auth per eseguire l'accesso a Firebase dal dispositivo.

Creiamolo!

Preparazione


Dovrai fare un po' di lavoro di settaggio per ottenere l'account aziendale LINE e preparare il tuo progetto Firebase.
  • Segui questi passaggi per impostare il tuo account aziendale LINE e integrare l'SDK LINE alla tua app.
  • Quindi accertati di aver aggiunto la libreria Firebase Authentication alla tua app (iOS/Android)
  • Puoi usare il nostro SDK Server di Firebase per generare il token Custom Auth, ma è facoltativo perché qualsiasi libreria JSON Web Token può eseguire questa operazione.

Avvia il flusso Login LINE


Fai riferimento al documento Login LINE (iOS/Android) per integrare l'SDK LINE alla tua app e implementare il flusso LINE Login. Una volta che l'accesso dell'utente è riuscito, puoi ottenere il suo Access Token LINE nel seguente modo:

iOS (Objective-C)
NSString *lineAccessToken = self.lineAdapter.getLineApiClient.accessToken;

Android
LineAuthManager authManager = LineSdkContextManager.getSdkContext().getAuthManager(); final String accessToken = authManager.getAccessToken().accessToken;

Quindi puoi utilizzare la libreria di rete preferita per inviare il token di accesso al tuo server per la convalida. In questo esempio di codice, uso GTM HTTP Fetcher per iOS e Volley per Android.

iOS (Objective-C)
NSURL *url = [NSURL URLWithString:@"https:///verifyToken"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; [request setValue:@"application/json" forHTTPHeaderField:@"content-type"]; NSDictionary *token = @{@"token" : lineAccessToken}; NSError *error; NSData *requestBody = [NSJSONSerialization dataWithJSONObject:token options:kNilOptions error:&error]; [request setHTTPBody:requestBody]; GTMHTTPFetcher *fetcher = [GTMHTTPFetcher fetcherWithRequest:request]; [fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { if (!error) { // Extract Firebase Custom Auth token from response // ・・・ } }];

Android
HashMap validationObject = new HashMap<>(); validationObject.put("token", accessToken); Response.Listener responseListener = new Response.Listener() { @Override public void onResponse(JSONObject response) { // Extract Firebase Custom Auth token from response // ・・・ } }; JsonObjectRequest fbTokenRequest = new JsonObjectRequest( Request.Method.POST, "https:///verifyToken", new JSONObject(validationObject), responseListener, errorListener); NetworkSingleton.getInstance(activity).addToRequestQueue(fbTokenRequest);

Scambia l'Access Token LINE con il token Firebase Custom Auth


Avrai bisogno di un server per convalidare l'Access Token LINE e generare il token Firebase Custom Auth corrispondente a quell'utente. Puoi crearne uno semplice con l'SDK Server per Node.js di Firebase e un server web Express.

Innanzitutto il server riceve l'Access Token LINE dal dispositivo dell'utente e lo convalida utilizzando l'API LINE Social Rest. Non dimenticare di verificare il valore channelId nella risposta dell'API per far sì che il token di accesso sia effettivamente emesso per la tua app. Questo serve a prevenire un attacco di spoofing in cui gli aggressori riutilizzano il token di accesso da altre app/canali per tentare di accedere alla tua app.

Server (Node.js)
app.post('/verifyToken', (req, res) => { if (!req.body.token) { return res.status(400).send('Access Token not found'); } const reqToken = req.body.token; // Send request to LINE server for access token verification const options = { url: 'https://api.line.me/v1/oauth/verify', headers: { 'Authorization': `Bearer ${reqToken}` } }; request(options, (error, response, body) => { if (!error && response.statusCode === 200) { const lineObj = JSON.parse(body); // Don't forget to verify the token's channelId to prevent spoof attack if ((typeof lineObj.mid !== 'undefined') && (lineObj.channelId === myLINEChannelId)) { // Access Token Validation succeed with LINE server // Generate Firebase token and return to device const firebaseToken = generateFirebaseToken(lineObj.mid); // Update Firebase user profile with LINE profile updateUserProfile(reqToken, firebaseToken, lineObj.mid, () => { const ret = { firebase_token: firebaseToken }; return res.status(200).send(ret); }); } } const ret = { error_message: 'Authentication error: Cannot verify access token.' }; return res.status(403).send(ret); }); } });

Dopo aver eseguito la convalida dell'Access Token LINE, utilizza l'SDK Server Firebase per generare il token Firebase Custom Auth e restituirlo al dispositivo dell'utente. Puoi riutilizzare l'ID utente LINE per il tuo ID utente Firebase.

Server (Node.js)
function generateFirebaseToken(lineMid) { var firebaseUid = 'line:' + lineMid; var additionalClaims = { provider: 'LINE' }; return firebase.auth().createCustomToken(firebaseUid); }

Abbiamo anche l'SDK Java per il Server Firebase.

Puoi inoltre utilizzare soluzioni come App Engine Flexible Environment o Cloud Functions per non doverti occupare della gestione del server.

Esegui il login a Firebase utilizzando il token Firebase Custom Auth


Dopo aver ricevuto questo token, usalo per eseguire il login dell'utente a Firebase:

iOS (Objective-C)
[[FIRAuth auth] signInWithCustomToken:firebaseToken completion:^(FIRUser * _Nullable user, NSError * _Nullable error) { // Process sign in result // ・・・ }];

Android
FirebaseAuth.getInstance() .signInWithCustomToken(firebaseToken) .addOnCompleteListener(new OnCompleteListener() { // Process sign in result // ・・・ });

Provalo!


Il codice mostrato è open source. Non esitare a scaricarlo e provarlo. https://github.com/firebase/custom-auth-samples/tree/master/Line

Da qualche giorno abbiamo annunziato il lancio del supporto preliminare di Windows per TensorFlow.
Da qualche giorno abbiamo annunziato il lancio del supporto preliminare di Windows per TensorFlow.


Il supporto nativo per TensorFlow su Windows è stata una delle prime richieste che abbiamo ricevuto dopo aver reso TensorFlow open source. Benché alcuni utenti di Windows siano riusciti a eseguire TensorFlow in un contenitore Docker, volevamo fornire un'esperienza più completa che comprendesse il supporto GPU.

Grazie alla release di TensorFlow r0.12, ora offriamo il pacchetto TensorFlow nativo per Windows 7, 10 e Server 2016. Questa release consente di accelerare la formazione per TensorFlow con qualsiasi GPU che esegua CUDA 8.

Abbiamo pubblicato l'ultima release in forma di pacchetto pip in PyPI in modo da poter installare TensorFlow con un unico comando:
     C:\> pip install tensorflow
Per il supporto GPU:
     C:\> pip install tensorflow-gpu


Ulteriori dettagli sul supporto Windows e sulle altre nuove funzionalità di r0.12 sono illustrati nelle note di release.

Non vediamo l'ora di poter offrire a più persone l'opportunità di utilizzare TF alla massima velocità. Per essere il primo a sapere delle future release, seguici su Twitter @tensorflow.

Riconoscimenti

Molte persone hanno contribuito a rendere possibile questa release. In particolare vorremmo ringraziare Guenther Schmuelling e Vit Stepanovs di Microsoft per aver contributo significativamente al supporto di Windows.

Pubblicato da Derek Murray, Software Engineer

Sapevi che Firebase include un'intera gamma di caratteristiche che semplificano il tuo lavoro da sviluppatore e ti consentono di creare app fantastiche?

Ok, va bene. Sicuramente lo sapevi già.

Ma avrai notato che da qualche tempo parliamo di "app" invece che di "giochi". Ed è perché le nostre librerie mobili funzionano molto bene finché si tratta di scrivere app in Swift, Java o Objective-C.
Sapevi che Firebase include un'intera gamma di caratteristiche che semplificano il tuo lavoro da sviluppatore e ti consentono di creare app fantastiche?

Ok, va bene. Sicuramente lo sapevi già.

Ma avrai notato che da qualche tempo parliamo di "app" invece che di "giochi". Ed è perché le nostre librerie mobili funzionano molto bene finché si tratta di scrivere app in Swift, Java o Objective-C.

Il problema è che la gran parte degli sviluppatori di giochi crea motori di gioco in C++ o utilizzando popolari piattaforme di terze parti come Cocos2d o Unity per i loro giochi mobili. Anche se avevamo una versione C++ disponibile della libreria Firebase in beta già da tempo, i nostri sviluppatori Unity hanno dovuto lavorare con un plugin piuttosto antiquato del Firebase Database...

… fino a ora! Grazie al duro lavoro di molti dei nostri ingegneri e il tuo feedback continuo, ora abbiamo un nuovissimo SDK Unity ufficialmente supportato, che include molte più funzionalità della piattaforma Firebase.

Cosa significa questo per uno sviluppatore Unity? Significa che da ora puoi sfruttare molte delle numerose funzionalità di Firebase che abbiamo annunciato lo scorso maggio. Tra cui:

Firebase Analytics. Un pacchetto di analisi gratuito e illimitato per registrare gli eventi che avvengono all'interno del tuo gioco. Scopri dove si bloccano i tuoi giocatori, in che modo aumenta il pubblico col passare del tempo o dove i giocatori di paesi diversi spendono la loro preziosa valuta. Tutto questo è facile da registrare con Firebase Analytics e, grazie all'integrazione con BigQuery, puoi eseguire operazioni di data mining piuttosto avanzate.

Firebase Real-time Database. Si tratta di un database nel quale i dati dell'app si sincronizzano magicamente su tutti i dispositivi, di solito nel giro di poche centinaia di millisecondi. È ideale per le caratteristiche quasi in tempo reale come le chat in-game, la sincronizzazione dei giochi salvati per l'utente su tutti i dispositivi o potenzialmente per giochi di strategia a turni, da tavolo o di carte. Detto questo, non ti consigliamo di usarlo per un gioco multiplayer sparatutto o MOBA. So che con gli sviluppatori di giochi, dobbiamo essere un po' più espliciti su cosa significhi "in tempo reale" ;)

Dynamic Links. Si tratta di link diretti che puoi utilizzare per indicare ai giocatori qualsiasi elemento del gioco (se l'hanno installato) o indirizzarli al Play Store/App Store (se non l'hanno installato). Penso che in questo caso il miglior utilizzo per gli sviluppatori di giochi sia adoperare Dynamic Links per contribuire alla condivisione in-app. Puoi usare Dynamic Links per condividere il replay di un livello o un collegamento a un personaggio stupendo, a una fortezza o ad altri nuovi contenuti generati dai tuoi utenti. Se non hai voglia di creare la tua interfaccia per fare tutto ciò, Firebase Invites può generarne una per te, mettendo un link diretto in un'email o un messaggio SMS ben formattato.

Authentication. "Caspita, mi piace davvero passare tutto il tempo a creare sistemi di autenticazione invece di concentrarmi sul mio gioco". Non credo di aver mai sentito uno sviluppatore di giochi dire una cosa del genere. Con Firebase Auth, è più facile fare accedere i tuoi utenti tramite provider di terze parti come Facebook, Google e Github, o creare nomi utente e sistemi di password personalizzati.

Cloud Messaging. Firebase Cloud Messaging consente di inviare notifiche sia ai dispositivi iOS sia Android mediante un unico endpoint. Inoltre ti permette di inviare notifiche tramite il pannello di Firebase Notifications e ciò consente ai membri del team meno tecnici di inviare queste notifiche senza dover scrivere alcun codice di server personalizzato o effettuare chiamate curl.

Remote Config. Questa funzione ti lascia aggiornare i valori del gioco dal cloud. Onestamente questa è la caratteristica che mi entusiasma di più per quanto riguarda i giochi. Chiunque abbia progettato un gioco di tower defense sa che un solo dato statistico sbilanciato in una singola unità può sfalsare l'equilibrio dell'intero gioco. Grazie a Remote Config puoi regolare questi valori dal cloud e poi sfruttare Firebase Analytics per vedere se ottieni i risultati previsti. Puoi anche usare Remote Config per fornire valori personalizzati a specifici gruppi di persone, come i tuoi giocatori esperti.

Puoi avvalerti di questa libreria con i dispositivi Android e iOS, infatti il team ha aggiunto dei metodi in-stub per Windows, OSX e Linux, quindi non dovrai preoccuparti di aggiungere nessun tipo di codice condizionale se il tuo gioco viene anche usato su desktop. Come nota a margine, la parte Real-time Database dell'SDK opera direttamente all'interno dell'editor di Unity, rendendo così il testing e il debugging un po' più semplice.

Ti incoraggiamo a provare l'SDK di Firebase per Unity! È disponibile proprio qui e include un'intera gamma di caratteristiche che semplificano il tuo lavoro da sviluppatore e ti consentono di creare fantastici... giochi?

Che soddisfazione scrivere "giochi'!

Con Firebase Dynamic Links, abbiamo reso la condivisione dei link diretti nella tua app molto più semplice, grazie a un singolo link che funziona sia per iOS sia per Android. Può anche sopravvivere al processo di installazione dell’app dall’App Store a Google Play. Dynamic Links ha molti impieghi utili nelle campagne di email o di social media, ma uno degli utilizzi più importanti è consentire agli utenti di condividere gli elementi della propria app con gli amici. Un gioco, ad esempio, può usufruire di Firebase Dynamic Links per condividere i replay di un livello, così i giocatori possono sfidare gli amici a battere il loro punteggio.
Con Firebase Dynamic Links, abbiamo reso la condivisione dei link diretti nella tua app molto più semplice, grazie a un singolo link che funziona sia per iOS sia per Android. Può anche sopravvivere al processo di installazione dell’app dall’App Store a Google Play. Dynamic Links ha molti impieghi utili nelle campagne di email o di social media, ma uno degli utilizzi più importanti è consentire agli utenti di condividere gli elementi della propria app con gli amici. Un gioco, ad esempio, può usufruire di Firebase Dynamic Links per condividere i replay di un livello, così i giocatori possono sfidare gli amici a battere il loro punteggio.


Anche se questo tipo di condivisione da utente-a-utente può essere molto efficace (il passaparola rimane tuttora uno dei più potenti veicoli per scoprire nuove app), il processo di generazione di un link diretto, e come inviarlo più facilmente ai propri amici tramite un messaggio SMS o un'email, rappresenta una bella porzione del lavoro. Ed è tempo che la maggior parte degli sviluppatori preferirebbe trascorrere a svolgere altre attività come la creazione della propria app.

Questa è l’idea che ha ispirato Firebase Invites: volevamo utilizzare il processo di condivisione di Dynamic Links tramite SMS o email e semplificarlo per gli sviluppatori. Ora che abbiamo osservato alcuni casi di Firebase Invites nel mondo reale, vogliamo condividere un paio di consigli con te su come ottenere il massimo da Firebase Invites e renderlo più interessante.

Condividere qualcosa di specifico


Dal momento che Firebase Invites è integrato in Dynamic Links, gli utenti possono condividere le informazioni specifiche del link diretto con i loro amici. Ciò significa che chi riceve l’invito può immediatamente avviare l’app con un’esperienza connessa all'invito sul quale ha cliccato invece della solita schermata standard iniziale.

Dovresti approfittarne per assicurarti di condividere informazioni specifiche sulla tua app e non creare solamente una funzione generica come "Condividi questa app con i miei amici". Per un’app di esercizio fisico, accertati che gli utenti possano condividere il loro ultimo allenamento o percorso di jogging con gli amici oppure per un’app di trasporto in condivisione con codice di riferimento, fai in modo che gli utenti possano condividere il codice con i loro amici.

In questo senso, dovresti assicurarti che qualunque interfaccia adoperi per il processo di condivisione sia in accordo con il contenuto che gli utenti vogliono condividere. Se inserisci solo un’opzione di condivisione generica da qualche parte nel menu delle impostazioni, probabilmente non noterai un enorme incremento in uso o nel numero di installazioni. Al contrario, se inserisci un pulsante "Condividilo!" vicino al percorso di jogging o al codice di riferimento, i tuoi utenti si sentiranno molto più propensi a condividerlo.

Personalizzare le tue email


Quando mandi un invito email da Firebase Invites, la libreria può popolare automaticamente l'email con immagini e testo presi direttamente dagli elenchi di Play Store o App Store della tua app. Di sicuro non è male dal punto di vista della convenienza perché ti lascia creare un’email ben formattata e piena di contenuti con poche righe di codice.

Se stai utilizzando Firebase Invites per una funzione di condivisione di app generica, può andare bene, ma se lo stai usando per condividere una parte specifica dei contenuti (come ti consigliamo), è possibile personalizzare l’email in uscita sfruttando il metodo setEmailHtmlContent su Android. Ciò dà al client la possibilità di fornire qualsiasi HTML che desideri, come il contenuto del messaggio email in uscita, in modo da poter visualizzare un messaggio email che sia più pertinente al contenuto che gli utenti stanno cercando di condividere.

Yummly, ad esempio, ha utilizzato Firebase Invites per avviare una funzione che consente agli utenti di condividere ricette specifiche con i loro amici. Personalizzando l'email in uscita sul client, Yummly ha fornito descrizioni dettagliate e immagini delle ricette a ogni destinatario. Presentare subito le informazioni rilevanti rende l’esperienza più interessante per i destinatari e ciò può portare a un maggiore coinvolgimento rispetto ai normali contenuti delle email Firebase Invites.

Siccome siamo in argomento, perché non usare Firebase Remote Config insieme ad App Invites per eseguire rapidamente l’iterazione per le diverse versioni del contenuto delle email? Se predisponi che tua app afferri il testo dell’email in uscita da Remote Config piuttosto che impostarlo come hardcoded nella tua app, puoi sperimentare con le nuove email senza dover aggiornare l’app. Dopo qualche tentativo, riuscirai a capire quali sono tipi di contenuti più convincenti nelle email.

Supportare correttamente gli utenti iOS


Una limitazione importante di Firebase Invites da capire è che, mentre gli utenti Android possono inviare e ricevere inviti in qualsiasi momento, e i tuoi utenti iOS possono ricevere inviti senza problemi, se desideri inviare un invito su iOS, l'utente deve aver eseguito l’accesso su Google.

Per molti sviluppatori, questo non è un problema, perché incoraggiano gli utenti a effettuare l’accesso e Google è uno dei loro provider preferiti. Ma altre app potrebbero non disporre dell’accesso o non supportare l’accesso su Google, il che rende Firebase Invites un po’ meno allettante su iOS. Molti sviluppatori a questo punto sono tentati di pensare: "Beh, va bene. Mi limiterò a supportare Firebase Invites sulla mia app Android".

Il problema con questo approccio è che se uno sviluppatore supporta l'invio di inviti da un dispositivo Android, i suoi utenti manderanno gli inviti a tutti i rispettivi amici, sia agli utenti iOS sia a quelli Android! E se dal lato iOS non è disponibile la libreria Firebase Invites per leggere l’invito, i dati corrispondenti al link diretto (e tutta la magia di Firebase Invites) andranno persi.

Quindi consigliamo che, persino se decidi di non supportare l'invio di inviti su iOS, dovresti almeno supportare la capacità di ricevere inviti su iOS. In questo modo, gli utenti iOS potranno ancora recuperare tutte le informazioni relative al link diretto quando accettano un invito, per un'esperienza di piena condivisione.

La condivisione fa la differenza!


Sembra che quasi tutte le app presentino qualche tipo di contenuto – sia che si tratti di un bel replay in un gioco, una foto divertente o un codice di riferimento – che potrebbe trarre beneficio dalla condivisione. E immagino che nell’elenco delle cose da fare per la tua app, ti sei appuntato la voce "Condivisione per gli utenti di contenuto designato con gli amici" che stai ancora pensando di implementare non appena hai qualche ciclo di cui occuparti.

Grazie a Firebase Invites, possiamo snellire molto il processo e spostare queste funzioni dalla categoria "Me ne occuperò prima o poi" alla categoria "Frutti facili da raccogliere" o almeno alla categoria dei "Frutti da raccogliere con una scaletta" (purtroppo le metafore sui prodotti agricoli non sono mai state il mio forte). Provalo! Leggi la nostra documentazione e consulta le nostre migliori practice per sfruttare al meglio i vantaggi offerti da Firebase Invites.

Pubblicato da Todd Kerpelman Developer Advocate

Da qualche mese il secondo gruppo di Launchpad Accelerator, il programma globale high-touch di Google per start-up in fase avanzata, si è presentato per affrontare e risolvere le difficoltà relative alle app con l'aiuto di mentori presso la sede centrale di Google.
Da qualche mese il secondo gruppo di Launchpad Accelerator, il programma globale high-touch di Google per start-up in fase avanzata, si è presentato per affrontare e risolvere le difficoltà relative alle app con l'aiuto di mentori presso la sede centrale di Google.

Cosa ha imparato il gruppo che vorrebbe condividere con gli sviluppatori di tutto il mondo? Guarda il video seguente per scoprire le soluzioni offerte da 3 diverse start-up e un esame approfondito della sfida Web mobile e della soluzione offerta per MagicPin.



Startup

MagicPin, sviluppata in India, è un'app di social network che gestisce una base utenti locale in prossimità di un determinato luogo, permettendo così ai commercianti di connettersi con destinatari specifici.

Sfida Mobile web

In India scaricare un’app comporta un impegno notevole. In media un utente ha 5 o 6 app sul suo telefono. Anshoo Sharma, Cofondatore e CEO di MagicPin, afferma: “Se vuoi che la prossima app a essere scaricata sia la tua, devi sormontare una grande barriera”.

Jordan Adler, Google Developer Advocate, aggiunge: “I dispositivi nei mercati come l'India hanno uno spazio limitato: in media 128 MB di memoria. E dopo aver aggiunto le funzionalità di sistema, all’utente rimangono solo circa 40 byte di spazio. Se una tipica APK è di pochi megabyte, l’utente potrà tenere solo un paio di app prima di non poterne scaricare altre”.

Soluzione

Jordan Adler: “Uno dei principali vantaggi offerti dalle Progressive Web App è che non richiedono alcun impegno iniziale (ossia scaricare l'app). È possibile cominciare a instaurare un rapporto con l'utente tramite l'interfaccia Web e, nel corso del tempo, l'app Web può diventare più come un’app nativa, essere ospitata sul dispositivo, utilizzare il contenuto della cache e operare in modalità offline”.

Anshoo Sharma: “Nell’ultima settimana e mezzo ci siamo impegnati per riuscire a lanciare una versione micro della nostra piattaforma su Progressive Web App. E il risultato è stato eccezionale! Anche senza usare le app (mobili) gli utenti possono avere una buona esperienza”.

Informazioni su Launchpad Accelerator

Launchpad Accelerator è un acceleratore di sei mesi che consente alle start-up in fase avanzata che sviluppano app nei mercati emergenti di espandersi con successo. Ti presentiamo un video di due minuti sull’Accelerator.