【问题标题】:Supporting both iOS 5 and iOS 6 with the Facebook SDK 3.1使用 Facebook SDK 3.1 同时支持 iOS 5 和 iOS 6
【发布时间】:2012-09-26 00:03:34
【问题描述】:

我的应用目前支持使用旧的 iOS 版 Facebook SDK 通过提要对话框发布到 Facebook。

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

  1. 使用旧式 API(Facebook.h,实例化 Facebook,调用 dialog:...
  2. 使用新样式 API(FacebookSDK.h,使用共享 FBSession,原生对话框)

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

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

【问题讨论】:

    标签: ios facebook ios5 ios6


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 冲突发生在重复的 Objective-C 接口定义级别。这些不能通过单独导入文件来解决。 ObjC 运行时不允许这样做。
      【解决方案3】:

      只需包含 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.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];
          }
      }
      

      【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        尝试导入

        "FBSession.h" 
        

        而不是

        #import<FacebookSDK/FacebookSDK.h>
        

        它将解决重复错误..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-08
          • 2012-09-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多