Які кроки мені потрібно виконати, щоб використовувати iOS 6 SLComposeViewController
для публікації на Facebook, Twitter або Sina Weibo?
Які кроки мені потрібно виконати, щоб використовувати iOS 6 SLComposeViewController
для публікації на Facebook, Twitter або Sina Weibo?
Відповіді:
Докладніше про цю структуру див. У довідковому класі Apple Social Framework
Додаткові підручники:
Для цього прикладу ми будемо використовувати SLComposeViewController
's SLServiceTypeFacebook
. Якщо ви хочете скористатися Twitter або SinaWeibo, просто змініть тип SLServiceType на одне з наступного:
iOS 6 дозволив дуже легко розміщувати повідомлення безпосередньо у Facebook, Twitter або Sina Weibo за допомогою SLComposeViewController
. Це працює дуже подібно до iOS 5TWTweetComposeViewController
.
По-перше, у файлі заголовка контролера вашого подання (.h) #import
Social 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
«и isAvailableForServiceType
BOOL повернутися , чи можете ви відправляти повідомлення в службу , зазначеної в якості аргументу. У цьому випадку ми будемо використовувати тип послуги 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
ми створили раніше кнопку, і все! Ви закінчили!
Просто використовуйте цей код, щоб поділитися у 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.
Безпечне використання 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];
}];
}