• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#100 – Integrare Dropbox nelle applicazioni iPhone ed iPad

By Andrea Cappellotto | on 9 Settembre 2011 | 11 Comments
Senza categoria

dropbox-logo Ed eccoci giunti al nostro 100° tutorial sulla programmazione iPhone e iPad, per noi un bel traguardo e per festeggiare vi proponiamo una guida per l’implementazione di una funzionalità molto interessante per le nostre applicazioni iOS: l’integrazione di Dropbox. Come tutti voi saprete, i servizi di cloud prendono sempre più piede nelle nostre case, nei nostri uffici e ovviamente nei nostri device e non si può negare quanto sia utile condividere file fra tutti i nostri dispositivi: non importa dove ci troviamo o cosa abbiamo a disposizione, i nostri dati saranno sempre con noi! Anche Apple entrerà presto in questo mercato con il suo servizio iCloud (e già c’era con il suo mobile me e iDisk) ma dato che ancora non possiamo parlare del servizio in arrivo essendo tutta la documentazione ufficiale e il codice sotto NDA, parleremo del suo “concorrente” già utilizzato in larga scala e in tutto il mondo: Dropbox.

DropBox è un servizio di cloud storage che fornisce 2GB di spazio gratuito (previa registrazione) più ulteriori 250MB per ogni utente da noi inviato ad usare il servizio, che deciderà di utilizzare il Dropbox come noi (fino ad un limite massimo di 8GB). Niente male come versione free, ma se avessimo bisogno di più spazio, sappiate che esistono diverse offerte in abbonamento a prezzi bassissimi per ogni esigenza:


t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-00

Dopo questa piccola premessa possiamo partire con il nostro tutorial dedicato all’integrazione di DropBox nella nostra applicazione iOS.

Creiamo l’applicazione nel sito di DropBox

Il primo passo è quello di creare un applicazione nel sito di DropBox. Per fare questo dovremo necessariamente avere un account, se non ne avete uno potrete crearlo seguendo questo indirizzo.
Fatto questo entriamo nella sezione developer e ci ritroveremo davanti una schermata simile alla seguente:


t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-01

Come vedete sulla sinistra troviamo un menù, clicchiamo su “My apps”, quindi su “Create an App”:


t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-02

Nella finestra che si apre inseriamo il nome della nostra app e una descrizione, clicchiamo quindi su create.

Ci verranno mostrati i dettagli e le chiavi dell’applicazione appena creata:


t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-03

Quello che ci servirà e che dovremo usare nel nostro coedice sono le due chiavi: quella segreta e quella dell’app.

Download SDK

A questo punto dovremo scaricare l’SDK per poi integrarlo nella nostra app. Scarichiamolo quindi da questo indirizzo e una volta ottenuto scompattiamolo e apriamo la cartella appena ottenuta.


t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-04

All’interno troviamo una cartella con degli esempi e la più importante, quella contenente l’SDK vero e proprio.

Integriamo DropBox nella nostra applicazione

Se avete fatto tutto quello spiegato qui sopra, siete pronti per passare alla parte più divertente ed importante del tutorial: l’integrazione di DropBox nella nostra app. DropBox fornisce diverse funzionalità in REST che ci permettono di ottenere molte informazioni sull’utente, sul contenuto della cartella DropBox e naturalmente la possibilità si uploadare e scaricare i nostri file.
Noi, in questo tutorial, vedremo nello specifico l’ultima funzionalità, ovvero scopriremo come usare dropBox per fare il backup dei nostri file.

Per semplicità partiremo da un nuovo progetto e mostreremo come fare un semplice upload e download di un file.

Apriamo Xcode e creiamo un nuovo progetto di tipo “viewBased”, quindi diamogli un nome a piacere e proseguiamo. Fatto questo io ho trascinato all’interno del progetto un’immagine a caso, che useremo per fare upload e download.

Iniziamo a configurare il nostro “viewController” via codice creando 3 pulsanti e un’imageView. I tre pulsanti serviranno rispettivamente per fare l’upload dell’immagine, scaricarla e resettarla, mentre nell’imageView visualizzeremo la nostra immagine.

Questa parte di codice è davvero molto semplice, ricordatevi di impostare il tag dell’imageView in modo tale da essere in grado poi di recuperarla (se non sapete come usare i tag o volete rinfrescarvi la memoria date una lettura a questo nostro tutorial).

