Blog

Search by tag: programmazione

Ho il tempo per un post veloce, dopo aver passato un pomeriggio ad aggiornare la mia app myChatDroid for Facebook alla versione 4.3.0.

Per la precisione ho impiegato 1 ora tra l’aggiornamento del SDK di Facebook per Android (che rende deprecato il permesso “offline_access”), la traduzione dell’interfaccia in lingua italiana (prima era solo in inglese) e altri fix minori. Altre 3 ORE le ho passate per capire il motivo per cui, dopo l’invio del pacchetto aggiornato a Google Play (ex Android Market), l’aggiornamento sul dispositivo falliva restituendo un errore abbastanza assurdo, dal mio punto di vista:

File pacchetto non firmato correttamente


o in inglese…

Package file not signed correctly


… l’assurdità stava nel fatto che, al contrario di quanto sosteneva il mio dispositivo Android, il pacchetto APK era stato compilato e firmato utilizzando esattamente la stessa procedura, con lo stesso keystore di sempre e la stessa password. E, tra l’altro, il pacchetto era stato accettato dal pannello sviluppatori di Google Play, il quale invece, in caso di errore del certificato, dovrebbe impedire il caricamento del pacchetto APK.

Bene, dopo tanti sbattimenti ho scoperto che l’aggiornamento del JDK (Java Development Kit) da Sun JDK 6 a Oracle JDK 7 sul mio portatile ha cambiato il funzionamento di qualcosa, probabilmente del programma jarsigner, che a quanto pare firma i pacchetti in modo diverso dalla versione precedente, non permettendo ad Android di riconoscere la firma.

Il problema non riguarda soltanto gli aggiornamenti, per i quali poteva tradursi in un difetto di firma “diversa” da quella del pacchetto già installato, ma anche le nuove installazioni delle app… il tool di JDK 7 genera dei pacchetti non validi e quindi è completamente inutilizzabile!!

Credo che questo problema dovrebbe essere quanto meno documentato nel manuale di Android…

La sostituzione di JDK 7 con JDK 6 ha risolto il problema e, dopo aver ricompilato e ripubblicato myChatDroid, adesso l’app si riesce a scaricare correttamente su tutti i dispositivi :)

Un ringraziamento a @GeekMike per aver pubblicato il post che mi ha messo sulla giusta strada!

UPDATE: da un’indagine più approfondita è emerso che la causa del problema è il diverso algoritmo “digest” di default tra le JDK; Java 6 utilizza SHA1, mentre Java 7 utilizza SHA-256.
L’attuale SDK Android r18 non supporta ne’ questo algoritmo, ne’ l’impostazione di un algoritmo diverso da quello di default, ma a partire dalla r20 tutto ciò dovrebbe essere gestito correttamente. E’ già possibile scaricare una preview della r20 dal sito tools.android.com.

Link al bug tracker ufficiale


CheckItOut! Google Checkout per Android
Android

Ho appena rilasciato la mia terza applicazione per Android! :)

CheckItOut! è nata da una mia personalissima esigenza: controllare le vendite delle mie app senza utilizzare lo scomodissimo sito di Google Checkout, per il quale non esiste ancora una versione mobile.

E siccome per me non c’è goduria più grande di fabbricare con le mie manine ciò che mi serve… detto fatto! Ecco CheckItOut!, l’applicazione per visualizzare l’elenco degli ordini e lo storico dei guadagni di Google Checkout in modo semplice e veloce!

CheckItOut! permette la visualizzazione delle seguenti sezioni di Google Checkout:

  • Ordini
  • Archivio
  • Pagamenti

Spero che la piacevole esperienza di BPOnline si possa ripetere, questa volta a livello mondiale: aspetto tanti commenti, suggerimenti o anche critiche (spero poche)!

Per scaricare CheckItOut! seguite uno di questi link:
Market (versione web)
Market (dispositivi Android)

E per finire… la pagina ufficiale di CheckItOut!.


February 25, 2011 17:49 - 6 comments
BPOnline BancoPosta per Android
Android

Ho finalmente pubblicato la mia prima applicazione sul Market Android! :)

Si chiama BPOnline… l’applicazione rende disponibili, tramite una comoda interfaccia semplificata, alcuni dei servizi più utilizzati del sito BancoPostaonline di Poste Italiane.

Utilizzando BPOnline è possibile accedere alle seguenti funzioni:

  • Saldo conto;
  • Lista movimenti conto;
  • Saldo PostePay;
  • Lista movimenti PostePay;
  • Ricarica telefonica (con addebito su conto o carta PostePay);
  • Ricarica PostePay (con addebito su conto o carta PostePay);
  • altre funzionalità saranno aggiunte al più presto!

Oggi ho messo sul market la versione 1.0, ma prevedo aggiornamenti frequenti, anche grazie alle segnalazioni di chi vorrà provare l’applicazione.

Ecco i link per la pagina del Market:
Market (versione web)
Market (dispositivi Android)

Per maggiori informazioni e aggiornamenti… pagina ufficiale di BPOnline.


July 08, 2009 16:57 - 32 comments

Ok, vi risparmio la battuta sugli insetti :)

Facebook DeveloperFacebook mette a disposizione di tutti gli utenti/programmatori un comodo set di funzioni, che in gergo si chiamano API (Application Programming Interface), scritte in vari linguaggi web, per interagire con la piattaforma del popolare social network e sviluppare le proprie applicazioni, siano esse integrate in Facebook (la maggior parte sono così) oppure applicazioni “stand-alone”, cioè fruibili da un sito esterno ma collegate alla banca dati di Facebook.

