SWIFT - 使用FB App

时间:2018-03-08 07:16:16

标签: ios swift facebook ios11 fbsdkloginkit

我正在使用FBSDKLoginManager接收令牌供以后使用(FB发布),并在确认访问后以无限循环结束。

当调用FBSDKLoginManager()时,会出现以下弹出窗口(抱歉,它是德语版的......这是官方的Facebook弹出窗口,用户可以选择是否要手动登录或使用FB应用程序)

Facebook Popup Screen

现在出现以下错误:

  • 如果我正在使用第二个按钮(通过电话号码或电子邮件地址登录),一切正常。该函数返回一个令牌,我可以在我的应用程序中继续。

  • 错误:如果我使用第一个按钮(使用Facebook-App登录),Facebook应用程序打开,我可以在FB中设置所有隐私设置,并确认。确认访问后,FB-App自动关闭并返回相同的弹出屏幕而不做任何更改。返回此屏幕后没有任何操作...

我没有任何模糊的想法问题是什么......没有错误信息。由于使用电子邮件登录时一切正常,因此问题必须在FB-App的返回中。电子邮件登录通过Safari工作,在错误的情况下,FB-App有中断。

let login: FBSDKLoginManager = FBSDKLoginManager()
login.logIn(withPublishPermissions: ["publish_actions"], from: self) { (result, error) in
if (error != nil) {
    print("publish_actions: \(error!)")
} else if (result?.isCancelled)! {
    print("publish_actions: Canceled")
} else if (result?.grantedPermissions.contains("publish_actions"))! {
    //print("publish_actions: permissions granted: \(String(describing: result?.token.tokenString))")

    UserDefaults.standard.set(result?.token.tokenString, forKey: "facebook_token")
}

添加了框架:Bolts / CoreKit / LoginKit

开发环境:安装了iOS 11.2 /最新Facebook App的Xcode 9.2 / iPhone 6s。

4 个答案:

答案 0 :(得分:1)

我通过向FB SDK添加以下缺少的调用来解决:

[[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];

AppDelegate的

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation方法。

答案 1 :(得分:0)

检查以下内容 在您的信息plist文件

<key>FacebookAppID</key>
<string>fb_id_here</string> // in format 234234234
<key>FacebookDisplayName</key>
<string>display_name_here</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>

</array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fbfb_id_here </string>. // in format fb234234234
        </array>
    </dict>
</array>

现在你的appdelegate

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
 SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}

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

    if let scheme = url.scheme {

        if scheme == "fb 234234234" { //the one you kept in your info plist file
            //TODO: replace with real value
            return SDKApplicationDelegate.shared.application(application, open: url, options: options)
        }

    }

    return true

}

如果控制权随附在appdelegate功能

中,请配置这些,然后复制您的应用
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool

如果它没有你没有在info plist文件中正确配置facebook模式

let fbManager = FBSDKLoginManager()
fbManager.logOut()

    let readPermissions: [ReadPermission] = [.publicProfile, .email]
    let sdkPermissions = readPermissions.map({ $0.permissionValue.name })

    fbManager.logIn(withReadPermissions: sdkPermissions, from: nil) { (result, error) in
        if let token = result?.token {
            // your token here
        }
        else {
        }
    }

答案 2 :(得分:0)

非常感谢你。这解决了这个问题。

1。)plist文件已经设置好了。我认为否则使用Safari登录将无法正常工作。

2。)App代表就是原因!!!小调整:

SDKApplicationDelegate.shared无效。我应该如下:

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

(以及添加的“应用程序打开URL”功能。)

但现在它有效。非常感谢。

答案 3 :(得分:-1)

我认为也许我在xcode中发现了一个问题,即AppDelegate的 func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool,xcode将此功能修复为private,我将其修复为internal,它将起作用〜