使用Facebook SDK 3.1支持iOS 5和iOS 6

3
我有一个应用程序,目前使用旧版的Facebook SDK for iOS通过feed对话框支持发布到Facebook。
在更新为Facebook SDK 3.1 for iOS后,似乎我可以选择:
1. 使用旧风格API(Facebook.h,实例化Facebook,调用dialog:...) 2. 或者使用新风格API(FacebookSDK.h,使用共享的FBSession,本地对话框)
不同的头文件冲突并且看起来完全不兼容。
我能同时做到两个吗?如果可以,那么如何实现?
5个回答

8

只需包含Facebook.h即可。首先,将DeprecatedHeaders文件夹复制到您的框架项目中。 DeprecatedHeaders在~/Documents/FacebookSDK/FacebookSDK.frameworks/Versions/A/下找到。当您将其复制过去时,请勿将项目中的项目复制进去,以便它们保持作为引用复制。

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

#import <FacebookSDK/FacebookSDK.h>

使用这个替换:

#import "Facebook.h"

如果出现错误,请关闭并重新打开项目。

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

以示例为例:https://github.com/fbsamples/ios-3.1-howtos/tree/master/ShareNativeDialogsHowTo,该示例在此处记录:https://developers.facebook.com/docs/howtos/share-native-dialogs-ios-sdk/

您可以对该示例进行以下更改,以回退到Feed Dialog而不是回退到具有共享UI的视图控制器。在ViewController.m中,包含Facebook header后,您将进行以下更改:

....
@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];
    }
}

它显示了多个对象的重复实现错误。 - Bala
2
你应该升级到更新的3.5 SDK,并查看此教程以了解如何使用Feed对话框 - https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/ - C Abernathy

1

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

我已经花了几天时间来解决这个“重复错误”。请告诉我你是否解决了它。


0
你可能需要将一个通用接口抽象出来,并在两个不同的源文件中实现它(这样编译器就永远不会在同一个文件中看到Facebook.h和FacebookSDK.h)。

1
冲突出现在重复的Objective-C接口定义层面。这些冲突不能通过单独导入文件来解决。ObjC运行时不允许这样做。 - John Cromartie

0

0
尝试导入。
"FBSession.h" 

而不是

#import<FacebookSDK/FacebookSDK.h>

它将解决重复错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接