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

Bri*_*pek 7 parse-platform

我们正在使用:

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

这是我们的问题.用户登录应用程序正常.他们进入Facebook.com->帐户 - >设置并取消对该应用的授权(完全删除它).

当用户再次启动我们的应用程序时,他们会收到来自FBSDK的对话框,其中显示"请再次登录此应用程序以重新连接Facebook"(选项正常并取消).

我用google搜索了这个问题并看到了其他问题,但在他们的情况下它略有不同(也许是功能性的).这是因为,当您在该对话框中单击"确定"时,它什么都不做.似乎点击确定应该做一个登录流程(这将是恒星),但再次 - 它什么也没做.

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

com.facebook.sdk.FBSDKAccessTokenData.FBSDKAccessTokenDidChangeNotification

作为错误代码190和子代码458的结果.

我的问题是两个部分:1)如何在FBSDK对话框中获得我的"确定"按钮,该按钮会自动显示实际用ok按钮执行某些操作?2)如何手动(假设上面的按钮由于某种原因不起作用)测试accessToken状态并重新授权用户?

这似乎必须有一个简单的解决方案,我已经花了几天时间,并且无法领先于此.

感谢您的帮助或指导!

Ale*_*huk 6

我遇到了类似的问题(虽然它与 Parse 无关)。以下是我对您提出的两个问题的回答:

  1. 由于这个原因,FBSDK 对话框的 OK 按钮似乎不起作用:

    Attempt to present <FBSDKContainerViewController: 0x126b222a0> on
    <FBSDKContainerViewController: 0x126a26d10> whose view is not in the window hierarchy!
    
    Run Code Online (Sandbox Code Playgroud)

    至少当我尝试在我的应用程序中(在连接到 Macbook 的设备上)登录 Facebook 并且我的尝试失败时,我在 Xcode 控制台中看到了上述警告。我没有找到解决这个特定问题的方法。但我找到了一种避免 FBSDK 对话框的方法。请参阅下一项。

  2. 我通过请求有关 FB 用户的信息来测试 accessToken 的有效性。如果请求失败并出现错误,则可能意味着 accessToken 无效。这是一个代码示例:

    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.
        }
    }];
    
    Run Code Online (Sandbox Code Playgroud)