我一直使用函数FBSDKAccessToken.currentAccessToken()来检索FB token ,该 token 工作正常,直到我在swift 3和4.17 SDK中迁移了我的应用程序。
现在,该函数已重命名为FBSDKAccessToken.current(),并且在重新加载应用程序委托(delegate)时为nil。
我已经进行了一些测试,并且在重新启动应用程序并且之前已经登录FB后设法获得了 token ,但这不是我所期望的行为。
编辑:我恢复到4.15,它又重新工作。
这是我的AppDelegate中的代码:
func applicationDidBecomeActive(_ application: UIApplication)
{
FBSDKAppEvents.activateApp();
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> (Bool)
{
let wasHandled: Bool = FBSDKApplicationDelegate.sharedInstance().application(application
,open:url
,sourceApplication:sourceApplication
,annotation:annotation)
if (wasHandled) {
if let fbtoken = FBSDKAccessToken.current() {
loginWithFacebook(fbtoken.tokenString);
}else{
print("no current token")
}
}
return wasHandled
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let wasHandled: Bool = FBSDKApplicationDelegate.sharedInstance().application(
app,
open: url as URL!,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation]
)
if (wasHandled) {
if let fbtoken = FBSDKAccessToken.current() {
loginWithFacebook(fbtoken.tokenString);
}else{
print("no current token")
}
}
return wasHandled;
}
谢谢你的帮助 :)
丹尼斯
最佳答案
由于某种原因,这不再起作用。
如果使用的是FBSDKLoginButton
,则必须使用FBSDKLoginButtonDelegate
等待回调。
class LoginView: UIViewController, FBSDKLoginButtonDelegate {
@IBOutlet weak var facebookButton: FBSDKLoginButton!
override func viewDidLoad() {
facebookButton.delegate = self
}
//Called at the end of the user connection
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if ((error) != nil) {
//Process error
} else if result.isCancelled {
// Handle cancellations
print("result is canceled")
} else {
if let fbToken = result.token.tokenString {
print(fbToken)
}
}
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
print("logout from FB")
}
}
或者,您也可以使用FBSDKLoginManager。在此处查看文档:
希望对您有所帮助!