Parse platform 请再次登录此应用程序以重新连接Facebook-错误代码190

Parse platform 请再次登录此应用程序以重新连接Facebook-错误代码190,parse-platform,Parse Platform,我们正在使用: 解析-1.8.3 FBSDK.*-4.6.0 ParseUI-1.1.6 ParseFacebookUtilsV4-1.8.3 IOS目标-9.0 这是我们的问题。用户已登录到应用程序。他们进入Facebook.com->Account->Settings并取消应用程序的授权(将其完全删除) 当用户再次启动我们的应用程序时,FBSDK会显示一个对话框,上面写着“请再次登录此应用程序以重新连接Facebook”(选项为“确定”和“取消”) 我在谷歌上搜索过这个问题,也看到过其他关于

我们正在使用:

解析-1.8.3 FBSDK.*-4.6.0 ParseUI-1.1.6 ParseFacebookUtilsV4-1.8.3 IOS目标-9.0

这是我们的问题。用户已登录到应用程序。他们进入Facebook.com->Account->Settings并取消应用程序的授权(将其完全删除)

当用户再次启动我们的应用程序时,FBSDK会显示一个对话框,上面写着“请再次登录此应用程序以重新连接Facebook”(选项为“确定”和“取消”)

我在谷歌上搜索过这个问题,也看到过其他关于这个问题的人,但在他们的例子中,这个问题略有不同(也许是功能性的)。这是因为,当您在该对话框中单击“确定”时,它不会执行任何操作。看起来,点击ok应该会进行一个登录流(这将是一个很好的结果),但同样——它什么都不做

我已点击FBSDK广播的通知,可以看到我收到以下通知:

com.facebook.sdk.FBSDKAccessTokenData.FBSDKAccessTokenDidChangeNotification

由于错误代码190和子单元代码458

我的问题分为两部分: 1) 如何在FBSDK对话框中自动显示“ok”按钮,以便实际使用ok按钮执行操作? 2) 我如何手动(假设上面的按钮由于某种原因不起作用)测试accessToken状态并重新授权用户

这似乎必须有一个简单的解决方案,我已经花了几天时间在它上面,不能提前


谢谢你的帮助和指导

我遇到了一个类似的问题(但与解析无关)。以下是我对你提出的两个问题的回答:

  • FBSDK对话框的“确定”按钮似乎不起作用,原因如下:

    Attempt to present <FBSDKContainerViewController: 0x126b222a0> on
    <FBSDKContainerViewController: 0x126a26d10> whose view is not in the window hierarchy!
    

  • 我现在明白了,单击ok而不工作的问题是因为没有访问令牌,因此没有权限。因此,在FBSDK中,当调用(_fbsdkloginRecoveryTesterAttemptRecoveryFromerror:)时,登录部分永远不会执行。这好像是个虫子?有没有办法覆盖此行为并提供我自己的登录恢复尝试程序?好的,我将Parse和FBSDK更新到了最新的cocoa pods,以查看这是否会产生影响,但事实并非如此。这很容易重现。只需从Facebook帐户设置应用程序选项卡中删除应用程序权限,然后启动iOS应用程序。使用最新的SDK,当从错误对话框中单击“确定”时,它将尝试登录,但是登录似乎没有设置有效的令牌,然后应用程序会陷入一种状态,每次应用程序启动或应用程序出现在前台时都会显示错误对话框。如果我没有错的话,这类似于使用oauth2 refreshToken进行身份验证。请多花些时间,让它更清楚,也许我已经面对了,并且能够帮助你。这里有几个问题,但是让我们来讨论根本问题(可能是最重要的问题)。当出现Facebook错误代码190和sub_代码458时,我如何成功测试accessToken以确定其处于此状态,然后如何重新授权用户?到目前为止,我尝试了各种FB/Oauth重新验证流,但没有成功。设备重启或干净的应用程序安装是目前唯一的修复方法。我们在过去一周的使用中也有一小部分出现了这个问题。正在重新启动设备,重新安装应用程序不起作用。这种情况发生在通过Facebook注册的用户和通过标准parse iOS sdk注册用户呼叫手动创建用户帐户的用户身上,然后手动创建的用户随后通过Facebook共享。我们只是更新了Facebook和parse SDK,并使用webview改为FB推荐登录,而不是我们过去两年一直使用的本机FB。这非常好。我认为禁用错误恢复是关键。最后,我们检查了会话令牌,并做了一些事情来确保那里的状态,这是有效的。但这与我们为解决这一问题所做的工作有着更直接、更强烈的重叠。
    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
        initWithGraphPath:@"me" parameters:@{@"fields": @"id, first_name, last_name"}];
    
    // The next line is important. 
    // It prevents FB SDK from handling the error automatically 
    // and allows you to handle the error yourself. 
    // In this way you avoid(!) the FBSDK dialog that says 
    // "Please login to this app again to reconnect with Facebook".
    [request setGraphErrorRecoveryDisabled:YES];
    
    [request startWithCompletionHandler:
        ^(FBSDKGraphRequestConnection *connection, id result, NSError *error){ 
    
        if (error) {
          // An error occurred. Most likely the accessToken is not valid.
          // Start the FB log-in process to obtain a valid token.
        }else{
          // Everything's all right. Go on.
        }
    }];