Scopri come sfruttare il potere del Social Framework con questo post, tratto dal capitolo 11 del libro Mobiletuts + Decodifica l'SDK di iOS 6!
L'introduzione del framework Twitter in iOS 5 è stato il primo passo verso l'integrazione di iOS con i social network più diffusi. In iOS 6, Apple ha introdotto il framework sociale. Non solo la struttura sociale sostituisce efficacemente la struttura di Twitter, ma estende anche la sua funzionalità aggiungendo il supporto sia per Facebook che per Sina Weibo.
Anche se il framework di Twitter è stato deprecato a partire da iOS 6, è fortunatamente un compito banale migrare il codice esistente dal framework di Twitter al framework sociale. Le API del quadro sociale non menzionano specifici social network. Il componente di rete è stato rimosso, il che rende l'aggiunta di supporto per i nuovi social network in futuro un compito indolore. In conclusione: la buona notizia per gli sviluppatori è che alzarsi e correre con il social framework è facile, specialmente se si ha già familiarità con il framework di Twitter.
In questo capitolo, ti darò una panoramica del quadro sociale e di ciò che ha da offrire e ti mostrerò quali sono le tue opzioni quando vuoi aggiungere un componente social alle tue applicazioni. Mentre questo capitolo coprirà solo le basi del quadro sociale, il prossimo capitolo parlerà di un'integrazione più completa della tua applicazione con il quadro sociale. Come ulteriore vantaggio, parlerò anche della classe UIActivityViewController. Questa è un'altra aggiunta a UIKit che rende la condivisione dei contenuti un gioco da ragazzi!
Prima di iOS 6, condividere i contenuti non era così facile. Se hai mai integrato Facebook con un'applicazione iOS, hai quasi sicuramente incontrato numerosi ostacoli lungo il percorso. In iOS 6, tuttavia, sono stati apportati numerosi miglioramenti significativi. A partire da iOS 6, l'integrazione con i social network è ora integrata nel sistema operativo, il che rende la condivisione dei social molto più semplice per gli sviluppatori di SDK.
Al momento della stesura, la struttura sociale supporta l'integrazione con Facebook, Sina Weibo e Twitter. Il supporto per Twitter è la ragione ovvia per la deprecazione del framework di Twitter. Sina Weibo potrebbe essere la strana papera nella fila per alcuni di voi. Sina Weibo è una piattaforma di microblogging immensamente popolare in Cina, una delle nazioni più popolose al mondo, quindi non è strano vedere la sua integrazione in iOS.
Tenendo presente quanto sopra, quali sono le opzioni disponibili quando una delle applicazioni deve essere integrata con Facebook, Twitter o Sina Weibo? Il quadro sociale offre due opzioni, utilizzando (1) il SLComposeViewController
classe o (2) il SLRequest
classe. Se hai lavorato con il framework di Twitter in iOS 5, i nomi di classe suoneranno sicuramente un campanello.
In questo capitolo, ingrandirò il SLComposeViewController
classe. È una soluzione facile da usare ed elegante che consente agli utenti di condividere contenuti con Twitter, Facebook e Sina Weibo. Diamo un'occhiata a questo nuovo arrivato.
SLComposeViewController
Il modo più semplice per condividere contenuti con uno dei social network supportati consiste nell'utilizzare il SLComposeViewController
classe. Il suo prefisso, SL, indica che fa parte del quadro sociale. Il SLComposeViewController
la classe è l'equivalente del TWTweetComposeViewController
classe del framework di Twitter. La differenza più importante è quella SLComposeViewController
in particolare non è legato ad alcun social network.
Creare un'istanza di SLComposeViewController
è facile come chiamare composeViewControllerForServiceType:
sulla classe e passando il tipo di servizio, cioè il social network a cui ti rivolgi. Al momento della scrittura, ci sono tre opzioni, SLServiceTypeTwitter
, SLServiceTypeFacebook
, e SLServiceTypeSinaWeibo
.
È possibile configurare il SLComposeViewController
istanza impostando il testo iniziale o aggiungendo un'immagine o un collegamento. Configurare il SLComposeViewController
l'istanza è un passaggio facoltativo poiché l'utente sarà in grado di modificare il contenuto del messaggio prima di inviarlo al servizio di destinazione.
Prima di presentare il controller di visualizzazione di composizione all'utente, è buona norma impostare il gestore di completamento (SLComposeViewControllerCompletionHandler
). Quest'ultimo è un blocco che viene eseguito quando la richiesta al servizio è completata, con successo o senza successo. Il blocco accetta un parametro, il risultato della richiesta. Questo può essere utile se si desidera informare l'utente se la richiesta ha avuto esito positivo o meno.
Presentazione del SLComposeViewController
per l'utente è fatto inviando un messaggio di presentViewController: animato:
proprio come fai con qualsiasi altro controller di visualizzazione (modale). Come accennato in precedenza, l'utente può ancora modificare il messaggio, geotaggare il messaggio o aggiungere un'immagine o un collegamento. Le opzioni e l'interfaccia utente di SLComposeViewController
l'istanza dipende dal servizio che viene scelto come target. Se l'utente invia un messaggio a Facebook, ad esempio, la vista modale di SLComposeViewController
l'istanza è adornata con il familiare schema di colori violacei.
Il SLComposeViewController
la classe ha un altro metodo di classe che vale la pena menzionare, isAvailableForServiceType:
. TWTweetComposeViewController ha un nome di metodo di classe simile, canSendTweet
. Questo metodo consente alla tua applicazione di chiedere al sistema operativo se il servizio che desideri sia disponibile. Come con composeViewControllerForServiceType
, il metodo di classe accetterà un tipo di servizio che indica quale servizio viene scelto come target. Nonostante isAvailableForServiceType:
restituisce a SÌ
o NO
, il sistema operativo esegue un numero di controlli per te dietro le quinte. Verificherà se il social network è raggiungibile e, cosa più importante, controllerà se l'utente ha installato un account valido per il servizio di destinazione. Diamo uno sguardo più da vicino agli account degli utenti e come sono gestiti dal sistema operativo.
La struttura sociale adotta un concetto noto come single-sign-on (SSO), ed è importante capire le implicazioni di questa decisione progettuale. In parole povere, non è più necessario che ogni applicazione di terze parti si autentichi con il servizio di destinazione, il sistema operativo ora si occupa di questo per te ed espone un numero di endpoint agli sviluppatori attraverso il framework sociale. Come avrai intuito, ciò significa che è necessaria una posizione centrale per la memorizzazione degli account dell'utente. Quella posizione centrale è ovviamente l'applicazione Impostazioni di iOS e consente agli utenti di gestire i dettagli dei loro social network da Impostazioni rende la condivisione dei contenuti all'interno delle app molto più efficiente.
Mentre l'applicazione Impostazioni iOS 6 offre solo la possibilità di gestire un account Facebook, gli utenti sono in grado di controllare più account Twitter. Archiviando gli account dell'utente in un'unica posizione centrale, gli sviluppatori di applicazioni di terze parti non devono più gestire direttamente questi dati sensibili.
UIActivityViewController
UIActivityViewController
è una meravigliosa aggiunta a UIKit. Rende la condivisione dei contenuti un gioco da ragazzi. Come suggerisce il nome della classe, UIActivityViewController
è una sottoclasse di UIViewController
. UIActivityViewController
rende la condivisione dei contenuti banale dando all'utente una serie di opzioni tra cui scegliere. L'utente può condividere contenuti via e-mail, Twitter o semplicemente incollare un URL negli Appunti. Esistono diverse opzioni tra cui scegliere e gli endpoint non sono limitati ai tre social network supportati dal framework sociale. Come il UIActivityViewController
il nome implica che la classe fa parte di UIKit, non del framework sociale. In altre parole, non è necessario collegare il progetto al framework sociale se si desidera utilizzare solo il UIActivityViewController
classe.
Nonostante UIActivityViewController
non fa parte del quadro sociale, ho scelto di includerlo in questo capitolo poiché condivide un po 'di terreno con il quadro sociale. In effetti, noterai in pochi istanti che UIActivityViewController
condivide un bel po 'di funzionalità con SLComposeViewController. Per capire meglio UIActivityViewController
, puoi confrontarlo con un ufficio postale. Un ufficio postale prenderà il tuo messaggio e si assicurerà che venga consegnato all'indirizzo (il servizio o l'endpoint) specificato da te.
Alcuni di voi potrebbero notare che ha qualche somiglianza con la ben nota libreria open source ShareKit. UIActivityViewController
è molto più potente, perché si integra perfettamente con il sistema operativo e i suoi servizi. Tuttavia, come con ShareKit, gli sviluppatori possono aggiungere endpoint personalizzati alla matrice di endpoint UIActivityViewController
si integra e visualizza all'utente.
utilizzando UIActivityViewController
è semplice come usare SLComposeViewController. L'inizializzatore designato di UIActivityViewController
prende due parametri, (1) elementi di attività e (2) attività di applicazione. Entrambi gli argomenti devono essere istanze di NSArray. Il primo parametro è un array di oggetti dati che desideri condividere. La matrice può includere uno o più frammenti di testo o solo una singola immagine. Il tipo di contenuto che è possibile condividere non dipende solo dal tipo di dati che l'applicazione può fornire, ma anche dal tipo di dati accettati dall'endpoint. Il UIActivityViewController
class farà in modo che gli oggetti dati vengano elaborati correttamente in base al servizio o all'endpoint scelto dall'utente.
Il secondo parametro, le attività dell'applicazione, è una serie di servizi o endpoint UIActivityViewController
presenterà all'utente. I servizi includono e-mail, Twitter, Facebook, stampa o copia di qualcosa negli Appunti. Come ho detto prima, gli sviluppatori hanno anche la possibilità di aggiungere servizi. Se le attività dell'applicazione sono impostate su zero, il sistema operativo utilizzerà il set predefinito di attività dell'applicazione.
Dopo aver presentato il UIActivityViewController
istanza all'utente, UIActivityViewController
penserò al resto Ad esempio, se hai aggiunto Twitter come attività per le applicazioni, UIActivityViewController
verificherà innanzitutto se Twitter è disponibile e se l'utente ha installato un account Twitter sul proprio dispositivo prima di presentarlo come opzione all'utente finale. UIActivityViewController
ti fa risparmiare un sacco di mal di testa e ci vogliono solo poche righe di codice da integrare con un'applicazione.
Per illustrare quanto sia facile da usare UIActivityViewController
e SLComposeViewController
, costruiremo una semplice applicazione shoebox per condividere le foto. L'applicazione consente agli utenti di scattare un'immagine, aggiungere una didascalia e condividerla con amici e familiari. L'applicazione di esempio ti mostrerà quanto è facile condividere in modo dinamico i contenuti in iOS 6.
Inizia creando un nuovo progetto in Xcode. Seleziona il Applicazione vista singola modello dall'elenco di modelli (figura 3). Assegna un nome all'applicazione Sharetastic, inserisci il nome e l'identificativo della società, imposta iPhone per la famiglia di dispositivi e verifica Utilizzare il conteggio di riferimento automatico. Deseleziona le restanti caselle di controllo per questo progetto (figura 4). Specificare dove si desidera salvare il progetto e fare clic su Creare pulsante.
Poiché la nostra applicazione si avvarrà del framework sociale, dobbiamo aggiungerlo al nostro progetto. Seleziona il progetto nel Project Navigator e seleziona il bersaglio sulla destra (figura 5). Seleziona il Costruisci fasi scheda in alto, apri il Collega binario con le librerie cassetto, fare clic sul pulsante più e scegliere Social.framework dalla lista (figura 5). Il nostro progetto è ora collegato con successo al quadro sociale.
Non dimenticare di aggiungere una dichiarazione di importazione nella parte superiore del file di intestazione del controller della vista per importare le intestazioni del framework sociale nel tuo progetto.
#importare#importare
Prima di creare l'interfaccia utente della nostra applicazione, dobbiamo aggiungere gli output e le azioni necessarie al file di intestazione del nostro controller di visualizzazione. È necessario aggiungere un totale di quattro punti vendita, a UITextField
per inserire la didascalia dell'immagine, a UIImageView
visualizzando l'immagine spezzata e due UIButton
le istanze. Toccando il primo pulsante, l'immagine e la didascalia verranno inviate all'account Facebook dell'utente. Toccando il secondo pulsante viene visualizzata un'istanza di UIActivityViewController
, presentando all'utente un numero di opzioni per condividere l'immagine e la didascalia. Come avrai intuito, ogni pulsante è legato a un IBAction
. Il frammento di codice qui sotto mostra come dovrebbe apparire il file di intestazione del nostro controller di visualizzazione:
#importare#importare @interface RPViewController: UIViewController @property (weak, nonatomic) IBOutlet UITextField * captionTextField; @property (weak, nonatomic) IBOutlet UIImageView * imageView; @property (weak, nonatomic) IBOutlet UIButton * facebookButton; @property (weak, nonatomic) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) mittente; - (IBAction) condividi: (id) mittente; @fine
È ora di andare al file XIB del nostro controller di visualizzazione. Per semplificare le cose, non useremo le nuove funzionalità di Autolayout di iOS 6 in questo capitolo. Con il file XIB del controller di visualizzazione selezionato, aprire il File Inspector a destra e deselezionare il Usa l'Autolayout casella di controllo.
Con il file XIB del controller della vista selezionato, iniziare trascinando un campo di testo nella vista del controller della vista e posizionarlo nella parte superiore della vista (figura 6). Configura il campo di testo aprendo il Ispettore degli attributi e cambia il suo testo segnaposto in Inserisci didascalia. Con il campo di testo ancora selezionato, apri il Connections Inspector e connetti i campi del testo delegare sbocco al Proprietario del file oggetto a sinistra. Ciò significa che il controller della vista fungerà da delegato del campo di testo. La ragione per farlo diventerà chiara in pochi minuti. Assicurati di aver anche collegato il captionTextField
sbocco all'oggetto del campo di testo sullo schermo.
Trascina un'istanza di UIImageView
dalla libreria alla vista del controller della vista e posizionarlo sotto il campo di testo (figura 6). Modifica le sue dimensioni a 280 punti per 280 punti. Apri il Ispettore degli attributi ancora una volta e cambia la modalità della vista dell'immagine (modalità di contenuto
) proprietà a Vestibilità e assicurati di controllare Interazione utente abilitata. Quest'ultimo aspetto è importante in quanto aggiungeremo un indicatore del gesto toccando la vista dell'immagine a breve. Se non abilitiamo l'interazione dell'utente per la visualizzazione dell'immagine, il riconoscimento del gesto toccato non funzionerà. Non dimenticare di collegare la presa del controller della vista con la nostra vista immagine. Il modo più semplice per farlo è premendo il tasto Ctrl
tasto, trascinando dalla vista immagine all'oggetto Proprietario del file e selezionando la presa appropriata.
Per finalizzare l'interfaccia utente della nostra applicazione, aggiungere due UIButton
istanze alla vista del controller della vista e posizionarle sotto la vista dell'immagine (figura 6). Dare al pulsante in alto un titolo di Facebook e il pulsante in basso un titolo di Condividere. Collegare le prese rimanenti come descritto sopra. Inoltre, collega le due azioni del controller della vista premendo il tasto Ctrl, trascinando dall'oggetto Proprietario del file su ciascun pulsante, quindi selezionando l'azione corrispondente. L'interfaccia utente è pronta. Ora è il momento di iniziare a scrivere del codice per far funzionare tutto!
C'è ancora una cosa che dobbiamo aggiungere al file di intestazione del nostro controller di visualizzazione. Dal momento che stiamo per fare uso di UIImagePickerController
per scattare le immagini, il nostro controller di visualizzazione deve essere conforme a entrambi UINavigationControllerDelegate
e UIImagePickerControllerDelegate
protocolli. Inoltre, come ho detto pochi istanti fa, il nostro controller di visualizzazione fungerà anche da delegato del campo di testo della didascalia. Ciò significa che il controller di visualizzazione deve essere conforme a UITextFieldDelegate
protocollo pure. Dai un'occhiata al file di intestazione aggiornato del nostro controller di visualizzazione per chiarimenti.
#importare#importare @interface RPViewController: UIViewController @property (weak, nonatomic) IBOutlet UITextField * captionTextField; @property (weak, nonatomic) IBOutlet UIImageView * imageView; @property (weak, nonatomic) IBOutlet UIButton * facebookButton; @property (weak, nonatomic) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) mittente; - (IBAction) condividi: (id) mittente; @fine
Nel file di implementazione del nostro controller di visualizzazione, iniziamo estendendo la definizione della classe e aggiungendo una proprietà privata. È buona norma non esporre tutte le proprietà di una classe dichiarandole nel file di intestazione e in un modo è possibile estendere la definizione della classe nel file di implementazione. Dopo la prima dichiarazione di importazione e prima del @implementazione
direttiva, aggiungere lo snippet di codice seguente per dichiarare una nuova proprietà privata. La proprietà manterrà un riferimento all'immagine che l'utente scatta con la fotocamera del dispositivo.
@interface RPViewController () @property (strong, nonatomic) UIImage * immagine; @fine
Una bella funzionalità di Xcode 4.4+ è che non è più necessario sintetizzare gli accessor di proprietà. Questo è fatto per te dietro le quinte e segue le convenzioni di denominazione di Apple. Nel nostro esempio, verrà creata una variabile di istanza con un nome di _Immagine
e gli accessor per la nostra proprietà immagine vengono automaticamente sintetizzati per noi.
Mi piace sempre iniziare implementando il ciclo di visualizzazione della vista di un controller di visualizzazione. Inoltre, preferisco anche mantenere il viewDidLoad
metodo breve aggiungendo alcuni metodi di supporto. Un metodo che creo quasi sempre è setupView
, che si occupa di configurare e configurare la vista del controller della vista. Diamo un'occhiata al viewDidLoad
e setupView
metodi per avere un'idea di cosa intendo.
- (void) viewDidLoad [super viewDidLoad]; // Setup Visualizza [self setupView]; - (void) setupView // Aggiungi Gesture Recognizer UITapGestureRecognizer * tgr = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (takeImage :)]; [self.imageView addGestureRecognizer: tgr]; // Aggiorna Visualizza [auto updateView];
Come puoi vedere, il setupView
il metodo non è complesso. Aggiungiamo un riconoscitore di gesti alla vista dell'immagine in modo che l'utente possa scattare un'immagine toccando la vista dell'immagine nella nostra interfaccia utente. Inizialmente inizializziamo un indicatore del gesto toccato e successivamente lo aggiungiamo alla nostra vista immagine. Il riconoscitore del gesto di tocco invia il messaggio SnapImage:
al nostro controller di visualizzazione quando l'utente tocca la vista dell'immagine. Daremo un'occhiata al SnapImage:
metodo in un secondo.
Alla fine di setupView
metodo, invochiamo il metodo updateView. Ancora una volta, questo è un metodo di supporto che uso molto spesso in quanto mi consente di raggruppare la logica associata all'aggiornamento della vista. Diamo una rapida occhiata al updateView
metodo.
- (vuoto) updateView BOOL sharingEnabled = self.image? SI NO; float sharingAlpha = sharingEnabled? 1,0: 0,5; self.facebookButton.enabled = sharingEnabled; self.facebookButton.alpha = sharingAlpha; self.shareButton.enabled = sharingEnabled; self.shareButton.alpha = sharingAlpha;
Come suggerisce il nome del metodo, il metodo semplicemente aggiorna la vista e le sue sottoview. Iniziamo a verificare se un'immagine è disponibile controllando se la nostra proprietà dell'immagine è impostata. Se abbiamo un'immagine con cui lavorare, abilitiamo i pulsanti Facebook e condividi e impostiamo i loro valori alfa su 1.0. Se un'immagine non è disponibile, cioè l'utente non ne ha ancora preso uno, disabilitiamo entrambi i pulsanti e li rendiamo leggermente trasparenti per indicare all'utente che i pulsanti sono disabilitati.
Approfittando di UIImagePickerController
, scattare le immagini è un processo semplice e diretto. Iniziamo esaminando il SnapImage:
metodo che viene invocato dal riconoscitore del gesto di tocco quando l'utente tocca la vista dell'immagine. Innanzitutto, un'istanza di UIImagePickerController
è inizializzato e il suo delegato è impostato su self, ovvero il nostro controller di visualizzazione. Successivamente, chiediamo al sistema operativo se una telecamera è disponibile chiamando isSourceTypeAvailable
sul UIImagePickerController
classe e passandolo UIImagePickerControllerSourceTypeCamera
come argomento. In base al valore di ritorno, impostiamo il tipo di fonte del nostro UIImagePickerController
esempio. Come failsafe, il tipo di origine è impostato su UIImagePickerControllerSourceTypePhotoLibrary
se nessuna fotocamera è disponibile per qualsiasi motivo. Ciò significa che l'utente può selezionare un'immagine dalla libreria fotografica del dispositivo. Infine, il controller di selezione delle immagini viene presentato all'utente.
- (void) takeImage: (UITapGestureRecognizer *) tgr // Initialize Image Picker Controller UIImagePickerController * ip = [[UIImagePickerController alloc] init]; // Imposta delegato [ip setDelegate: self]; if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) // Imposta il tipo di origine su Camera [ip setSourceType: UIImagePickerControllerSourceTypeCamera]; else // Imposta il tipo di sorgente su Photo Library [ip setSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; // Present View Controller [auto presentViewController: ip animated: YES completion: nil];
Riuscite a indovinare qual è il prossimo passo? Dobbiamo implementare i metodi del UIImagePickerControllerDelegate
protocollo. Il protocollo ha due metodi, imagePickerController: didFinishPickingMediaWithInfo:
e imagePickerControllerDidCancel:
. Lascia che ti guidi attraverso ogni metodo.
Nel imagePickerController: didFinishPickingMediaWithInfo:
, iniziamo memorizzando un riferimento all'immagine originale non modificata. Nelle prossime righe di codice, assegniamo l'immagine originale alla nostra proprietà dell'immagine e aggiorniamo la vista. Ricorda che questo abiliterà i pulsanti Facebook e condividi. Infine, ignoriamo il controller del selettore di immagini.
- (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) informazioni UIImage * originalImage = [info objectForKey: UIImagePickerControllerOriginalImage]; if (originalImage) self.image = originalImage; // Aggiorna Visualizza [auto updateView]; // Ignora controller Image Picker [self dismissViewControllerAnimated: YES completion: nil];
Il secondo metodo delegate contiene solo una riga di codice. Se l'utente tocca il pulsante Annulla, il controller di selezione immagini viene eliminato senza ulteriori indugi.
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker // Ignora controller Image Picker [self dismissViewControllerAnimated: YES completion: nil];
Prima di implementare il Facebook:
e Condividere:
azioni, voglio fare una leggera deviazione. Perché non abbiamo assegnato l'immagine appena spezzata alla proprietà dell'immagine della vista immagine? Assegnare l'immagine appena scattata alla proprietà dell'immagine della nostra vista immagine è davvero un'opzione perfettamente valida, ma ho adottato un approccio diverso. Dall'introduzione del @sintetizzare
direttiva, le persone spesso dimenticano quanto possono essere utili setter e getter. Lascia che ti spieghi cosa intendo con un esempio.
Nella nostra applicazione di esempio, ho sovrascritto il setter della proprietà dell'immagine del nostro controller di visualizzazione. Questo mi consente di (1) raggruppare il codice relativo in una posizione e (2) aggiornare solo la vista dell'immagine quando l'immagine cambia. Questo potrebbe sembrare un dettaglio con pochissimo uso a questo punto, ma mostra come possiamo già iniziare a ottimizzare il nostro codice in modo sottile, il che avrà un impatto sulla leggibilità del codice e persino sulle prestazioni. In questo particolare esempio, non influenzerà le prestazioni della nostra applicazione, ma è bene usare le best practice ogni volta che lo ritieni opportuno.
Aggiungi il seguente al file di implementazione ora:
- (void) setImage: (UIImage *) image if (_image! = image) _image = image; // Aggiorna immagine Visualizza self.imageView.image = _image;
Prima di poter iniziare a condividere le immagini, è necessario implementare un metodo delegato di UITextFieldDelegate
protocollo, cioè, textFieldShouldReturn:
. In questo metodo delegato, ci si dimette il campo di testo come primo risponditore se l'utente tocca il pulsante di ritorno della tastiera. Questo eliminerà la tastiera e rivelerà i pulsanti di condivisione sottostanti.
- (BOOL) textFieldShouldReturn: (UITextField *) textField // Resign First Responder [textField resignFirstResponder]; return YES;
È tempo di sporcarci le mani con la struttura sociale e UIActivityViewController
. Iniziamo implementando il Facebook:
metodo. Illustrerà come usare SLComposeViewController
. Dai un'occhiata alla sua implementazione qui sotto e scomporla passo dopo passo.
- (IBAction) facebook: (id) sender if ([SLComposeViewController isAvailableForServiceType: SLServiceTypeFacebook]) // Inizializza Compose View Controller SLComposeViewController * vc = [SLComposeViewController composeViewControllerForServiceType: SLServiceTypeFacebook]; // Configura Compose View Controller [vc setInitialText: self.captionTextField.text]; [vc addImage: self.image]; // Present Compose View Controller [autopresenteViewController: vc animato: SÌ completamento: nil]; else NSString * message = @ "Sembra che al momento non possiamo parlare con Facebook o non hai ancora aggiunto il tuo account Facebook a questo dispositivo. Vai all'applicazione Impostazioni per aggiungere il tuo account Facebook a questo dispositivo."; UIAlertView * alertView = [[UIAlertView alloc] initWithTitle: @ "Oops" message: message delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [show di alertView];
Come accennato in precedenza, è necessario iniziare chiedendo al sistema operativo se il servizio a cui ci rivolgiamo sia disponibile. Se isAvailableForServiceType:
ritorna NO
, visualizziamo una vista di avviso che indica all'utente quale potrebbe essere il problema. Se il servizio è disponibile, tuttavia, inizializziamo un'istanza di SLComposeViewController
invocando il metodo di classe composeViewControllerForServiceType:
. L'argomento che passiamo al metodo di classe è SLServiceTypeFacebook
, che indica che stiamo prendendo di mira la piattaforma di Facebook.
Anche se il nostro utente può modificare il messaggio prima di inviarlo a Facebook, popoliamo il messaggio con i contenuti del campo di testo della didascalia e alleghiamo l'immagine spezzata al messaggio. Infine, presentiamo il controller di visualizzazione di composizione all'utente. Spetta all'utente modificare, annullare o pubblicare il messaggio. L'utente ha il controllo. Questo è importante da ricordare, specialmente con il prossimo capitolo in mente, in cui l'utente non sempre saprà cosa fa la nostra applicazione dietro le quinte. In questa fase, la nostra applicazione è pronta per il test. Crea ed esegui la tua applicazione su un dispositivo di prova e provalo tu stesso!
Come ho detto prima, uno dei punti di forza del quadro sociale è quanto sia facile sostituire un social network con un altro modificando il tipo di servizio. Proviamo questo sostituendo le due istanze di SLServiceTypeFacebook
con SLServiceTypeTwitter
. Con questo semplice cambiamento, ora possiamo condividere le nostre immagini con i follower di Twitter.
La nostra applicazione non è ancora finita. Dobbiamo ancora implementare il Condividere:
metodo. In questo metodo, utilizziamo il UIActivityViewController
classe per condividere l'immagine spezzata e la didascalia associata. Dai un'occhiata all'implementazione del metodo qui sotto.
- (IBAction) condividi: (id) sender // Activity Items UIImage * image = self.image; NSString * caption = self.captionTextField.text; NSArray * activityItems = @ [immagine, didascalia]; // Inizializza controller vista attività UIActivityViewController * vc = [[UIActivityViewController alloc] initWithActivityItems: activityItems applicationActivities: nil]; // Present Activity View Controller [autopresenteViewController: vc animato: SÌ completamento: nil];
Prima memorizziamo l'immagine e la didascalia in un array. L'immagine e la didascalia sono i cosiddetti activityItems
, che vengono passati