Pubblicare sullo Store

Pubblicare le vostre app sullo Store vi consente di raggiungere velocemente nuovi clienti che potranno scoprire, installare ed utilizzare le vostre app. Per iniziare la pubblicazione prima di tutto bisogna aderire al programma di Partnership di Open2b, dopodiché potrete proporre a Open2b le app che desiderate pubblicare.

Perché una app possa essere pubblicata sullo Store, deve soddisfare alcuni requisiti di sicurezza e affidabilità più stringenti rispetto alle app esterne:

Se l'app mantiene lato server delle informazioni sul negozio o deve autenticarlo prima di poter essere utilizzata allora deve:

Al momento della pubblicazione bisognerà indicare quali sono le autorizzazioni che l'app richiede, ad esempio se può utilizzare le API e quali metodi può chiamare. Le autorizzazioni richieste devono essere il minimo indispensabile per il corretto funzionamento dell'app.

Se la vostra app offre funzionalità molte diverse una dall'altra e non correlate tra di loro allora valutate se non sia meglio realizzare diverse app ognuna adibita ad una specifica funzionalità in modo che i clienti possano scegliere quale installare.

Prima di procedere alla realizzazione di un'app da pubblicare sullo Store è preferibile contattarci in quanto vi potremo dare indicazioni più precise per evitare intoppi che possano ritardare la pubblicazione sullo Store.

Aggiornamenti

Risiedendo sui vostri server potete in ogni momento aggiornare l'app per correggere bug o migliorarne le funzioni e l'aspetto. Alcuni cambiamenti dell'app invece richiedono un aggiornamento dell'installazione su ogni negozio e in particolare sono:

Quando ci sono degli aggiornamenti, il cliente potrà decidere se e quando fare l'aggiornamento. Pertanto dovrete essere pronti, in caso di aggiornamento, a supportare versioni diverse della vostra app installate sui diversi clienti, ossia versioni con diverso nome, codice, indirizzo, icona o permessi. Dovrete lasciare ai clienti un periodo di tempo adeguato prima che si renda necessario l'aggiornamento per continuare ad usare l'app.

Installazione e rimozione da un negozio

Se l'app pubblicata sullo Store è composta sono da pagine HTML e JavaScript allora non ha bisogno di gestire l'installazione e la rimozione in quanto se ne occuperà lo Store. Anche se l'app ha una parte lato server ma non la usa per memorizzare informazioni sul negozio e non ha bisogno di autenticarlo anche in questo caso non ha bisogno di gestire l'installazione e la rimozione dal negozio.

L'installazione di una app pubblicata sullo Store viene avviata da un amministratore del negozio. Al momento dell'installazione, l'app riceverà ad un suo indirizzo adibito all'installazione un POST HTTP con i dati per concludere l'installazione. L'app verifica che la richiesta di installazione è autentica, salva le informazioni che le serviranno per accedere al negozio e risponderà con uno stato 200 OK. Una risposta diversa comporta l'annullamento dell'installazione.

La richiesta di installazione

Il contenuto inviato per POST è in formato application/x-www-form-urlencoded e comprende un solo parametro chiamato auth che ha una forma come la seguente:

XoNxV5ITJVOztj8rReXC19ECnXQ9yElfWP0dE1Wwu8Q.eyJzaG9wIjoiMTIzNDU2Nzg5MCJ9

Il parametro auth è composto da due stringhe separate da un punto. La stringa a sinistra del punto è un hash HMAC-SHA256 di quella a destra. Quella a destra è un oggetto JSON. Entrambe sono codificate Base64url.

Una app verifica prima di tutto che la stringa a sinistra sia effettivamente la firma di quella a destra e quindi decodifica quest'ultima ottendendo l'oggetto JSON. Il seguente codice in PHP mostra come verificare e decodificare la richiesta:

function parse_auth_request($key, $sign, $data) {
  $decoded_key  = base64_decode(strtr($key, '-_', '+/'));
  $decoded_sign = base64_decode(strtr($sign, '-_', '+/'));
  if ( $decoded_sign !== hash_hmac('sha256', $data, $decoded_key, true) ) {
      return null;
  }
  $request = json_decode(base64_decode(strtr($data, '-_', '+/')), true);
  if ( $request['expires'] < time() ) {
      return null;
  }
  return $request;
}

list($sign, $data) = explode('.', $_POST['auth'], 2);
$request = parse_auth_request($app_secret, $sign, $data);
$is_authentic = $request != null ? true : false;

Si noti che dopo aver verificato la firma e decodificato l'oggetto JSON, si controlla che la richiesta non sia scaduta andando a leggere il campo expires.

Installazione

Per le installazioni il seguente è l'oggetto JSON completo che ne risulta:

{
  "operation" : "Install",
  "shop" : "TN81S9AUB1", // identificatore del negozio
  "siteURL" : "http://www.myshop.com/", // indirizzo del sito
  "api" {
    "baseURL": "https://myshop.open2b.com/api/", // indirizzo base dell'API
    "maxVersion" : 3, // versione minima disponibile dell'API
    "minVersion" : 1 // versione massima disponibile dell'API
  },
  "key" : "EZMRp7tfDT7JisRlGREU3R00do4nq0BSLHRKToTppOZRiTc75a", // chiave dell'API
  "version" : "1.0", // versione dell'app
  "expires" : 1335939007 // orario di scadenza della richiesta in formato Unix
}

Aggiornamento

Per gli aggiornamenti il seguente è l'oggetto JSON completo che ne risulta:

{
  "operation" : "Update",
  "shop" : "TN81S9AUB1", // identificatore del negozio
  "siteURL" : "http://www.myshop.com/", // indirizzo del sito
  "api" {
    "baseURL": : "https://myshop.open2b.com/api/", // indirizzo base dell'API
    "maxVersion" : 3, // versione minima disponibile dell'API
    "minVersion" : 1 // versione massima disponibile dell'API
  },
  "version" : "1.1", // versione dell'app
  "expires" : 1335939007 // orario di scadenza della richiesta in formato Unix
}

Rimozione

Per le rimozioni il seguente è l'oggetto JSON completo che ne risulta:

{
  "operation" : "Remove",
  "shop" : "TN81S9AUB1", // identificatore del negozio
  "expires" : 1335939007 // orario di scadenza della richiesta in formato Unix
}