2012-10-09 46 views
0

使用新的Facebook SDK 3.1和iOS 6有2個(實際上3)的方式來發布。如何指定應用程序名用戶使用後 - (通過應用程序名稱)使用SDK 3.1

(看來新趨勢是有更多的選擇,使之更簡單?)OMG!

這裏是一個:

SLComposeViewController *fbPost = [SLComposeViewController  composeViewControllerForServiceType:SLServiceTypeFacebook]; 
[fbPost addURL:[NSURL URLWithString:href]]; 
[self presentViewController:fbPost animated:YES completion:nil]; 

這是使用本地對話框的另一種方式:

[FBNativeDialogs presentShareDialogModallyFrom:self 
initialText: nil 
image: nil 
url: [NSURL URLWithString:href] 
handler:^(FBNativeDialogResult result, NSError *error) { 

    if (error) { 

    } 
    else 
    { 

     switch (result) { 
      case FBNativeDialogResultSucceeded: 

       break; 
      case FBNativeDialogResultCancelled: 

       break; 
      case FBNativeDialogResultError: 

       break; 
     } 

    } 

}]; 

我們,開發商,認爲這很酷,因爲我們提供一個很好的功能給用戶,也因爲我們的應用名稱顯示在帖子中,可以對應用進行一些推廣。

有趣的是,最新的實現都不允許指定應用程序的名字被公佈,名稱顯示「經由」之後。

我試圖用藏漢SLRequest:

ACAccountStore *store = [[ACAccountStore alloc] init]; 

ACAccountType *fbType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

NSMutableDictionary *options = [[NSMutableDictionary alloc] init]; 
(options)[@"ACFacebookAppIdKey"] = kFacebookAppID; 
(options)[@"ACFacebookPermissionsKey"] = @[@"publish_stream"]; 
(options)[@"ACFacebookAudienceKey"] = ACFacebookAudienceFriends; 


[store requestAccessToAccountsWithType:fbType options:options completion:^(BOOL granted, NSError *error) { 
    if(granted) { 
     // Get the list of Twitter accounts. 
     NSArray *fbAccounts = [store accountsWithAccountType:fbType]; 

     NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; 

     (params)[@"link"] = href; 
//   (params)[@"picture"] = picture; 
//   (params)[@"name"] = name; 
     (params)[@"actions"] = @"{\"name\": \"Go Gabi\", \"link\": \"http://www.gogogabi.com\"}"; 

     //Set twitter API call 
     SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST 
                   URL:[NSURL URLWithString:@"https://www.facebook.com/dialog/feed"] parameters:params]; 
     //Set account 


     [postRequest setAccount: [fbAccounts lastObject]]; 
     [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 

      if(error) 
      { 
       NSLog(@"%@", error.description); 
      } 
      else 
      { 
       NSLog(@"%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]); 

      } 

     }]; 

    } else { 


    } 
}]; 

可惜的是,分享這個名字也不是那麼微不足道了,我不知道爲什麼,誰正在設計新的實現...... 我希望得到一些幫助上那個,先謝謝了。

我儘量讓我的問題很有趣,因爲在如此平凡的主題洙無聊消磨時光......

+0

THanks的小費,我只是發現它... – gabrielpalomino

回答

5

當您使用SLComposeViewController,它實際上是系統呈現給你他們的控制器,它是誰發送的用戶使用發佈按鈕。因此在Facebook上它顯示爲「通過iOS」。

沒有辦法改變這種情況。

使用Facebook SDK 3.1時,它也使用iOS 6本機集成,因此當您在iOS 6上調用FBNativeDialogs時,它使用的是SLComposeViewController

Facebook的繼續發展自己的SDK,因爲他們提供了一個很好的夫婦模塊,使用「開箱即用」 - 這包括好友列表中選擇等等...但我認爲最大的原因爲Facebook繼續支持他們的SDK它爲了向後兼容。如果你不在iOS 6上,那麼它會回到它的庫,如果你在iOS 6上,它會使用系統集成。

Facebook是一個很大的事情,而現在它的原生提供了大量的開發人員將會使用它,就像Twitter的整合的最後一年。當然,問題是在這一點上,開發商必須丟棄舊的iOS版支持的選項,或者......有很多重複的代碼,在這個意義上,他們將檢查SLComposeViewController,如果它不可用(iOS 5中),然後使用舊的Facebook SDK ...你可以想象這會如何很快變得非常混亂。

所以,Facebook的SDK(3.1)採用iOS系統的整合Facebook如果有的話,或者如果不是,它是自己的。概括地說,除非你真的想Facebook的SDK東西(朋友糾察命名的),而你不支持的iOS 6 <,那麼你就不需要擔心自己的SDK,只需要使用社會框架規劃。

所以,回到你的問題,有3種方式發佈到Facebook?實際上考慮到我提到的,iOS 6有兩種方法:SLComposeViewControllerSLRequest。在較舊的iOS版本中,只有1個:Facebook SDK。

由於SLComposeViewController由系統擁有,而不是您的應用,因此它將始終以「通過iOS」共享。

另一方面SLRequest將顯示您的應用程序名稱。當您爲您的SLRequest指定一個帳戶時,該帳戶是通過ACAccountStore獲得的,因爲通過了一些選項,其中包括ACFacebookAppIdKey,這些選項將用於確定您的Facebook應用名稱作爲帖子的一部分發布到用戶供稿中。

希望這會有所幫助。

相關問題