如何使用SDK 3.1指定用户发布的应用程序名称(通过应用程序名称)

gab*_*ino 0 facebook objective-c ios

使用新的Facebook SDK 3.1和iOS 6,有2种(实际上3种)发布方式.

(似乎新趋势是有更多的选择让它变得更简单?)OMG !!

这是一个:

SLComposeViewController *fbPost = [SLComposeViewController      composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbPost addURL:[NSURL URLWithString:href]];
[self presentViewController:fbPost animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

这是使用原生对话框的另一种方式:

[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;
        }

     }

 }];
Run Code Online (Sandbox Code Playgroud)

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

有趣的是,最新的实现不允许指定应用程序名称是发布,名称出现在'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 {


    }
}];
Run Code Online (Sandbox Code Playgroud)

不幸的是,分享这个名字并不是那么简单,我想知道为什么以及谁在设计新的实现...我希望能得到一些帮助,感谢提前.

我试着让我的问题变得有趣,因为在如此微不足道的话题中花费时间太闷了......

Dan*_*iel 5

当你使用它时SLComposeViewController,它实际上是系统向你呈现他们的控制器,而且是使用post按钮发送的用户.因此在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中有两种方式:SLComposeViewController或者,SLRequest.在较旧的iOS版本中,只有1:Facebook SDK.

由于它SLComposeViewController是由系统拥有的,而不是您的应用程序,因此它将始终作为"通过iOS"共享.

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

希望这可以帮助.