Ecco il codice:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
    
    UIButton * btnUpload = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnUpload.frame = CGRectMake(30, 20, 110, 40);
    [btnUpload addTarget:self action:@selector(uploadImg) forControlEvents:UIControlEventTouchDown];
    [btnUpload setTitle:@"upload Img" forState:UIControlStateNormal];
    [self.view addSubview:btnUpload];
      
    UIButton * btnDown = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnDown.frame = CGRectMake(30, 80, 110, 40);
    [btnDown addTarget:self action:@selector(downloadImg) forControlEvents:UIControlEventTouchDown];
    [btnDown setTitle:@"download Img" forState:UIControlStateNormal];
    [self.view addSubview:btnDown];
    
    UIButton * btnReset = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnReset.frame = CGRectMake(170, 20, 110, 40);
    [btnReset addTarget:self action:@selector(resetImg) forControlEvents:UIControlEventTouchDown];
    [btnReset setTitle:@"reset Img" forState:UIControlStateNormal];
    [self.view addSubview:btnReset];
    
    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 130, 300, 320)];
    imgView.image = [UIImage imageNamed:@"imgUpload.png"];
    imgView.tag = 10;
    [self.view addSubview:imgView];
    [imgView release];
}

-(void)resetImg
{
    UIImageView * imgTemp = (UIImageView*)[self.view viewWithTag:10];
    imgTemp.image = nil;
}

Ora procediamo con l’integrazione dell’SDK. Prendiamo la cartella che abbiamo scaricato prima, apriamola e trasciniamo la cartella “Dropbox SDK” dentro il nostro progetto, ricordando di spuntare la voce “copy items into destination group’s folder”, quindi aggiungiamo il framework security al progetto.

Passiamo ora all’app delegate, dove dovremo scrivere del codice che ci permetterà di iniziare la sessione con dropBox. Finchè non faremo operazioni di alcun tipo non verrà chiesto all’utente di loggarsi con il suo account dropbox.

Importiamo l’sdk:

#import "DropboxSDK.h"

Modifichiamo quindi il nostro delegate in modo tale che appena l’applicazione viene aperta inizi la sessione con Dropbox.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    DBSession* dbSession = 
	[[[DBSession alloc]
	  initWithConsumerKey:@"sy94bo68a0uruk7"
	  consumerSecret:@"ijzhbkm2ixzq8ys"]
	 autorelease];
    [DBSession setSharedSession:dbSession]; 
    
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

Vi ricordo che in “ConsumerKey” e “consumerSecret” dovrete mettere le vostre rispettive chiavi che avete ottenuto e vedere nella pagina di dettaglio della vostra app sul sito developer di Dropbox.

Upload di un file

Vediamo ora come fare l’upload della nostra immagine. Apriamo il file di intestazione (.h) del nostro viewController, importiamo quindi l’sdk, settiamo i due delegati e dichiariamo i 3 metodi che useremo:

#import "DropboxSDK.h"

@interface devAPPT100ViewController : UIViewController 
{
    
}

-(void)uploadImg;
-(void)downloadImg;
-(void)resetImg;
@end

Fatto questo passiamo al file di implementazione (.m) e iniziamo a scrivere il metodo per l’upload. Prima di tutto controlliamo che la sessione sia aperta, in tal caso facciamo l’upload del file, in caso contrario richiamiamo il controller che ha il compito di far fare il login all’utente.

-(void)uploadImg
{
    if([[DBSession sharedSession] isLinked])
    {
        NSLog(@"linkato");
        
    }
    else
    {
        DBLoginController* controller = [[DBLoginController new] autorelease];
        [controller presentFromController:self];
        controller.delegate = self;
    }
}
- (void)loginControllerDidLogin:(DBLoginController*)controller{
	NSLog(@"login effettuato");
}

- (void)loginControllerDidCancel:(DBLoginController*)controller
{
	NSLog(@"login cancellato");
}

Nel controller per far fare l’upload abbiamo impostato i delegati, in questo modo sapremo se l’utente ha fatto o meno il login. Occupiamoci ora di come realizzare il backup della nostra immagine, iniziamo dichiarando nel viewController.h un oggetto DBRestClient, questo oggetto ci servirà per comunicare con la cartella remota, uploadare file e scaricarli (oltre a molte altre funzionalità che non vedremo in questo tutorial)

@interface devAPPT100ViewController : UIViewController
{
    DBRestClient* restClientUP;
}

Nel file .m allochiamo l’oggetto restClientUP e facciamo l’upload del file. Torniamo al metodo uploadImg e modifichiamo il codice nel punto in cui sappiamo che il nostro utente è loggato aggiungendo le istruzioni per l’upload vero e proprio del file:

