Facebook 登录不起作用,错误:无效的 Oauth 访问令牌。它总是零
Posted
技术标签:
【中文标题】Facebook 登录不起作用,错误:无效的 Oauth 访问令牌。它总是零【英文标题】:Facebook Login is not working, error: Invalid Oauth access Token. it is always nil 【发布时间】:2017-05-04 09:23:57 【问题描述】:Error Domain=com.facebook.sdk.core Code=8 "(null)" UserInfo=NSRecoveryAttempter=<_FBSDKLoginRecoveryAttempter: 0x1740070c0>, com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=190, NSLocalizedRecoverySuggestion=Please log into this app again to reconnect your Facebook account., com.facebook.sdk:FBSDKErrorDeveloperMessageKey=Invalid OAuth access token., com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=2, NSLocalizedRecoveryOptions=(
OK,
Cancel
), com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey=
body =
error =
code = 190;
"fbtrace_id" = AJq7xJsKJNv;
message = "Invalid OAuth access token.";
type = OAuthException;
;
;
code = 400;
)
我面临上述书面错误。我的应用包含两个登录方案:1. Facebook 登录(不工作) 2. Google Plus 登录(工作正常)
在 facebook 登录的情况下:屏幕正在打开,我正在授予该应用程序的权限 然后它显示空白的 Facebook 页面,顶部只有完成按钮。按完成按钮后,我收到上述错误。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
// Google plus Configuration
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
GIDSignIn.sharedInstance().delegate = self
return true
func applicationDidBecomeActive(_ application: UIApplication)
FBSDKAppEvents.activateApp()
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
let googleDidHandle = GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
return googleDidHandle || facebookDidHandle
@available(ios 9.0, *)
func application(_ application: UIApplication,
open url: URL, options: [UIApplicationOpenURLOptionsKey: Any]) -> Bool
return GIDSignIn.sharedInstance().handle(url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
查看控制器代码:
import FBSDKShareKit
import FBSDKCoreKit
import FBSDKLoginKit
@IBOutlet weak var buttonOutletFacebook: FBSDKLoginButton!
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
configureFacebook()
//MARK:- FaceBook Integrated Functions
func application(_ application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
FBSDKGraphRequest.init(graphpath: "me", parameters: ["fields":"first_name, last_name, picture.type(large), email"], tokenString: "fb_token", version: nil, httpMethod: "GET").start (connection, result, error) -> Void in
if error != nil
print(error)
return
else
print(result)
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!)
let loginManager: FBSDKLoginManager = FBSDKLoginManager()
loginManager.logOut()
func loginButtonWillLogin(_ loginButton: FBSDKLoginButton!) -> Bool
return true
func configureFacebook()
buttonOutletFacebook.readPermissions = ["public_profile", "email"];
buttonOutletFacebook.delegate = self
print(buttonOutletFacebook.readPermissions)
【问题讨论】:
【参考方案1】:您需要按如下方式管理 url scheam:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
if(url.scheme!.isEqual("fb1212212121223"))
return FBSDKApplicationDelegate.sharedInstance().application(
application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
else
return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
【讨论】:
还是不行,FB的accessToken有问题以上是关于Facebook 登录不起作用,错误:无效的 Oauth 访问令牌。它总是零的主要内容,如果未能解决你的问题,请参考以下文章
com.firebase.ui.auth.FirebaseUiException:提供程序错误 - Firebase-UI 身份验证 Facebook 登录不起作用