我正在关注Facebook身份验证的示例
https://developers.facebook.com/docs/tutorials/ios-sdk-games/authenticate/
用于登录我已经使用:
[FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if (session.isOpen)
{
appDelegate.session=session;
}
}//end completionHandler
];
对于Facebook申请对话框:
if (nil == appDelegate.facebook)
{
appDelegate.facebook = [[Facebook alloc]
initWithAppId:FBSession.activeSession.appID
andDelegate:nil];
// Store the Facebook session information
appDelegate.facebook.accessToken = FBSession.activeSession.accessToken;
appDelegate.facebook.expirationDate = FBSession.activeSession.expirationDate;
}
[self.facebook dialog:APPREQUEST
andParams:params
andDelegate:self];
一段时间后,当我尝试再次运行应用程序时,该应用程序已连接到Facebook,并且FBSession也处于 Activity 状态,但是当我调用apprequest对话框时,它要求登录。
appDelegate.facebook = [[Facebook alloc]有问题吗,或者我的 session 已过期?
有什么建议吗?
最佳答案
尝试将您的Facebook对象 session 设置代码放入完成处理程序中。每当 session 更改时,都应调用完成处理程序,例如,稍后在扩展 token 时,应再次调用它。这样,您可以保持Facebook对象 session 的刷新。您不必自己扩展访问 token ,SDK现在会自动为您完成。
[FBSession openActiveSessionWithPermissions:permissions
allowLoginUI:YES
completionHandler:
^(FBSession *session, FBSessionState status, NSError *error) {
if (session.isOpen)
{
appDelegate.session=session;
if (nil == appDelegate.facebook)
{
appDelegate.facebook = [[Facebook alloc]
initWithAppId:FBSession.activeSession.appID
andDelegate:nil];
}
// Store the Facebook session information
appDelegate.facebook.accessToken = FBSession.activeSession.accessToken;
appDelegate.facebook.expirationDate = FBSession.activeSession.expirationDate;
} // if session open
else
{
appDelegate.facebook = nil;
} // session not open
} //end completionHandler
];