Підручник для спільного використання SLComposeViewController [закрито]


76

Які кроки мені потрібно виконати, щоб використовувати iOS 6 SLComposeViewControllerдля публікації на Facebook, Twitter або Sina Weibo?

Відповіді:


141

Докладніше про цю структуру див. У довідковому класі 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's SLServiceTypeFacebook. Якщо ви хочете скористатися Twitter або SinaWeibo, просто змініть тип SLServiceType на одне з наступного:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6 дозволив дуже легко розміщувати повідомлення безпосередньо у Facebook, Twitter або Sina Weibo за допомогою SLComposeViewController . Це працює дуже подібно до iOS 5TWTweetComposeViewController .

По-перше, у файлі заголовка контролера вашого подання (.h) #importSocial Framework та Accounts Framework.

#import <Social/Social.h>

#import <Accounts/Accounts.h>

Тут ми оголосимо просте UIButtonі IBActionте, що згодом ми зв’яжемо з цією кнопкою та void(sharingStatus), який буде використовуватися для перевірки доступності обраної служби обміну.

@interface ViewController : UIViewController

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

@implementation ViewController

Потім у вашому файлі реалізації (.m) ми почнемо з реалізації порожнечі (sharingStatus), яку ми оголосили у файлі заголовка. sharingStatus використовує SLComposeViewController«и isAvailableForServiceTypeBOOL повернутися , чи можете ви відправляти повідомлення в службу , зазначеної в якості аргументу. У цьому випадку ми будемо використовувати тип послуги SLServiceTypeFacebook. Якщо послуга доступна, кнопка розміщення буде ввімкнена зі значенням альфа-значення 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ще раз, щоб уникнути виклику композитора щодо типу послуги, який недоступний. (Якщо під час останньої перевірки щось пішло не так, або якщо доступність якимось чином змінилася за частку секунди між натисканням кнопки допису та композиторами all / 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ми створили раніше кнопку, і все! Ви закінчили!

введіть тут опис зображення


1
Привіт, це була приємна відповідь, хоча я маю невеликі сумніви, чи можемо ми також представити інтерфейс для входу на випадок, якщо обліковий запис користувача в Twitter чи Facebook не налаштовано?
Абхінандан Сахгал

3
@AbhinandanSahgal ні, не з цим класом. Однак при належній роботі композитор виявить, чи не ввійшов користувач, і подасть сповіщення про перехід до налаштувань відповідної служби для входу до свого облікового запису.
Mick MacCallum

1
@AbhinandanSahgal Вибачте, але ні, я не можу. Це вбудована поведінка, яка повинна працювати автоматично, якщо ви ще не ввійшли в систему. Крім того, Apple раніше пропонувала API для пересилання користувача до програми налаштувань, але її було видалено в iOS 5.1 :(
Mick MacCallum

7
При використанні Social.framework немає необхідності посилатися на Accounts.framework. Також може бути недоліком перевірити, чи доступна послуга, оскільки ОС зробить це автоматично і не вдасться із попередженням, яке має кнопку Налаштування.
martinjbaker

1
Не виконуйте перевірку [SLComposeViewController isAvailableForServiceType: ...], і якщо ця послуга не налаштована в програмі «Налаштування», фреймворк видасть сповіщення із зазначенням цієї проблеми разом із кнопкою для переходу в налаштування.
Surpher

25

Просто використовуйте цей код, щоб поділитися у 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.


я отримую сторінку налаштувань із вашим кодом.
сабір

@sabir Я вас не зрозумів. Чи можете ви пояснити це?
Desert Rose

1
коли обліковий запис Facebook порожній у вашому пристрої, він відображає попередження з налаштуваннями та кнопку скасування, коли я натискаю кнопку налаштувань, він повинен перейти на сторінку налаштувань, що працює нормально до IOS 6.01, але в IOS 7 кнопка налаштувань не переводить мене до налаштувань page.так що у вас про це немає уявлення
sabir

1
Ви тестували його на пристрої? У симуляторі ця проблема також є в iOS 6.
Desert Rose

[controllerSLC setInitialText: @ ".."]; зараз застаріло.
Вікі

13

Безпечне використання 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];
        }];
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.