Quelles sont les étapes que je dois suivre pour utiliser le nouveau SLComposeViewController
d'iOS 6 à publier sur Facebook, Twitter ou Sina Weibo?
Pour plus de détails sur ce cadre, veuillez consulter le document Référence de la classe de cadre social de Apple.
Tutoriels supplémentaires:
Pour cet exemple, nous utiliserons le SLComposeViewController
de SLServiceTypeFacebook
. Si vous souhaitez utiliser Twitter ou SinaWeibo, remplacez le SLServiceType par l'un des éléments suivants:
iOS 6 a rendu très facile l'envoi de messages directement sur Facebook, Twitter ou Sina Weibo à l'aide de SLComposeViewController
. Cela fonctionne de manière très similaire à TWTweetComposeViewController
d'iOS 5.
Tout d’abord, dans le fichier d’en-tête de votre contrôleur de vue (.h) #import
le cadre social et le cadre comptable.
#import <Social/Social.h>
#import <Accounts/Accounts.h>
Ici, nous allons déclarer un simple UIButton
et un IBAction
que nous lierons plus tard à ce bouton et un void
(sharingStatus) qui sera utilisé pour vérifier que le service de partage sélectionné est disponible.
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *easyFacebookButton;
- (IBAction)facebookPost:(id)sender;
- (void)sharingStatus;
@end
@implementation ViewController
Ensuite, dans votre fichier d'implémentation (.m), nous commencerons par implémenter le void (sharingStatus) que nous avons déclaré dans le fichier d'en-tête. sharingStatus utilise SLComposeViewController
'isAvailableForServiceType
BOOL pour indiquer si vous pouvez ou non publier sur le service spécifié dans son argument. Dans ce cas, nous utiliserons le type de service SLServiceTypeFacebook
. Si le service est disponible, le bouton de publication sera activé avec une valeur alpha de 1.0f, et si le service n'est pas disponible, le bouton sera désactivé, sa valeur alpha étant définie à 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;
}
}
Ici, nous allons configurer le IBAction
qui appellera le compositeur. Comme bonne pratique, nous allons vérifier à nouveau isAvailableForServiceType
pour éviter d'appeler le composer) pour un type de service qui n'est pas disponible (si un problème est survenu lors de la dernière vérification, ou Le code ci-dessous a été configuré pour afficher une feuille de composition Facebook contenant du texte, une image et un lien. Cette action utilise également un gestionnaire de complétion pour les résultats annulés et faits du compositeur.
- (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];
}
}
Dans viewWillAppear
, nous enregistrerons un observateur sur ACAccountStoreDidChangeNotification
afin que l'application puisse être avertie lorsque les informations du compte changent. Cet observateur sera alors supprimé de 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];
}
Et enfin, ouvrez le générateur d’interface et ajoutez un UIButton
qui sera le bouton post. Ensuite, dans l'inspecteur de connexions, les IBOutlet
et IBAction
que nous avons créés précédemment au bouton, et c'est tout! Vous avez terminé!
Utilisez simplement ce code pour partager sur 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 vous voulez cela pour Twitter, changez simplement SLServiceTypeTwitter.
Utilisation sécurisée 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];
}];
}