Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios “脸谱网”;apprequest“;对话框要求facebook登录,因为应用程序已经登录到facebook_Ios_Facebook_Session_Single Sign On_Facebook Ios Sdk - Fatal编程技术网

Ios “脸谱网”;apprequest“;对话框要求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) {

下面是facebook身份验证的示例

对于登录,我使用了:

 [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。