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

使用新的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]; 

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

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

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

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

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

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

当您使用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应用程序名称作为post的一部分发布到用户Feed上。

希望这可以帮助。