Какими шагами я должен следовать, чтобы использовать iOS 6 new SLComposeViewController
для публикации в Facebook, Twitter или Sina Weibo?
Учебник для совместного использования SLComposeViewController
Ответ 1
Для получения подробной информации об этой платформе, пожалуйста, обратитесь к справочному классу Apple Social Framework
Дополнительные уроки:
- http://soulwithmobiletechnology.blogspot.com/2012/07/tutorial-how-to-use-inbuilt.html
- http://www.mobile.safilsunny.com/iphone/integrating-facebook-ios/
- 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
с кнопкой, и вот она! Вы сделали!
Ответ 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];
}];
}