Ios “脸谱网”;apprequest“;对话框要求facebook登录,因为应用程序已经登录到facebook
下面是facebook身份验证的示例 对于登录,我使用了:Ios “脸谱网”;apprequest“;对话框要求facebook登录,因为应用程序已经登录到facebook,ios,facebook,session,single-sign-on,facebook-ios-sdk,Ios,Facebook,Session,Single Sign On,Facebook Ios Sdk,下面是facebook身份验证的示例 对于登录,我使用了: [FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
[FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if (session.isOpen)
{
appDelegate.session=session;
}
}//end completionHandler
];
对于facebook apprequest对话框:
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也处于活动状态,但当我调用apprequest对话框时,它会要求登录
appDelegate.facebook=[[facebook alloc]有问题吗?或者我的会话已过期
有什么建议吗?请尝试将您的Facebook对象会话设置代码放入完成处理程序中。当会话更改时,应调用完成处理程序,例如,稍后扩展令牌时,应再次调用完成处理程序。这样,您可以保持Facebook对象会话刷新。您不必xtend访问令牌,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
];
我还在“applicationIDbecomeactive”appDelegate方法中添加了一行[self.facebook extendedAccessTokenIfNeeded];您将if(nil==appDelegate.facebook)放在哪里了…代码?它是否在会话打开完成处理程序中?嗨,Abernathy!感谢您的响应。我在FBSession以权限打开后放置了这一行,但不完全在完成处理程序中,并且在AppDelegate didFinishLauching中放置了一段代码。也就是说,如果FBSession.activeSession.isOpen==是,则与上面相同的代码块k you C Abernathy!实际上我没有正确管理会话,你能告诉我我应该在AppDelegate.m中关闭会话吗?应用程序何时终止?我想让用户在启动应用程序时保持登录,除非他手动注销。我对FBSessionStateCreatedTokenLoaded和FBSessionStateOpen有点困惑。你呼叫[FBSession.activeSession close];在applicationWillTerminate:method中。这只是关闭会话,但不清除缓存。如您所愿,您可以在用户显式注销时关闭会话并清除缓存。FBSessionStateCreatedTokenLoaded表示找到缓存令牌,在此阶段会话未打开。如果此会话已调用open,则它将转到i无需显示登录UI即可打开FBSessionState。