44

我刚刚通过 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;
      }
4

3 回答 3

70

更新 - 可以做到

因此,iOS 版 Digg应用程序能够在不使用 Accounts 框架获取用户权限的情况下分享到 Facebook……他们使用UIActivityViewController并将帖子显示为“通过 Digg”,我联系了 Digg 的某个人,他们告诉我这是一本手册在此过程中,您必须在 Apple App Store 中发布您的 iOS 应用程序,并在 Facebook App Store 中接受和发布您的 Facebook 应用程序。然后Facebook可以通过这种方式手动处理两者的链接。

这样做的明显缺点是,这UIActivityViewController意味着您可以在不与 Facebook 集成的情况下从您的应用程序共享,不需要 Facebook 应用程序......但是要获得“通过您的应用程序名称”,您需要一个 Facebook 将批准的 Facebook 应用程序他们自己的应用商店,一旦一切就绪,您需要联系开发者关系以将其全部链接起来。

请注意,我的其余答案(我之前的答案)是正确的,解决方案是 Facebook 可以为您执行的手动过程,您的 iOS 代码不应该受到影响。


以前的答案和解决方法

您想要的本机 Facebook 集成实际上是作曲家视图控制器。这是通过使用SLComposeViewController带有服务类型的类来获得的SLServiceTypeFacebook

此类仅提供单向通信,并且如您所见,您是通过点击“发布”按钮确认任何墙贴的人。此视图控制器归 iOS 系统所有,而不是您的应用程序。通过与这个 compose view controller 交互,你实际上绕过了你的应用程序。

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

除非您的应用程序仅通过更深入的双向 Facebook 集成来运行,否则您应该使用SLComposeViewController(更深入的集成意味着您的应用程序需要您的朋友列表或现有的墙贴、相册等......)。

为了让来自您的应用程序的帖子以“通过 xxxx”而不是“通过 iOS”出现在 Facebook 上,您需要通过SLRequest类与 Facebook 进行交互。为此,您还必须与Account.framework除了Social.framework.

它在设置方面类似于之前使用(并且仍然可以使用)的以前的 Facebook iOS SDK,您获得对设备帐户商店的引用,您请求 Facebook 帐户并发送您的 Facebook 应用程序 ID 和一系列权限.

如果获得批准,您就可以通过SLRequest该类与 Facebook Graph API 进行交互。通过在这个庄园的墙上张贴,您将拥有所需的“通过 xxx”。

要使用它,请查看SLRequest 的文档

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

您当然可以从本机 UI 中激发自己的灵感,也可以查看 iPhoto 的 iOS 应用程序,尝试使用该应用程序分享到 Facebook,您会注意到它请求与您的 Facebook 帐户交互的权限(使用时不会发生的事情SLComposeViewController),然后呈现了与SLComposeViewControllerFacebook 帖子撰写非常接近的内容。

但如果你仔细观察,你会发现它并不一样。这也适用于 Twitter 及其原生应用程序与原生集成。他们有自己的撰写视图,值得注意的是他们使用原生 iOS 集成(Apple 框架)。我们知道这一点,因为转到设置 > 隐私 > Twitter,您可以看到 Twitter 应用程序是使用设备上的 Twitter 帐户的授权应用程序。

Facebook 也是如此。

如果您没有获得许可,那么您将无法发布为您的应用程序 - 也就是“通过 myApp”。

很抱歉让你失望了,我也一直在寻找一种方法来整合一个ACAccountSLComposeViewController但也找不到方法。真可惜……因为本机 UI 很可爱。

于 2012-09-26T15:28:09.440 回答
13

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

原文在这里:facebook compose view。我刚刚修复了一些小警告并使用新的 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:^{}];

设置:

  1. 打开项目并进行干净的构建。
  2. 进入文件夹$PROJECT_FOLDER\build\Debug-iphonesimulator并将FBComposeView.framework&FBComposeView.bundle拖到您的项目中。

注意:请务必使用Debug-iphonesimulator. 它是胖二进制文件。 在此处输入图像描述

于 2012-09-26T18:21:23.860 回答
3

我们通过 iOS 5 Twitter 集成解决了类似的问题,结果是:

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

原始来源(ShareKit 问题讨论)

我想苹果对 Facebook 和其他社交服务也是如此。

编辑:不幸的是,这只适用于 Twitter.framework。我认为最好的解释和答案是上面丹尼尔的解释和答案。也许是时候关注它了,让苹果知道,我们想要什么。

如何在 Facebook 中使用 SLRequest 的示例在这个 SO question

EDIT2:提交了一个雷达错误 ID# 12980058。希望他们听...

于 2012-11-15T15:37:34.183 回答