5

我们希望升级到 3.x,以便我们在 iOS 6 / iPhone 5 上的用户将拥有尽可能简化的 FB 体验......鉴于此,我是否面临 FB 集成重写,或者我是否可以使用折旧的标头并继续将 2.x API 与 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="等。3.1 示例项目中的一些搜索看起来好像所有这些都已被替换——我想这不仅仅是名称的更改。

我还没有找到 从 3.0 升级到 3.1的 2.x 到 3.x 版本——如果我忽略了这一点,请告知。

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

我还没有开始从 2.x 到 3.1。也许这会更顺利,但我很想从那些在我第二次长击球之前走在我之前的人那里获得一些见解——非常感谢。

4

2 回答 2

9

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

[ad.facebook 授权: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 实现缓存并在需要时扩展令牌。如果您在我的第一个代码片段中看到 loginUI 不应该显示,但会话状态处于 FBSessionStateCreatedTokenLoaded 中,您仍然希望打开会话。当您的会话处于状态 FBSessionStateCreatedTokenLoaded 时,这意味着:

两个初始会话状态之一,指示已加载缓存的令牌;当会话处于此状态时,对 open* 的调用将导致会话打开,无需 UX 或应用程序切换

查看 SessionLoginSample 了解更多信息。

isSessionValid - 这是现在

FBSession.activeSession.isOpen

dialog:@"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/

于 2012-10-08T20:26:09.137 回答
3

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

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

于 2013-02-07T16:14:48.083 回答