NSString *textFileNameN = @"immagine.png";
NSString *dropBoxFolderN = @"/devAPPt100";

-(void)uploadImg
{
    if([[DBSession sharedSession] isLinked])
    {
        NSLog(@"linkato");
        
        if (!restClientUP) 
        {
            restClientUP = 
            [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
            restClientUP.delegate = self;
            [restClientUP createFolder:dropBoxFolderN];
        }
        
        [restClientUP uploadFile:textFileNameN 
                          toPath:dropBoxFolderN
                        fromPath:[[NSBundle mainBundle] pathForResource:@"imgUpload" ofType:@"png"]];
    }
    else
    {
        DBLoginController* controller = [[DBLoginController new] autorelease];
        [controller presentFromController:self];
        controller.delegate = self;
    }
}

Niente di complesso, abbiamo aggiunto l’oggetto restClientUP, lo abbiamo allocato e inizializzato con la sessione, abbiamo settato il delegato e gli abbiamo detto di creare la cartella devAPPt100. Fatto questo le istruzioni seguenti servono a fare l’effettivo upload del file immagine.png nel path devAPPt100 usando il file imgUpload.png.

Grazie al delegate possiamo sapere se il file è stato caricato o meno:

- (void)restClient:(DBRestClient*)client uploadProgress:(CGFloat)progress forFile:(NSString*)destPath from:(NSString*)srcPath
{
	NSLog(@"load file: %f\n", progress);
}

- (void)restClient:(DBRestClient*)client uploadedFile:(NSString*)destPath from:(NSString*)srcPath
{
	NSLog(@"file uppato\n");
	
}
- (void)restClient:(DBRestClient*)client uploadFileFailedWithError:(NSError*)error
{
	NSLog(@"errore file uppato\n");
	
}

In questo modo potremmo prevenire e gestire eventuali blocchi o errori durante l’upload. Se volete potete rifinire aggiungendo una progressBar per visualizzare lo stato di upload/download.

Download di un file

Vediamo ora come effettuare il download di un file, il codice è molto simile:

-(void)downloadImg
{
    if([[DBSession sharedSession] isLinked])
    {
        NSLog(@"linkato");
        
        if (!restClientUP) 
        {
            restClientUP = 
            [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
            restClientUP.delegate = self;
        }
        
        NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDir = [documentPaths objectAtIndex:0];
        NSString *path = [documentsDir stringByAppendingPathComponent:@"imgUpload.png"];
        
        [restClientUP loadFile:@"/devAPPt100/imgUpload.png" intoPath:path];
    }
    else
    {
        DBLoginController* controller = [[DBLoginController new] autorelease];
        [controller presentFromController:self];
        controller.delegate = self;
    }
}

- (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath contentType:(NSString*)contentType
{
    NSLog(@"dest path: %@, contetType: %@",destPath, contentType);
    
    UIImageView * imgTemp = (UIImageView*)[self.view viewWithTag:10];
    imgTemp.image = nil;
    imgTemp.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:destPath]];
}

-(void)restClient:(DBRestClient *)client loadFileFailedWithError:(NSError *)error
{
    NSLog(@"error: %@", error);
}

Prima di tutto verifichiamo l’oggetto restClientUP, se non è allocato lo allochiamo e inizializziamo con la sessione che viene creata nell’appDelegate, quindi andiamo a creare il percorso dove salvare il file che dobbiamo scaricare. Ricordo che i file creati, modificati, scaricati a runtime li potremo posizionare solo nella cartella Documents, in quanto la cartella del progetto è una sandbox.
Chiamiamo quindi il metodo loadFile, questo metodo ha il compito di prendere un file da una cartella su DropBox e scaricarlo in un percorso locale.
A scaricamento avvenuto viene richiamato il metodo loadedFile, questo metodo ci ritorna il percorso del file sulla cartella dropBox e il percorso sulla quale è salvato il file nel nostro device, che useremo per mostrarla nell’imageView, a cui possiamo accedere tramite la property tag settata ad inizio tutorial, ad inizio tutorial, prima però togliamo l’immagine precedente in modo da visualizzare quella appena scaricata.

Il nostro tutorial termina qui, certamente non è da considerare come applicazione completa, ma un riferimento che ci spiega come caricare e scaricare da dropBox un file. Analogamente potrete sperimentare tutte le altre funzionalità offerte ai developer da questo ottimo servizio.

Questo il risultato finale:


t100-integrare-dropbox-applicazioni-iphone-ipad-devapp-05

Se avete problemi con il progetto presentato, questo è il link per scaricare il nostro esempio.

Share this story:
  • tweet

Tags: Andrea Cappellottodropbox iosdropbox xcodeintegrare dropbox applicazioni ipadintegrare dropbox applicazioni iphoneTutorial Praticitutorial programmazione iPhone e iPadtutorial Xcode

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Xcode 4: Distribuzione Ad Hoc delle applicazioni iPhone e iPad

    10 Gennaio 2012 - 20 Comments
  • Tutorial pratici per iOS SDK: disponibile la versione 2.0 aggiornata a iOS 5 e XCode 4.2

    16 Novembre 2011 - 6 Comments
  • T#101 – Integrare AirPrint per stampare dalle applicazioni iPhone e iPad

    13 Settembre 2011 - 10 Comments

Author Description

Perito Elettrotecnico e studente di Scienze Informatiche presso l'università di Trento. Da inizio 2010 , dopo aver lavorato come sistemista-tecnico informatico, si occupa di programmazione in ambito iOS, collabora con un'azienda trentina nello sviluppo di applicazioni iOS per il turismo e realizza soluzioni personalizzate per aziende. Tra gli ultimi progetti ricordiamo l'integrazione tra iOS e Arduino segno che l'open source può benissimo lavorare con sistemi più chiusi come i device Apple! Per devAPP scrive tutorial sulla programmazione, da cosigli su strumenti da utilizzare per semplificare la programmazione, è inoltre moderatore del forum con all'attivo quasi mille post e partecipazioni giornaliere.

11 Responses to “T#100 – Integrare Dropbox nelle applicazioni iPhone ed iPad”

  1. 9 Settembre 2011

    ittaglia

    Bravissimi ragazzi!!! siete sempre un passo avanti a tutti !! grazie per queste e utilissime guide!!!
    ps: è grazie a voi che adesso posso cavermela alla grande con l’sdk di iphone!!!

  2. 9 Settembre 2011

    Andrea

    Grazie ittaglia!! E grazie a tutti gli utenti che ci seguono…:):):) è anche merito vostro…xD

  3. 10 Settembre 2011

    ignazioc

    grande tutorial.
    semplice e chiaro fa venire voglia di usare dropbox….anzi perché non aggiungi il link con il tuo invito? magari qualche utente vuole registrarsi e così guadagni 250mb 🙂

  4. 10 Settembre 2011

    Andrea Cappellotto

    grazie ignazio..:) mi fa piacere k ti sia piaciuto.. giustamente!! se volete registrarvi a dropbox e non l’avete ancora fatto, ecco il mio link

    http://db.tt/67yMiPT

    grazie a tutti per il supporto!! 😉

  5. 12 Settembre 2011

    valvoline

    🙂 Bravo Andrea…semplice chiaro ed utile.

  6. 12 Settembre 2011

    Andrea Cappellotto

    grazie mille, e grazie a quelli che mi hanno donato 250Mb su dropBox…;)


    valvoline:

    Bravo Andrea…semplice chiaro ed utile.

  7. 17 Settembre 2011

    ikaroweb

    Complimenti, ottimo articolo 😉

  8. 22 Settembre 2011

    Panterix

    Siete i migliori stó continuando a studiare,prima o poi riusciró a sviluppare la mia app.

  9. 29 Novembre 2011

    Danilo

    Bastano 50GB free ? Box.net
    http://itunes.apple.com/us/app/box.net/id290853822?mt=8
    Addio DropBox !

  10. 16 Ottobre 2012

    Astro

    Nella mia applicazione periPad, sto usando l’integrazione con Dropbox.
    Funziona perfettamente, ma ora ho un dubbio. Ho letto che Apple ha rifiutato molte applicazioni che utilizzano Dropbox, perché nella pagina di login c’è un link per iscriversi. Ora ho notato che se avvio l’applicazione con l’iPad, viene visualizzata una pagina di login che mostra anche altri collegamenti, quindi temo che l’app potrebbe essere rifiutata.
    Cosa posso fare?
    Questo è lo screenshot: http://i46.tinypic.com/23tkz0k.png

  11. 1 Giugno 2013

    matteo

    ciao a tutti!
    complimenti per l’ottima guida!!!
    una domanda stupida: ma dropbox potrebbe essere usato come contenitore di un database che contiene i dati dell’applicazione?

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO