【问题标题】:Sharing with iOS 6.0 native Facebook integration: "Posted via my app name"?与 iOS 6.0 原生 Facebook 集成共享:“通过我的应用名称发布”?
【发布时间】:2012-09-14 21:14:09
【问题描述】:

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

【问题讨论】:

  • 我有一种不支持的感觉。不过,我很想知道它是否存在。似乎另一种选择是将 iOS 的官方 Facebook SDK 集成到您的应用程序中,但与使用 social.framework 相比,这感觉工作量很大。
  • @unforgiven3 同意。它消除了 social.framework 应有的简单性。所有这些关于集成的大惊小怪,然后留下这样的关键营销功能将非常令人失望
  • 是的,令人失望。另一方面,您能否在消息中包含您的应用程序名称(例如,在“我已获得 X 积分”之后)?也许您可以将 URL 设置为指向您的 App Store itms:// 链接?它可能不如直接使用 Facebook SDK 好,但它可能是一个不错的解决方法。
  • @unforgiven3 同意。这里同样的问题。非常令人失望。
  • 请查看我更新的解决方案答案。 stackoverflow.com/a/12605241/662605

标签: objective-c ios xcode facebook ios6


【解决方案1】:

更新 - 可以完成

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

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

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


上一个答案和解决方法

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

本课程仅提供一种单向交流方式,正如您所注意到的,您是通过点击“发布”按钮确认任何墙帖的人。这个视图控制器归 iOS 系统所有,而不是你的应用程序。通过与这个 compose view controller 交互,你实际上绕过了你的应用程序。

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

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

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

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

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

要使用它,请查看documentation for SLRequest

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

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

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

Facebook 也是如此。

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

很抱歉让您失望了,我也一直在寻找将ACAccount 集成到SLComposeViewController 中的方法,但也找不到方法。真可惜……因为原生 UI 很可爱。

【讨论】:

  • 感谢丹尼尔的精彩解释。您确实提供了深入的答案,我会接受,但是 docchang 提供了一个带有示例的解决方法。 +1,再次感谢
  • 非常好的见解,非常感谢丹尼尔。
  • @Daniel 这是链接,您可以在这里找到如何使用SLRequest Along With The Account FrameWork`....... techotopia.com/index.php/…
  • 所以这绝对是答案,但 Facebook 很难找到任何方式直接与开发人员关系中的人取得联系。有关如何最好地解决此问题的任何提示?
  • 有谁知道如何联系 Facebook 进行设置?
【解决方案2】:

我最终使用了带有新 Facebook SDK 3.1 的自定义 Facebook 框架。 Facebook Compose View

原文在这里: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.frameworkFBComposeView.bundle 拖到您的项目中。

注意:一定要使用Debug-iphonesimulator 中的那些。它是胖二进制文件。

【讨论】:

  • 我们如何在自己的项目中使用 git 上的自定义 Facebook 框架?
  • 我刚刚添加了设置说明。
  • 请查看我更新的解决方案答案。 stackoverflow.com/a/12605241/662605
  • 我在 plist 中添加了 facebookid。但是当我在 facebook 上分享图片时,它会说是通过 ios。他们有什么我错过的吗?
【解决方案3】:

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

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

original source (ShareKit issue discussion)

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

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

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

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

【讨论】:

  • Vilem,这个解决方案是否被证实确实有效?我们也遇到了这个问题,并且希望避免重新调整我们的共享。谢谢!
  • 请查看我更新的解决方案答案。 stackoverflow.com/a/12605241/662605
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多