3

我有一个应用程序,目前支持使用旧的 Facebook SDK for iOS 通过提要对话框发布到 Facebook。

更新到适用于 iOS 的 Facebook SDK 3.1 后,我似乎可以:

  1. 使用旧式 API ( Facebook.h, 实例化 a Facebook, 调用dialog:...)
  2. 使用新风格的 API ( FacebookSDK.h, 使用 shared FBSession, native 对话框)

不同的头文件发生冲突,看起来完全不兼容。

我可以两者都做吗?如果是这样,那怎么办?

4

5 回答 5

8

只需包含 Facebook.h。首先,将 DeprecatedHeaders 文件夹复制到您的 Frameworks 项目中。DeprecatedHeaders 位于 ~/Documents/FacebookSDK/FacebookSDK.frameworks/Versions/A/ 下。当您复制它时,不要将这些项目复制到您的项目中,因此它们会保持复制作为参考。

接下来,在您拥有的代码中:

#import <FacebookSDK/FacebookSDK.h>

替换为:

#import "Facebook.h"

您可能会收到错误,在这种情况下关闭并重新打开项目。

接下来,您要声明一个 Facebook 对象并设置会话或在会话打开或关闭时清除它。

以示例为例:https ://github.com/fbsamples/ios-3.1-howtos/tree/master/ShareNativeDialogsHowTo记录在这里,https://developers.facebook.com/docs/howtos/share-本机对话框-ios-sdk/

您可以对该示例进行以下更改以回退到提要对话框,而不是回退到具有共享 UI 的视图控制器。在 ViewController.m 中,您将在包含 Facebook 标头后进行这些更改:

....
@property (unsafe_unretained, nonatomic) IBOutlet UIButton *publishButton;
@property (nonatomic, retain) Facebook *facebook;

....
@synthesize authButton;
@synthesize facebook = _facebook;

....
- (void)sessionStateChanged:(NSNotification*)notification {
    if (FBSession.activeSession.isOpen) {
        self.publishButton.hidden = NO;
        [self.authButton setTitle:@"Logout" forState:UIControlStateNormal];
        if (nil == self.facebook) {
            self.facebook = [[Facebook alloc]
                             initWithAppId:FBSession.activeSession.appID
                             andDelegate:nil];
            // Store the Facebook session information
            self.facebook.accessToken = FBSession.activeSession.accessToken;
            self.facebook.expirationDate = FBSession.activeSession.expirationDate;
        }
    } else {
        self.publishButton.hidden = YES;
        [self.authButton setTitle:@"Login" forState:UIControlStateNormal];
        self.facebook = nil;
    }
}

- (void) publishUsingFeedDialog {
    // Put together the dialog parameters
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"Facebook SDK for iOS", @"name",
                                   @"Build great social apps and get more installs.", @"caption",
                                   @"The Facebook SDK for iOS makes it easier and faster to develop Facebook integrated iOS apps.", @"description",
                                   @"https://developers.facebook.com/ios", @"link",
                                   @"https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png", @"picture",
                                   nil];

    // Invoke the dialog
    [self.facebook dialog:@"feed" andParams:params andDelegate:nil];
}


- (IBAction)publishButtonAction:(id)sender {
    BOOL displayedNativeDialog =
    [FBNativeDialogs
     presentShareDialogModallyFrom:self
     initialText:@""
    ....

    if (!displayedNativeDialog) {
        /*ShareViewController *viewController =
        [[ShareViewController alloc] initWithNibName:@"ShareViewController"
                                              bundle:nil];
        [self presentViewController:viewController
                           animated:YES
                         completion:nil];*/
        [self publishUsingFeedDialog];
    }
}
于 2012-10-23T23:50:02.707 回答
1

如果您同时使用两者,我认为您会收到“重复错误”。我知道这很糟糕。

几天来,我一直在处理重复的错误。如果你到了,请告诉我。

于 2012-10-04T21:12:16.817 回答
0

这是不可能的,您应该使用 Graph API https://developers.facebook.com/docs/howtos/publish-to-feed-ios-sdk/而不是 Feed Dialog :(

于 2012-11-16T09:36:31.140 回答
0

尝试导入

"FBSession.h" 

代替

#import<FacebookSDK/FacebookSDK.h>

它将解决重复的错误..

于 2013-03-22T09:25:30.490 回答
0

您可能必须抽象出一个通用接口并在单独的源文件中实现两次(因此编译器永远不会在同一个文件中看到 Facebook.h 和 FacebookSDK.h)。

于 2012-10-04T21:14:53.930 回答