objective-c - 与 iOS 6.0 原生 Facebook 集成共享 : "Posted via my app name"?

标签 objective-c ios xcode facebook ios6

我刚刚通过 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 for iOS应用程序无需使用帐户框架即可共享到 Facebook 以获取用户权限...他们使用 UIActivityViewController并将帖子显示为“通过 Digg”,我联系了 Digg 的某个人,他们告诉我这是一个手动过程,您必须在 Apple App Store 中发布您的 iOS 应用程序,并且还必须在 Facebook 中接受并发布您的 Facebook 应用程序应用商店。
那么 Facebook 就可以通过这种方式手动处理将两者链接起来。

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

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

上一个答案和解决方法

您想要的原生 Facebook 集成实际上是 Composer View Controller 。这是通过使用 SLComposeViewController 获得的具有服务类型的类 SLServiceTypeFacebook .

该类(class)仅提供一种单向交流方式,正如您所注意到的,您是通过点击“发布”按钮来确认任何墙上帖子的人。这个 View Controller 归 iOS 系统所有,而不是你的应用。通过与这个 compose View Controller 交互,你实际上是在绕过你的应用程序。

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

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

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

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

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

要使用它,请查看 documentation for SLRequest .

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

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

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

Facebook 也是如此。

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

抱歉让你失望了,我也一直在寻找一种方法来集成 ACAccountSLComposeViewController但也找不到路。这是一种耻辱......因为 native 用户界面很甜蜜。

关于objective-c - 与 iOS 6.0 原生 Facebook 集成共享 : "Posted via my app name"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547616/

相关文章:

ios - 如何使用数组作为标题和 AFNetworking 进行 POST

objective-c - 检查是否播放音乐

ios - 如何持久存储 twitter iOS5 帐户以用于多个 View Controller

ios - Youtube API v3,视频播放时参数无效问题

ios - 带有GCD的图像加载接收内存警告

objective-c - 如何通过 StoryBoard 在 DatePicker 中添加一个 "Done"按钮?

ios - iphone 应用程序可以以编程方式自行关闭吗

ios - 有没有关于 cocoa touch 自动化 UI 测试的好教程?

c++ - #include <lib.h> 找不到符号,为什么?

ios - MacCatalyst 的条件 Pod 链接