Facebook Вход в спрайтекит всегда возвращается отменен - PullRequest
0 голосов
/ 27 марта 2019

В настоящее время я использую приведенный ниже код для входа в 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 как yes вместо входа в систему.

Я искал ответы на всем этом веб-сайте, и все они говорят, что проблема заключается в делегате приложения, вот мой делегат приложения, который выглядит нормально:

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>

Может кто-нибудь мне помочь?любые идеи будут с благодарностью, потому что я был в этом в течение дня, и я не могу понять это.

1 Ответ

1 голос
/ 27 марта 2019

Вы проверяете if result?.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()
          }
     })
}
...