与iOS 6.0原生Facebook整合共享:“通过我的应用程序名称发布”?

我刚刚通过ios 6将facebook集成到了我的应用程序中,但在墙上张贴时遇到了问题。 它只是说“通过iOS应用程序发布” 。 我希望它说“通过应用程序名称发布” 。 我已经做了一个Facebook的应用程序标识,我有他们已经分配的应用程序编号,但我不知道如何将其与facebook集成进行整合。

以下是我的代码。 如果有人可以帮助,这将不胜感激。 谢谢!

{ NSString *message; message= [[NSString alloc] initWithFormat:@"I've earned %@ points", [self retrieveScore]]; if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) { SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; [controller setInitialText:message]; [controller addURL:[NSURL URLWithString:@"http://mysite"]]; [self presentViewController:controller animated:YES completion:Nil]; [message release]; SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){ NSString *output= nil; switch (result) { case SLComposeViewControllerResultCancelled: output= @"Action Cancelled"; NSLog (@"cancelled"); break; case SLComposeViewControllerResultDone: output= @"Post Succesfull"; NSLog (@"success"); break; default: break; } UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; [alert release]; [controller dismissViewControllerAnimated:YES completion:Nil]; }; controller.completionHandler =myBlock; } 

更新 – 它可以完成

因此, Digg的iOS应用程序能够分享到Facebook,而无需使用帐户框架来获得用户权限…他们使用UIActivityViewController并有post显示为“通过Digg”,我联系了Digg的人,他们告诉我,这是一个手动过程中,您必须在iOS App Store中发布您的iOS应用程序,并在Facebook App Store中接受并发布您的Facebook应用程序。 然后Facebook可以通过这种方式手动处理链接。

UIActivityViewController的明显缺点是,你可以分享你的应用程序,而无需与Facebook进行任何整合,不需要Facebook应用程序…但是,通过你的应用程序名称,你将需要一个Facebook应用程序,Facebook将批准进入他们自己的app store,一旦一切正常,你需要联系开发者关系链接起来。

请注意,我的答案的其余部分(我以前的答案)是正确的,解决scheme是Facebook可以为你做的手动过程,你的iOS代码不应该受到影响。


以前的答案和解决方法

您想要的本地Facebook集成实际上是composer php视图控制器。 这是通过使用服务types为SLServiceTypeFacebookSLComposeViewController类获得的。

本课只提供单向沟通,正如您注意到的那样,您是通过点击“发布”button确认任何墙帖的人。 这个视图控制器是由iOS系统拥有,而不是你的应用程序。 通过与这个组合视图控制器交互,你实际上绕过了你的应用程序。

用户喜欢这样做,因为它给了他们安全性。

除非您的应用程序只能通过更深层次的双向Facebook集成,否则您应该使用SLComposeViewController (更深入的整合意味着您的应用程序需要您的朋友列表或现有的墙帖,相册等)。

为了让来自您的应用程序的post以“via xxxx”而不是“via iOS”出现在Facebook上,您需要通过SLRequest类与Facebook进行交互。 为了做到这一点,除了Social.framework之外,还必须与Account.framework进行Social.framework

它类似于之前使用过的Facebook iOS SDK(并且仍然可以使用),您可以参考设备的帐户存储区,请求Facebook帐户并发送您的Facebook应用程序ID和一组权限。

如果被授予,您可以通过SLRequest类与Facebook Graph API进行SLRequest 。 通过张贴到你在这个庄园的墙上,你将有所需的“通过xxx”。

要使用这个,请查看SLRequest的文档 。

请注意,在这种情况下,您有责任创build自己的撰写视图。

您当然可以从本地用户界面启发自己,也可以查看iPhoto的iOS应用程序,尝试与该应用程序共享Facebook,您会注意到它请求与您的Facebook帐户进行交互的权限(在使用SLComposeViewController时不会发生SLComposeViewController )然后呈现一些非常接近的SLComposeViewController Facebook的post撰写。

但是如果你仔细观察,你会注意到它是不一样的。 这也适用于Twitter和他们的本地应用程序与本地集成。 他们有自己的撰写视图,注意到他们使用本地iOS集成(Apple框架)真的很有趣。 我们知道这是因为去设置>隐私> Twitter的,你可以看到Twitter的应用程序是一个授权的应用程序使用设备上的Twitter帐户(S)。

Facebook也一样。

如果你没有获得许可,那么你就没有办法发布你的应用程序 – 又名“通过myApp”。

对不起,让你失望了,我也一直在寻找一种方法来将ACAccount集成到SLComposeViewController但是也找不到方法。 这是一个耻辱…因为本地用户界面是甜美的。

我最终使用了新的Facebook SDK 3.1的自定义Facebook框架。 Facebook撰写视图

原来在这里: facebook撰写视图 。 我刚刚修复了一些小的警告,并更新了新的FB SDK 3.1。

用法:

 DEFacebookComposeViewControllerCompletionHandler __block completionHandler = ^(DEFacebookComposeViewControllerResult result) { [self dismissViewControllerAnimated:YES completion:nil]; switch (result) { case DEFacebookComposeViewControllerResultCancelled: NSLog(@"Facebook Result: Cancelled"); break; case DEFacebookComposeViewControllerResultDone: NSLog(@"Facebook Result: Sent"); break; } }; DEFacebookComposeViewController * compose = [[DEFacebookComposeViewController alloc] init]; [compose setInitialText:self.shareText]; [compose addImage:self.shareImage]; [compose addURL:self.shareURL]; [compose setCompletionHandler:completionHandler]; [self presentViewController:compose animated:YES completion:^{}]; 

build立:

  1. 打开项目,做一个干净的构build。
  2. 进入文件夹$PROJECT_FOLDER\build\Debug-iphonesimulator并将FBComposeView.frameworkFBComposeView.bundle拖动到您的项目中。

注意:一定要使用Debug-iphonesimulator 。 这是胖二进制。 在这里输入图像说明

我们解决了与iOS 5 Twitter整合类似的问题,结果是:

当使用开发版本或通过模拟器发布到Twitter时,它几乎总是在Twitter上显示为“通过iOS”。 一旦您的应用程序获得批准,并且您从AppStore构build发布后,它应该显示为“iOS上的YourAppName”的发布,并带有应用程序appstore页面的链接。

原始来源(ShareKit问题讨论)

我想苹果公司和Facebook以及其他社交服务一样。

编辑:不幸的是,这只有真正与Twitter.framework工作。 我认为最好的解释和答案是丹尼尔以上的一个。 也许现在是时候对它进行雷达了,所以苹果知道,我们想要什么。

如何使用Facebook的SLRequest的例子是在这个问题

EDIT2:提交了雷达Bug ID#12980058。希望他们听…