为旧版 Xcode 集成 Facebook SDK 以支持 iOS 5 和 iOS 6

Posted

技术标签:

【中文标题】为旧版 Xcode 集成 Facebook SDK 以支持 iOS 5 和 iOS 6【英文标题】:Integrating Facebook SDK for older versions of Xcode to Support both iOS 5 and iOS 6 【发布时间】:2013-03-17 23:28:16 【问题描述】:

我仍在使用 XCode 4.3.2 和 ios 5.1 基础 SDK。我想要实现的是为 iOS 5.0+ 设备集成 Facebook API。只是基本功能,例如代表发帖和获取基本用户信息。

我假设哪个 Facebook SDK 可以在 iOS 5 上运行,也可以在 iOS 6 上运行,但我不确定。

作为 Facebook 集成的新手,任何人都可以对这个问题有所了解。 (由于我正在做这个项目,升级 XCode 和 iOS SDK 不是一个选项)

我应该研究哪个 iOS SDK? 我可以同时支持 iOS 5 和 6、用基础SDK 5.1和XCode 4.3? 是否有支持两个 iOS 版本的 API? Facebook 集成有什么要求吗?

【问题讨论】:

【参考方案1】:

首先您阅读了 Facebook 开发人员发布的这篇文章

http://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/

在第 1 步中,它也适用于 xcode 4.3

你仔细阅读所有步骤n实施

在第 6 步中,您在 Facebook Btn Pressed 的位置编写如下代码

 - (IBAction)facebookBtnPressed:(id)sender



        // if it is available to us, we will post using the native dialog
        BOOL displayedNativeDialog = [FBNativeDialogs presentShareDialogModallyFrom:self
                                                                        initialText:[NSString stringWithFormat:@"Here U write code which u want to post on facebook"]
                                                                              image:[UIImage imageNamed:@"1.jpg"]
                                                                                url:[NSURL URLWithString:@""]
                                                                            handler:nil];

        if (!displayedNativeDialog)
        
            NSString *shareStr = [NSString stringWithFormat:@"Here U write code which u want to post on facebook"];
            NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                                           shareStr,@"description",
                                           @"sharelink", @"link",
                                           @"ImageName", @"picture",
                                           nil];

            [self performPublishAction:^

                [FBRequestConnection startWithGraphpath:@"me/feed" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) 

                    if (error)
                    
                        NSLog(@"error in post");
                    
                    else
                    
                        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Post Successfully" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
                        [alert show];
                    

                ];
            ];
        
    //

    //===set delagate in Viewcontroller.h of mySLComposerSheet
    [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) 
        NSString *output;
        switch (result) 
            case SLComposeViewControllerResultCancelled:
                output = @"Action Cancelled";
                break;
            case SLComposeViewControllerResultDone:
                output = @"Post Successfully";
                break;
            default:
                break;
         //check if everything worked properly. Give out a message on the state.
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
    ];


- (void) performPublishAction:(void (^)(void)) action 
    if ([[FBSession activeSession]isOpen]) 
        /*
         * if the current session has no publish permission we need to reauthorize
         */
        if ([[[FBSession activeSession]permissions]indexOfObject:@"publish_actions"] == NSNotFound) 
            [[FBSession activeSession] reauthorizeWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                                         defaultAudience:FBSessionDefaultAudienceOnlyMe
                                                       completionHandler:^(FBSession *session, NSError *error) 
                                                           action();
                                                       ];
        else
            action();
        
    else
        /*
         * open a new session with publish permission
         */
        [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                           defaultAudience:FBSessionDefaultAudienceOnlyMe
                                              allowLoginUI:YES
                                         completionHandler:^(FBSession *session, FBSessionState status, NSError *error) 
                                             if (!error && status == FBSessionStateOpen) 
                                                 action();
                                             else
                                                 NSLog(@"error");
                                             
                                         ];
    

【讨论】:

如果您将此代码运行到 'xcode' 4.3 中,则无需添加 Social 和 AdSupport 框架。如果使用 iOS 6,则将这两个框架添加为适用于 iOS 5 的 Optional

以上是关于为旧版 Xcode 集成 Facebook SDK 以支持 iOS 5 和 iOS 6的主要内容,如果未能解决你的问题,请参考以下文章

将 Facebook SDK 与 Xcode Swift 项目集成 - AppDelegate 错误?

Xcode 4.2 和 Facebook SDK 3.0 教程

Facebook iOS SDK - 如何为 Xcode 4.3 构建静态库?

Facebook sdk 3.0 与 iOS 5 和 Xcode 4.2

链接器命令失败,退出代码 1、XCode 4.5、Facebook SDK 3.1

如何在 XCode 4.2.1 (SDK5.0) 中安装旧版 iOS 模拟器