Ios spritekit中的Facebook登录始终返回已取消

Ios spritekit中的Facebook登录始终返回已取消,ios,swift,xcode,facebook,sprite-kit,Ios,Swift,Xcode,Facebook,Sprite Kit,我目前正在使用下面的代码使用自定义sprite节点按钮登录facebook: func runLoginForFacebook() { print("logging in with facebook...") print("FACEBOOK CURRENT TOKEN ---->\(FBSDKAccessToken.current())") let login = FBSDKLoginManager() let viewController =

我目前正在使用下面的代码使用自定义sprite节点按钮登录facebook:

func runLoginForFacebook() {

     print("logging in with facebook...")
     print("FACEBOOK CURRENT TOKEN ---->\(FBSDKAccessToken.current())")

     let login = FBSDKLoginManager()
     let viewController = UIApplication.shared.keyWindow?.rootViewController
     login.logIn(withReadPermissions: ["public_profile"], from: viewController, handler: { result, error in

    if error != nil {
        print("Process error \(error!.localizedDescription)")
    } else if result?.isCancelled != nil {
        print("Cancelled \(error?.localizedDescription)")
    } else {
        print("Logged in")
        signIntoFirebase()
    }
  })
}
现在,这允许我登录并点击继续按钮,因此屏幕被关闭,但它总是返回isCanceled作为是,而不是登录

我在这个网站上搜索了所有的答案,他们都说应用程序代理是问题所在,这是我的应用程序代理,看起来很好:

class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:

   return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

    let handled: Bool = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplication.OpenURLOptionsKey.annotation])
    // Add any custom logic here.

    return handled
}
下一个解决方案是,我在facebook上的开发者门户中没有任何测试用户,我检查了该门户,但情况并非如此,我拥有的帐户与我作为该应用的测试用户/管理员登录时使用的帐户不同

我还检查了我的info.plist文件,一切似乎都很好,见下文。出于隐私原因,我在名称和编号中添加了XXXXs。该编号检查结果良好,与开发人员门户ID相同

    <string>UIInterfaceOrientationPortraitUpsideDown</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb4961923108XXXXX</string>
        </array>
    </dict>
</array>
<key>FacebookAppID</key>
<string>496192XXXXXXXX</string>
<key>FacebookDisplayName</key>
<string>NaXXX</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-share-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>

有人能帮我吗?如果您有任何想法,我将不胜感激,因为我已经做了一天了,但我无法理解。

您正在检查结果?是否为空。isCancelled不是零,因此如果您有结果,它将始终为真或假,而不是零。请尝试以下代码,注意这是未经测试的,因此,如果语法有误,请随意使用正确的代码编辑我的答案

func runLoginForFacebook() {

     print("logging in with facebook...")
     print("FACEBOOK CURRENT TOKEN ---->\(FBSDKAccessToken.current())")

     let login = FBSDKLoginManager()
     let viewController = UIApplication.shared.keyWindow?.rootViewController
     login.logIn(withReadPermissions: ["public_profile"], from: viewController, handler: { result, error in

          guard let result = result else {
              print("No result found")
          }
          if result.isCancelled {
              print("Cancelled \(error?.localizedDescription)")

          } else if let error = error {
              print("Process error \(error.localizedDescription)")
          } else {
              print("Logged in")
              signIntoFirebase()
          }
     })
}

您可以分享任何示例项目吗?@Dharmesh抱歉,我不能。您可以尝试在空白的SpriteKit项目中使用我的登录代码和应用程序代理代码。登录函数目前不在任何类中,它只是我的SpriteKit项目中的一个全局函数。您只检查结果?.isCancelled!=nil,你需要检查isCancelled是否为false是的,它工作得很好!!!我在facebook开发者文档网站上找到了我的代码,真不敢相信他们给了我错误的代码,再次感谢。