77 votes

Tutoriel pour le partage de SLComposeViewController

Quelles sont les étapes à suivre pour utiliser les nouvelles fonctionnalités d'iOS 6 ? SLComposeViewController pour publier sur Facebook, Twitter ou Sina Weibo ?

141voto

0x7fffffff Points 40133

Pour plus de détails sur ce cadre, veuillez consulter le site Web d'Apple. Référence des classes du cadre social

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 l'option SLComposeViewController 's SLServiceTypeFacebook . Si vous souhaitez utiliser Twitter ou SinaWeibo, il suffit de remplacer le SLServiceType par l'un des éléments suivants :

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

Avec iOS 6, il est très facile de publier directement sur Facebook, Twitter ou Sina Weibo à l'aide de la fonction SLComposeViewController . Le fonctionnement est très similaire à celui d'iOS 5. TWTweetComposeViewController .

Tout d'abord, dans le fichier d'en-tête (.h) de votre contrôleur de vue #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 allons commencer par implémenter le void (sharingStatus) que nous avons déclaré dans le fichier d'en-tête. sharingStatus utilise SLComposeViewController 's isAvailableForServiceType BOOL pour retourner si oui ou non vous pouvez poster au service spécifié dans son argument. Dans ce cas, nous utiliserons le service de type SLServiceTypeFacebook . Si le service est disponible, le bouton post sera activé avec une valeur alpha de 1.0f, et si le service n'est pas disponible, le bouton sera désactivé avec une valeur alpha de 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. Pour une bonne pratique, nous vérifierons isAvailableForServiceType à nouveau pour éviter d'appeler le compositeur pour un type de service qui n'est pas disponible. (Au cas où quelque chose se serait mal passé lors de la dernière vérification, ou si la disponibilité avait changé d'une manière ou d'une autre dans la fraction de seconde qui s'est écoulée entre le moment où vous avez appuyé sur le bouton de publication et celui où le compositeur a été activé. Le code ci-dessous a été configuré pour afficher une fiche de compositeurs Facebook avec du texte, une image et un lien. Cette action utilise également un gestionnaire d'achèvement pour les résultats de l'annulation et de l'exécution 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];
    }
}

Sur viewWillAppear nous allons enregistrer un observateur pour ACAccountStoreDidChangeNotification afin que l'application puisse être notifiée lorsque les informations du compte changent. Cet observateur sera ensuite supprimé dans 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 constructeur d'interface et ajoutez un UIButton qui sera le bouton post. Ensuite, dans l'inspecteur des connexions, reliez le bouton IBOutlet et IBAction que nous avons créé plus tôt au bouton, et c'est tout ! Vous avez terminé !

enter image description here

1 votes

Bonjour, c'était une bonne réponse, mais j'ai un petit doute, pouvons-nous également présenter une interface de connexion dans le cas où le compte Twitter/Facebook de l'utilisateur n'est pas configuré ?

3 votes

@AbhinandanSahgal non, pas avec cette classe. Cependant, lorsqu'il fonctionne correctement, le compositeur détectera si l'utilisateur n'est pas connecté et présentera une alerte pour l'amener aux paramètres du service approprié pour se connecter à son compte.

0 votes

Pouvez-vous mettre un échantillon pour les amener aux réglages ?

25voto

Desert Rose Points 757

Il suffit d'utiliser ce code pour le 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 que ce soit pour Twitter, il suffit de changer SLServiceTypeTwitter.

0 votes

J'obtiens un problème de page de paramètres avec votre code.

0 votes

@sabir Je n'ai pas compris. Pouvez-vous l'expliquer ?

1 votes

Lorsque le compte Facebook est vide dans votre appareil, il affiche l'alerte avec les paramètres et le bouton d'annulation lorsque je clique sur le bouton des paramètres, il devrait aller à la page des paramètres. Cela fonctionne bien jusqu'à IOS 6.01, mais dans IOS 7, le bouton des paramètres ne m'amène pas à la page des paramètres.

13voto

A R Points 106

Utilisation sûre 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];
        }];
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X