我最近刚刚为我的应用程序进行了升级。我这样做的原因是 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/