webentwicklung-frage-antwort-db.com.de

Tutorial für die gemeinsame Nutzung von SLComposeViewController

Welche Schritte muss ich ausführen, um mit dem neuen SLComposeViewController von iOS 6 auf Facebook, Twitter oder Sina Weibo zu posten?

76
Mick MacCallum

Einzelheiten zu diesem Framework finden Sie in Apples Social Framework Class Reference

Zusätzliche Tutorials:

  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

In diesem Beispiel verwenden wir das SLComposeViewController des SLServiceTypeFacebook. Wenn Sie Twitter oder SinaWeibo verwenden möchten, ändern Sie einfach den SLServiceType in einen der folgenden Werte:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6 hat es sehr einfach gemacht, mit dem SLComposeViewController direkt auf Facebook, Twitter oder Sina Weibo zu posten. Dies funktioniert sehr ähnlich wie in iOS 5 TWTweetComposeViewController.

Zuerst in der Header-Datei Ihres View Controllers (.h) #import das Social Framework und das Accounts Framework.

#import <Social/Social.h>

#import <Accounts/Accounts.h>

Hier deklarieren wir ein einfaches UIButton und ein IBAction, die wir später mit dieser Schaltfläche verknüpfen, und ein void (sharingStatus), das verwendet wird, um den ausgewählten Freigabedienst zu überprüfen ist verfügbar.

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIButton *easyFacebookButton;
- (IBAction)facebookPost:(id)sender;
- (void)sharingStatus;
@end

@implementation ViewController

Anschließend implementieren wir in Ihrer Implementierungsdatei (.m) zunächst die (sharingStatus) -Lücke, die wir in der Headerdatei deklariert haben. sharingStatus verwendet SLComposeViewController 's isAvailableForServiceType BOOL, um zurückzugeben, ob Sie an den in seinem Argument angegebenen Dienst senden können oder nicht. In diesem Fall verwenden wir den Servicetyp SLServiceTypeFacebook. Wenn der Dienst verfügbar ist, wird die Post-Schaltfläche mit einem Alpha-Wert von 1,0 f aktiviert. Wenn der Dienst nicht verfügbar ist, wird der Alpha-Wert der Schaltfläche auf 0,5 f deaktiviert.

- (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;
    }
}

Hier richten wir das IBAction ein, das den Komponisten aufruft. Wir überprüfen isAvailableForServiceType erneut, um zu vermeiden, dass der composer für einen Diensttyp aufgerufen wird, der nicht verfügbar ist. (Falls bei der letzten Überprüfung ein Fehler aufgetreten ist, oder Wenn sich die Verfügbarkeit in Sekundenbruchteilen zwischen dem Antippen des Post-Buttons und der Anzeige eines Facebook-Komponistenblatts mit Text, Bild und Link geändert hat, wird diese Aktion ebenfalls verwendet ein Completion-Handler für die stornierten und erledigten Ergebnisse des Komponisten.

- (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 registrieren wir einen Beobachter für ACAccountStoreDidChangeNotification, damit die Anwendung benachrichtigt werden kann, wenn sich die Kontoinformationen ändern. Dieser Beobachter wird dann in viewDidDisappear entfernt.

- (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];
}

Zum Schluss öffnen Sie den Interface Builder und fügen ein UIButton hinzu, das die Schaltfläche zum Posten sein wird. Verknüpfen Sie dann im Verbindungsinspektor die zuvor erstellten IBOutlet und IBAction mit der Schaltfläche, und fertig! Sie sind fertig!

enter image description here

141
Mick MacCallum

Verwenden Sie einfach diesen Code, um auf Facebook zu teilen.

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];

Wenn Sie dies für Twitter möchten, ändern Sie einfach SLServiceTypeTwitter.

25
Desert Rose

Sichere Verwendung von 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