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

问题描述:

我有一个应用程序,当前支持通过使用旧的Facebook SDK for iOS的对话框发布到Facebook。使用Facebook SDK支持iOS 5和iOS 6 3.1

更新到了Facebook SDK 3.1的iOS之后,似乎我可以:

  1. 使用旧风格的API(​​,实例化一个Facebook,叫dialog:...
  2. 使用新风格API(FacebookSDK.h,使用共享FBSession,本机对话框)

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

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

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

我现在一直在为重复的错误搞砸了。如果你到达那里,请告诉我。

您可能需要抽象出一个通用接口并在单独的源文件中执行两次(因此编译器从未在同一个文件中看到Facebook.h和FacebookSDK.h)。

+1

冲突位于重复的Objective-C接口定义级别。这些不通过单独导入文件解决。 ObjC运行时不会允许它。 –

+0

你能解决重复错误的地方吗? – estemendoza

只需包含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-native-dialogs-ios-sdk/

你可以做以下更改样品退却到饲料而不是对话框回落到一个视图控制器与共享的UI 。在ViewController中。中号,包括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]; 
    } 
} 
+0

它显示了几个对象的重复执行错误。 – Bala

+2

您应该转移到更新的3.5 SDK并查看本教程以了解如何使用提要对话框 - https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/ –

这是不可能的,你应该使用,而不是饲料对话:(图形API https://developers.facebook.com/docs/howtos/publish-to-feed-ios-sdk/

尝试导入

"FBSession.h" 

代替

#import<FacebookSDK/FacebookSDK.h> 

它会解决重复的错误..