我正在使用FBSDKLoginManager
接收令牌供以后使用(FB发布),并在确认访问后以无限循环结束。
当调用FBSDKLoginManager()
时,会出现以下弹出窗口(抱歉,它是德语版的......这是官方的Facebook弹出窗口,用户可以选择是否要手动登录或使用FB应用程序)
现在出现以下错误:
如果我正在使用第二个按钮(通过电话号码或电子邮件地址登录),一切正常。该函数返回一个令牌,我可以在我的应用程序中继续。
错误:如果我使用第一个按钮(使用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。
答案 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
,它将起作用〜