Facebook登录总是在取消时返回.(iOS Swift)

Ear*_*son 18 facebook ios facebook-ios-sdk swift

我目前正在尝试使用4.0版本的SDK实现Facebook登录,这也发生在3. +版本.当我调用logInWithReadPermissions(4.0版本)或openActiveSessionWithReadPermissions(3. +版本)时.在用户可以进行选择(取消确定)之前,使用isCancelled(4.0版本)和ClosedFailedLogin(3. +版本)立即调用闭包/块.我认为这可能是我的plist设置中的URL Scheme的一个问题,但我一遍又一遍地检查它,一切似乎都是正确的.只是想知道是否有人可能有任何解决这个问题的想法.我的Bundle ID是正确的,在Facebook开发控制台中启用了单点登录,启用了本机应用程序.请参阅下面的示例代码和配置(4.0版本).

登录电话: 登录电话

AppDelegate中: AppDelegate中

plist中: PLIST

Phi*_*tto 14

使用Facebook SDK版本4,我只需将其添加到iOS 10和Swift 3上的应用程序委托中,以使身份验证工作.在此之前,我也只取消了登录.

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
Run Code Online (Sandbox Code Playgroud)


小智 7

我有一些问题,但我找到了一个解决方法.您可以设置登录管理器的登录行为以使用手机上的Facebook详细信息.默认行为是FBSDKLoginBehaviorSystemNative,它首先尝试使用Facebook应用程序,如果不存在,则使用Web模式.

而不是这样做并传递似乎不起作用的网址,您可以将登录行为设置为FBSDKLoginBehaviorSystemAccount.

长话短说,试试:

let fbLoginManager = FBSDKLoginManager();
fbLoginManager.loginBehavior = FBSDKLoginBehaviorSystemAccount;
// call login method of choice here
Run Code Online (Sandbox Code Playgroud)

  • 我仍然总是被这个解决方法取消. (22认同)

Mai*_*ani 6

我有相同的问题登录方法总是返回canacelled然后我在info.plist中添加下面的东西

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>akamaihd.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>facebook.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>fbcdn.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>
Run Code Online (Sandbox Code Playgroud)

并在AppDelegate中更新didFinishLaunching方法并添加如下所示的新方法

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)

}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
    return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}   
Run Code Online (Sandbox Code Playgroud)

登录方法如下:

@objc func loginButtonClicked() {
    let  loginManager = LoginManager()
    loginManager.loginBehavior = .systemAccount
    loginManager.logIn([ .publicProfile,.userFriends,.email ], viewController: self) { loginResult in
        switch loginResult {
        case .failed(let error):
            print(error)
        case .cancelled:
            print("User cancelled login.")
        case .success(let grantedPermissions, let declinedPermissions, let accessToken):
            print("Logged in!")
            //Do further code...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于我在Swift 3.0SDK 4.17.0,我希望它适合你谢谢.


小智 5

你有没有为AppDelegate添加功能?

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)