iOS 6の新機能を使用SLComposeViewController
してFacebook、Twitter、またはSina Weiboに投稿するために実行する必要のある手順は何ですか?
3 に答える
このフレームワークの詳細については、Appleのソーシャルフレームワーククラスリファレンスを参照してください。
追加のチュートリアル:
- 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
'sを使用しSLServiceTypeFacebook
ます。TwitterまたはSinaWeiboを使用する場合は、SLServiceTypeを次のいずれかに変更してください。
- SLServiceTypeFacebook
- SLServiceTypeSinaWeibo
- SLServiceTypeTwitter
iOS 6では、を使用してFacebook、Twitter、またはSinaWeiboに直接投稿するのが非常に簡単になりましたSLComposeViewController
。これはiOS5と非常によく似ていTWTweetComposeViewController
ます。
まず、View Controllerのヘッダーファイル(.h)#import
で、SocialFrameworkとAccountsFrameworkを使用します。
#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を実装することから始めます。sharedStatusは、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];
}
そして最後に、interface Builderを開き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];
}];
}