Quali sono i passaggi da seguire per utilizzare il nuovo SLComposeViewController
di iOS 6 da pubblicare su Facebook, Twitter o Sina Weibo?Esercitazione per condivisione SLComposeViewController
risposta
Per i dettagli su questo quadro si veda Apple Social Framework Class Reference
tutorial supplementari:
- http://soulwithmobiletechnology.blogspot.com/2012/07/tutorial-how-to-use-inbuilt.html
- http://www.mobile.safilsunny.com/iphone/integrating-facebook-ios/
- http://rudeboy-quickies.blogspot.com/2012/06/steps-to-integrate-facebook-in-ios6.html
- https://developer.apple.com/videos/wwdc/2012/?id=306
Per questo esempio, utilizzeremo lo SLServiceTypeFacebook
SLComposeViewController
. Se si desidera utilizzare Twitter o Sina Weibo solo cambiare lo SLServiceType a uno dei seguenti:
- SLServiceTypeFacebook
- SLServiceTypeSinaWeibo
- SLServiceTypeTwitter
iOS 6 ha reso molto facile per pubblicare direttamente su Facebook, Twitter o Sina Weibo utilizzando lo SLComposeViewController
. Funziona in modo molto simile a iOS 5 TWTweetComposeViewController
.
Prima di tutto, nel file di intestazione del controller vista (.h) #import
il quadro sociale e il quadro di conti.
#import <Social/Social.h>
#import <Accounts/Accounts.h>
Qui dichiareremo un semplice UIButton
e un IBAction
che avremo in seguito link per quel pulsante e un void
(sharingStatus) che sarà utilizzato per verificare che il servizio di condivisione selezionato è a disposizione.
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *easyFacebookButton;
- (IBAction)facebookPost:(id)sender;
- (void)sharingStatus;
@end
@implementation ViewController
Poi, nel file di implementazione (.m), inizieremo con l'attuazione del (sharingStatus) vuoto che abbiamo dichiarato nel file di intestazione. sharingStatus utilizza di isAvailableForServiceType
BOOL per restituire se è possibile pubblicare sul servizio specificato nel relativo argomento. In questo caso, useremo il tipo di servizio SLServiceTypeFacebook
. Se il servizio è disponibile, il pulsante post sarà abilitato con un valore alfa di 1.0f, e se il servizio non è disponibile il pulsante verrà disabilitato il suo valore alfa impostato su 0.5f.
- (void)sharingStatus {
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
NSLog(@"service available");
self.easyFacebookButton.enabled = YES;
self.easyFacebookButton.alpha = 1.0f;
} else {
self.easyFacebookButton.enabled = NO;
self.easyFacebookButton.alpha = 0.5f;
}
}
Qui imposteremo il IBAction
che richiamare il compositore. Per una buona pratica, controlleremo di nuovo isAvailableForServiceType
per evitare di chiamare il compositore per un tipo di servizio che non è disponibile. (Nel caso in cui qualcosa è andato storto durante l'ultimo controllo, o se la disponibilità in qualche modo è cambiata nella frazione di secondo tra toccare il pulsante post e tutti i compositori/init. Il codice sotto è stato impostato per visualizzare un foglio di compositori di Facebook con testo, un'immagine e un collegamento Questa azione utilizza anche un gestore di completamento per i risultati annullati e completati del compositore.
- (IBAction)facebookPost:(id)sender {
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
SLComposeViewController *mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[mySLComposerSheet setInitialText:@"iOS 6 Social Framework test!"];
[mySLComposerSheet addImage:[UIImage imageNamed:@"myImage.png"]];
[mySLComposerSheet addURL:[NSURL URLWithString:@"http://stackoverflow.com/questions/12503287/tutorial-for-slcomposeviewcontroller-sharing"]];
[mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
switch (result) {
case SLComposeViewControllerResultCancelled:
NSLog(@"Post Canceled");
break;
case SLComposeViewControllerResultDone:
NSLog(@"Post Sucessful");
break;
default:
break;
}
}];
[self presentViewController:mySLComposerSheet animated:YES completion:nil];
}
}
In viewWillAppear
saremo registrare un osservatore ACAccountStoreDidChangeNotification
modo che l'applicazione può essere avvisati quando informativi conto dei cambiamenti. Questo osservatore verrà quindi rimosso in viewDidDisappear
.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sharingStatus) name:ACAccountStoreDidChangeNotification object:nil];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:ACAccountStoreDidChangeNotification];
}
E, infine, si aprono costruttore di interfaccia e aggiungere un UIButton
che sarà il pulsante di posta. Quindi, nell'ispettore connessioni, collega lo IBOutlet
e lo IBAction
che abbiamo creato precedentemente al pulsante, e il gioco è fatto! Hai finito!
Basta utilizzare questo codice per condividere su Facebook.
SLComposeViewController *controllerSLC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controllerSLC setInitialText:@"First post from my iPhone app"];
[controllerSLC addURL:[NSURL URLWithString:@"http://www.appcoda.com"]];
[controllerSLC addImage:[UIImage imageNamed:@"test.jpg"]];
[self presentViewController:controllerSLC animated:YES completion:Nil];
Se si desidera questo per Twitter, basta cambiare SLServiceTypeTwitter.
ricevo un problema con la pagina delle impostazioni con il tuo codice. – sabir
@sabir Non ti ho preso. Puoi spiegarlo per favore? –
quando l'account di Facebook è vuoto nel tuo dispositivo mostra l'avviso con le impostazioni e il pulsante Annulla quando faccio clic sul pulsante Impostazioni dovrebbe andare alla pagina delle impostazioni fino a IOS 6.01 ma in IOS 7 il pulsante impostazioni non mi porta a pagina di impostazioni. Quindi hai qualche idea su questo – sabir
uso sicuro di SLComposeViewController
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
{
SLComposeViewController *fbPost = [SLComposeViewController
composeViewControllerForServiceType: SLServiceTypeFacebook];
[fbPost setInitialText:@"Text You want to Share"];
[fbPost addImage:[UIImage imageNamed:@"shareImage.png"]];
[self presentViewController:fbPost animated:YES completion:nil];
[fbPost setCompletionHandler:^(SLComposeViewControllerResult result) {
switch (result) {
case SLComposeViewControllerResultCancelled:
NSLog(@"Post Canceled");
break;
case SLComposeViewControllerResultDone:
NSLog(@"Post Sucessful");
break;
default:
break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}];
}
Ciao, E 'stata una bella risposta, se ho piccolo dubbio, possiamo anche presenti interfaccia di login in account Twitter caso di utente/Facebook non è impostato su? –
@AbhinandanSahgal no, non con questa classe. Tuttavia, quando funziona correttamente, il compositore rileva se l'utente non ha effettuato l'accesso e presenta un avviso per portarli alle impostazioni per il servizio appropriato per accedere al proprio account. –
Puoi inserire un campione per portarli alle impostazioni? –