0

使用新的 Facebook SDK 3.1 和 iOS 6 有两种(实际上是 3 种)发帖方式。

(似乎新趋势是有更多选择让它更简单??)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;
        }

     }

 }];

我们,开发人员,认为这很酷,因为我们为用户提供了一个很好的功能,还因为我们的应用程序名称出现在帖子中,这可以对应用程序进行一些推广。

有趣的是,最新的实现不允许指定发布的应用名称,名称出现在“via”之后。

我也尝试使用 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 {


    }
}];

不幸的是,分享这个名字不再那么微不足道了,我想知道为什么以及谁在设计新的实现......我希望能得到一些帮助,在此先感谢。

我试着让我的问题变得有趣,因为花时间在如此琐碎的话题上太无聊了……

4

1 回答 1

5

当您使用 时SLComposeViewController,实际上是系统向您展示他们的控制器,并且是使用发布按钮发送的用户。因此在 Facebook 上它显示为“通过 iOS”。

没有办法改变它。

使用 Facebook SDK 3.1,在底层它也使用 iOS 6 原生集成,所以当你FBNativeDialogs在 iOS 6 上调用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 中有 2 种方式:SLComposeViewController或者,SLRequest. 在较旧的 iOS 版本上,只有 1:Facebook SDK。

由于SLComposeViewController它归系统所有,而不是您的应用程序,因此它将始终以“通过 iOS”的形式共享。

另一方面SLRequest将显示您的应用程序名称。当您为您的 指定帐户时SLRequest,该帐户是通过ACAccountStore传递一些选项(包括)获得的ACFacebookAppIdKey,这些选项将用于确定您的 Facebook 应用程序名称,以作为帖子的一部分发布到用户提要中。

希望这可以帮助。

于 2012-10-12T03:38:53.353 回答