2012-09-19 7 views

答えて

140

AppleのSocial Framework Class Reference

追加のチュートリアルを参照してください。

  1. http://soulwithmobiletechnology.blogspot.com/2012/07/tutorial-how-to-use-inbuilt.html
  2. http://www.mobile.safilsunny.com/iphone/integrating-facebook-ios/
  3. http://rudeboy-quickies.blogspot.com/2012/06/steps-to-integrate-facebook-in-ios6.html
  4. https://developer.apple.com/videos/wwdc/2012/?id=306

この例では、SLComposeViewControllerSLServiceTypeFacebookを使用します。あなたはTwitterや新浪微博を使用したい場合は、単に次のいずれかにSLServiceTypeを変更:

  • をSLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter
  • のiOS 6が直接投稿することが非常に簡単になりました

Facebook、Twitter、またはSina WeiboにSLComposeViewControllerを使って送信します。これは、iOS 5のTWTweetComposeViewControllerと非常によく似ています。

まず、ビューコントローラのヘッダーファイル(.h)#importのソーシャルフレームワークとアカウントフレームワーク。

#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はSLComposeViewControllerisAvailableForServiceType 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の作曲家のシートをテキスト、このアクションは、コンポーザーの取り消し済みおよび実行済みの結果の完了ハンドラーも使用します。viewWillAppear

- (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]; 
    } 
} 

我々は、アカウント情報を変更したときにアプリケーションに通知することができますので、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を追加します。次に、接続インスペクタのリンクで、先にボタンに作成したIBOutletIBActionをリンクします。それだけです!あなたは終わった!

enter image description here

+1

こんにちは、 それは私が小さな疑問を持っているけれども、場合、ユーザーのTwitter/Facebookのアカウントが設定されていないで、私たちも存在ログインインタフェースすることができ、素敵な答えでしたアップ? –

+3

@AbhinandanSahgalいいえ、このクラスではありません。しかし、正しく動作している場合、作曲者は、ユーザがログインしていないかどうかを検出し、適切なサービスが自分のアカウントにログインするための設定に警告を出す。 –

+0

サンプルを置いて設定することはできますか? –

25

ただ、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を変更するだけです。

+0

あなたのコードで設定ページの問題が表示されます。 – sabir

+0

@sabir私はあなたを得ませんでした。それを説明してもらえますか? –

+1

あなたのデバイスでFacebookアカウントが空のときは、設定で警告が表示され、設定ボタンをクリックするとキャンセルボタンが表示されます。設定ページに行く必要があります。IOS 6.01までは正常に動作しますが、IOS 7の設定ボタンでは、あなたはこれについて何か考えていますか? – sabir

13

安全利用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]; 
     }]; 
    } 
関連する問題