2012-09-19 35 views

回答

140

有關此框架請參閱蘋果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或新浪微博使用SLComposeViewController。這與iOS 5的TWTweetComposeViewController非常類似。

首先,在您的視圖控制器的頭文件(.h)#import社會框架和帳戶框架。

#import <Social/Social.h>

#import <Accounts/Accounts.h>

在這裏,我們將聲明一個簡單UIButtonIBAction,我們將在後面鏈接到該按鈕和void(sharingStatus),其將被用於檢驗所選擇的共享服務是可用。然後,在您的實現文件(.m)中,我們將首先實現我們在頭文件中聲明的(sharingStatus)void。 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作曲家工作表,一個圖像和一個鏈接,這個動作還爲作曲家取消和完成的結果使用了一個完成處理程序。

- (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這將是後按鈕。然後在連接檢查員鏈接前面創建的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設置按鈕並不帶我設置page.so你對此有任何想法 – 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]; 
     }]; 
    }