web-dev-qa-db-fra.com

Tutoriel pour le partage SLComposeViewController

Quelles sont les étapes que je dois suivre pour utiliser le nouveau SLComposeViewController d'iOS 6 à publier sur Facebook, Twitter ou Sina Weibo?

76
Mick MacCallum

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:

  1. http://soulwithmobiletechnology.blogspot.com/2012/07/tutorial-how-to-use-inbuilt.html
  2. http://www.mobile.safilsunny.com/iphone/integrating-facebook-ios/
  3. https://rudeboy-quickies.blogspot.com/2012/06/steps-to-integrate-facebook-in-ios6.html

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:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

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é!

enter image description here

141
Mick MacCallum

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.

25
Desert Rose

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];
        }];
    }
13
A R