ios - Tutorial para compartir SLComposeViewController
ios6 social-framework (3)
Uso seguro de 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];
}];
}
¿Cuáles son los pasos que debo seguir para usar el nuevo SLComposeViewController
iOS 6 para publicar en Facebook, Twitter o Sina Weibo?
Para obtener detalles sobre este marco, consulte la referencia de clase del Marco Social de Apple .
Tutoriales adicionales:
- 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
Para este ejemplo, SLComposeViewController
el SLComposeViewController
de SLServiceTypeFacebook
. Si desea utilizar Twitter o SinaWeibo, simplemente cambie SLServiceType por uno de los siguientes:
- SLServiceTypeFacebook
- SLServiceTypeSinaWeibo
- SLServiceTypeTwitter
iOS 6 ha hecho que sea muy fácil publicar directamente en Facebook, Twitter o Sina Weibo utilizando SLComposeViewController
. Esto funciona de manera muy similar al TWTweetComposeViewController
iOS 5.
En primer lugar, en su vista, el archivo de encabezado del controlador (.h) #import
el Marco social y el Marco de cuentas.
#import <Social/Social.h>
#import <Accounts/Accounts.h>
Aquí declararemos un UIButton
simple y un IBAction
que luego vincularemos a ese botón y un void
(sharingStatus) que se usará para verificar que el servicio de intercambio seleccionado esté disponible.
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *easyFacebookButton;
- (IBAction)facebookPost:(id)sender;
- (void)sharingStatus;
@end
@implementation ViewController
Luego, en su archivo de implementación (.m), comenzaremos por implementar el (sharedStatus) void que declaramos en el archivo de encabezado. sharingStatus usa SLComposeViewController
isAvailableForServiceType
BOOL para devolver si puede o no publicar en el servicio especificado en su argumento. En este caso, usaremos el tipo de servicio SLServiceTypeFacebook
. Si el servicio está disponible, el botón de publicación se habilitará con un valor alfa de 1.0f, y si el servicio no está disponible, el botón se desactivará con su valor alfa establecido en 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;
}
}
Aquí configuraremos el IBAction
que llamará al compositor. Como buena práctica, isAvailableForServiceType
nuevamente para evitar llamar al compositor para un tipo de servicio que no está disponible. (En caso de que algo haya fallado durante el último control, o si la disponibilidad cambió de alguna manera en la fracción de segundo entre presionar el botón de publicar y los compositores all / init. El código siguiente se configuró para mostrar una hoja de compositores de Facebook con texto, una imagen y un enlace. Esta acción también utiliza un controlador de finalización para los resultados cancelados y hechos del compositor.
- (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://.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];
}
}
En viewWillAppear
, registraremos un observador en ACAccountStoreDidChangeNotification
para que la aplicación pueda ser notificada cuando cambie la información de la cuenta. Este observador se eliminará en 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];
}
Y finalmente, abra el constructor de interfaz y agregue un UIButton
que será el botón de publicación. Luego, en el inspector de conexiones, vinculamos IBOutlet
e IBAction
que creamos anteriormente al botón, ¡y eso es todo! ¡Terminaste!
Solo usa este código para compartir en 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];
Si quieres esto para Twitter, simplemente cambia SLServiceTypeTwitter.