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
と非常によく似ています。
まず、View Controllerのヘッダーファイル(.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
を使用します。サービスが利用可能な場合、投稿ボタンは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
を再度チェックして、利用できないサービスタイプに対してcomposerを呼び出さないようにします。 (最後のチェックで問題が発生した場合、または投稿ボタンと作曲家all/initをタップする間に1秒未満で可用性が何らかの形で変化した場合。以下のコードは、テキスト付きの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];
}];
}