从Facebook iOS SDK 2.x迁移到3.x的问题

时间:2012-10-02 03:13:53

标签: ios facebook sdk

我们希望升级到3.x,以便iOS 6 / iPhone 5上的用户可以获得最精简的FB体验......鉴于此,我面临FB集成重写,还是我可以使用折旧标头并继续使用3.1 SDK与3.1 SDK?

我们依赖的一些关键方法和要求是: [ad.facebook authorize:perms],shouldExtendAccessToken,extendAccessTokenIfNeeded,isSessionValid,dialog:@“feed”andParams:params andDelegate:delegate,“https://graph.facebook.com/me?fields=id,email,, first_name& access_token =“,et.al。 3.1示例项目中的一些搜索使得所有这些项目都被替换 - 我想这不仅仅是名称更改。

我没有找到Upgrading from 3.0 to 3.1的2.x到3.x版本 - 如果我忽略了这一点,请提供建议。

当我最近尝试升级到3.0时,在尝试使用折旧的API时遇到了重大的破坏(重复的SBJson标头,非解析的FB标头),一旦编译完成,handleOpenURL似乎被破坏了,它会重新切换第二次到FB,然后崩溃。而且我遇到的帖子表明可能存在禁用3.x的ARC的问题(我们不能使用它,因为我们有C ++)。

我还没有开始2.x到3.1。也许这样会更顺畅,但是我希望从那些在第二次长时间击球之前离开我的人那里获得一些见解 - 非常感谢。

2 个答案:

答案 0 :(得分:9)

我刚刚为我的应用做了这次升级。我这样做的原因是iOS 6的流畅性和未来对facebook的支持,因为他们最终会弃用旧的sdk。最大的变化是登录流程和打开图形调用。该对话框要求在您的墙上发布,仍然可以退回已弃用的标题。对于您感兴趣的方法,它们将被替换如下:

[ad.facebook authorize:perms]

FBSession *session = [[FBSession alloc] initWithAppID:appId
                                permissions:permissionsArray
                            urlSchemeSuffix:urlSuffix
                         tokenCacheStrategy:nil];

[FBSession setActiveSession:session];
if(allowLoginUI == YES)
{
    [session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:handler];
}
else if(session.state == FBSessionStateCreatedTokenLoaded)
{
    [session openWithCompletionHandler:^(FBSession *_session, FBSessionState status, NSError *error) {
        [self _sessionStateChanged:_session state:status error:error];            
    }];
}
[session release];

请参阅有关登录的其他实施说明 https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/
https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/

shouldExtendAccessToken,extendAccessTokenIfNeeded, - 这些现已消失,facebook SDK实现了缓存并在需要时扩展令牌。如果你在我的第一个代码中看到snippit,如果loginUI不应该显示,但是会话状态是在FBSessionStateCreatedTokenLoaded中,你仍然想要打开会话。当您的会话处于FBSessionStateCreatedTokenLoaded状态时,它意味着:

  

两个初始会话状态之一,表示缓存的令牌是   装;当会话处于此状态时,将调用open *   在开放式会话中,没有UX或应用程序切换

结帐SessionLoginSample了解更多信息。

isSessionValid - 现在是

FBSession.activeSession.isOpen

对话框:@“feed”andParams:params andDelegate:delegate - 这仍然是相同的,但是你必须在使用它之前创建这样的facebook实例:

Facebook *facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID andDelegate:nil];
facebook.accessToken = FBSession.activeSession.accessToken;
facebook.expirationDate = FBSession.activeSession.expirationDate;
//... normal code to setup a feed post
[facebook dialog:@"feed" andParams:params andDelegate:self];
[facebook release];

请参阅https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/了解详情

“https://graph.facebook.com/me?fields=id,email,first_name&access_token=”, - 图表调用现在简单得多。你也可以很容易地将它们一起批处理。

//[facebook requestWithGraphPath:@"me" andDelegate:self]; would become
[FBRequestConnection startForMeWithCompletionHandler:^
     (FBRequestConnection *connection, id result, NSError *error)   {}];

//[facebook requestWithGraphPath:@"me/albums" andParams:params andHttpMethod:@"POST" andDelegate:self]; would become
  [FBRequestConnection startWithGraphPath:@"me/albums"
                             parameters:params
                             HTTPMethod:@"POST"
                      completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {}];

请参阅https://developers.facebook.com/docs/howtos/batch-requests-ios-sdk/了解详情

答案 1 :(得分:3)

我即将做同样的事情,我在Facebook的文档中发现了这篇文章“从2.0升级到3.1”:

https://developers.facebook.com/docs/tutorial/iossdk/upgrading-from-2.0-to-3.1/