Учебник для совместного использования SLComposeViewController

Какими шагами я должен следовать, чтобы использовать iOS 6 new SLComposeViewController для публикации в Facebook, Twitter или Sina Weibo?

Ответ 1

Для получения подробной информации об этой платформе, пожалуйста, обратитесь к справочному классу Apple Social Framework

Дополнительные уроки:

  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

В этом примере мы будем использовать SLComposeViewController SLServiceTypeFacebook. Если вы хотите использовать Twitter или SinaWeibo, просто измените SLServiceType на один из следующих:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6 позволила очень легко размещать сообщения прямо в Facebook, Twitter или Sina Weibo с помощью SLComposeViewController. Это работает очень похоже на iOS 5 TWTweetComposeViewController.

Во-первых, в вашем заголовочном файле контроллера представления (.h) #import Social Framework и Framework Accounts.

#import <Social/Social.h>

#import <Accounts/Accounts.h>

Здесь мы объявим простой UIButton и IBAction который мы позже UIButton с этой кнопкой, и void (sharedStatus), который будет использоваться для проверки доступности выбранного сервиса обмена.

@interface ViewController : UIViewController

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

@implementation ViewController

Затем, в вашем файле реализации (.m), мы начнем с реализации vid (sharedStatus), который мы объявили в заголовочном файле. sharedStatus использует SLComposeViewController isAvailableForServiceType BOOL для возврата того, можете ли вы публиковать сообщения в сервисе, указанном в его аргументе. В этом случае мы будем использовать сервис типа SLServiceTypeFacebook. Если сервис доступен, кнопка "post" будет включена с альфа-значением 1.0f, а если сервис недоступен, кнопка будет отключена, ее альфа-значение установлено на 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;
    }
}

Здесь мы IBAction, который вызовет композитора. Для хорошей практики мы isAvailableForServiceType раз проверим isAvailableForServiceType чтобы избежать вызова isAvailableForServiceType для типа сервиса, который недоступен. (Если что-то пошло не так во время последней проверки, или если доступность каким-то образом изменилась за доли секунды между нажатием кнопки "Post" и "Все композиторы /init". Приведенный ниже код был настроен для отображения листа композиторов Facebook с текстом, изображение и ссылка. Это действие также использует обработчик завершения для отмененных и выполненных композитором результатов.

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

В viewWillAppear мы зарегистрируем наблюдателя в ACAccountStoreDidChangeNotification чтобы приложение могло получать уведомления об изменении информации учетной записи. Этот наблюдатель будет удален в 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];
}

И, наконец, откройте конструктор интерфейса и добавьте UIButton который будет кнопкой поста. Затем в инспекторе соединений свяжите созданный ранее IBOutlet и IBAction с кнопкой, и вот она! Вы сделали!

enter image description here

Ответ 2

Просто используйте этот код для публикации на 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];

Если вы хотите это для Twitter, просто измените SLServiceTypeTwitter.

Ответ 3

Безопасное использование 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];
        }];
    }