使用iOS 6的新 SLComposeViewController
发布内容到Facebook、Twitter或Sina Weibo,需要遵循哪些步骤?
使用iOS 6的新 SLComposeViewController
发布内容到Facebook、Twitter或Sina Weibo,需要遵循哪些步骤?
若要了解此框架的详细信息,请参阅Apple的Social Framework Class Reference。
其他教程:
在本示例中,我们将使用SLComposeViewController
的SLServiceTypeFacebook
。如果您希望使用Twitter或SinaWeibo,请将SLServiceType更改为以下之一:
iOS 6使得使用SLComposeViewController
直接发布到Facebook、Twitter或Sina Weibo非常容易。这与iOS 5的TWTweetComposeViewController
非常相似。
首先,在您的视图控制器的头文件(.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) void 开始实现。 sharingStatus 使用 SLComposeViewController
的 isAvailableForServiceType
BOOL 来返回您是否可以发布到其参数中指定的服务。 在这种情况下,我们将使用服务类型 SLServiceTypeFacebook
。 如果该服务可用,则会启用带有 alpha 值1.0f 的“发布”按钮;如果该服务不可用,则按钮将被禁用,alpha 值设置为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
来调用composer。为了良好的实践,我们将再次检查isAvailableForServiceType
,以避免为不可用的服务类型调用composer。(以防上次检查出现问题,或者在点击发布按钮和初始化composers之间的几分之一秒内可用性发生变化)下面的代码已经设置为显示带有文本、图像和链接的Facebook composers sheet。此操作还利用了composer的取消和完成结果的完成处理程序。
- (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:@"https://dev59.com/8Wcs5IYBdhLWcg3w433H"]];
[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];
}];
}