Fb rende l’impatto tra il programmatore e le API molto semplice, ponendolo di fronte ad un’interfaccia per gli sviluppatori che guida passo passo nella creazione delle applicazioni, integrandosi con utili strumenti come il Wiki ed una Test Console, che permette di effettuare chiamate di prova alle varie funzioni, specificandone i parametri, e ricevendo in risposta il relativo output in formato leggibile.

Le API si compongono di una parte che gira lato server dell’utente, le librerie client, ed una parte in formato markup che viene processata dal server di Facebook, il quale produce normali tag HTML interpretando un linguaggio ideato da Facebook chiamato FBML.

Il programmatore potrà utilizzare le librerie client ufficiali in PHP oppure una di quelle non ufficiali, disponibili in tantissimi linguaggi tra cui Java, Ruby on Rails, Perl, Python, .Net.
Con queste librerie bisognerà produrre un codice sorgente, che avrà un output in HTML, XML oppure FBML e che, anche nel caso di applicazioni da integrare in Facebook, dovrà essere ospitato presso un server web esterno per poi essere collegato a Facebook tramite l’interfaccia di amministrazione dell’applicazione. Quindi bisognerà trovare un hosting web, anche gratuito, che fornisca lo spazio per l’applicazione.

Facebook non chiede nient’altro, perchè consente ai programmatori di salvare le informazioni utilizzate dalle applicazioni in un vero e proprio database, il DataStore, in cui è possibile memorizzare i dati necessari a ciascun utente, senza doversi procurare un database su un server esterno, che costituirebbe una spesa sicuramente più grossa dello spazio web.
Anche per quanto riguarda il database Facebook ha “inventato” qualcosa: si chiama FQL, ed è un derivato del SQL che ha lo scopo di interrogare il database di Facebook ponendo alcune restrizioni sui permessi di accesso alle tabelle, perchè ogni utente può accedere solo alle informazioni proprie e dei propri amici che le condividono, non di più.

Per iniziare, una applicazione di esempio potrebbe essere questa:

<?php
require_once 'client/facebook.php';

$appapikey = 'YOUR_API_KEY';
$appsecret = 'YOUR_APP_SECRET';
$facebook = new Facebook($appapikey, $appsecret);

$user_id = $facebook->require_login();
$friends = $facebook->api_client->friends_get();
?>

<p>Ciao, <fb:name uid="<?= $user_id ?>" useyou="false" />!</p>

<p>I tuoi amici:
<ul>
<? foreach ($friends as $friend) { ?>
  <li><fb:name uid="<?= $friend ?>" useyou="false" /></li>
<? } ?>
</ul></p>
?>

YOUR_API_KEY e YOUR_APP_SECRET vanno sostituiti con i codici assegnati da Facebook, che identificano univocamente l’applicazione e le consentono di effettuare le chiamate alle API per le quali è stata autorizzata inizialmente.

L’oggetto $facebook diventa l’interfaccia verso la piattaforma, la quale viene interrogata tramite le varie funzioni in PHP5 (ad oggetti).

I tag che inziano con <fb: sono i tag FBML di cui parlavo prima: essi verranno interpretati da Facebook e diventeranno, in questo caso, dei collegamenti ai profili specificati nell’attributo uid. Il particolare il primo diventerà un link al profilo dell’utente dell’applicazione ($user_id) e l’altro sarà un link al profilo di uno degli amici ($friend).

Per iniziare può bastare quanto detto finora, ma l’appetito vien mangiando… le possibilità sono infinite!

Per esempio utilizzando la seguente chiamata

$facebook->api_client->call_method("facebook.status.get",
                            array('uid'=>$user_id, 'limit'=>10));

ho ottenuto tutto il necessario per realizzare sul mio sito la parte del modulo Social Networks relativa a Facebook (beh… in realtà ho dovuto realizzare un wrapper RSS perchè il sito è in Ruby On Rails, mentre la libreria è in PHP).

Buon divertimento! :)


Ruby On RailsEra da un po’ che ci lavoravo, ma gli impegni lavorativi fino ad oggi avevano sempre prevalso: ho fatto il porting del sito alla nuova versione 2.3.2 di Rails!
(era fermo alla 1.2.6)

I miglioramenti sono tanti, ma (tanto per cambiare) per la maggior parte invisibili. Beh, rimane la soddisfazione di aver fatto una cosa per benino!

Il risultato più evidente si può osservare nel nuovo modulo Social Networks, che integra le ultime condivisioni dai siti “2.0” che utilizzo di più… ne sono molto soddisfatto!

La notizia veramente positiva è che adesso c’è tanta carne al fuoco, perchè non ho intenzione di lasciar morire dentro la mia memoria, al momento moooolto volatile, quelle quattro cose che ho imparato: ho utilizzato la API di Facebook, YouTube e Flickr; ho sperimentato il fragment caching di Rails; mi sono deliziato con le nuove API i18n di Rails, per l’internazionalizzazione e la localizzazione delle pagine.
Insomma, ne avrò ancora per qualche altro post! :)

Concludo lodando ancora l’eleganza estrema di Ruby on Rails, è una goduria programmarlo! Certo non è a livelli “enterprise”… ma è VERAMENTE DIVERTENTE!! XD

PS: è in programma un ritoccone alla grafica… ma il lavoro è lungo!