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 访问令牌。它总是零的主要内容,如果未能解决你的问题,请参考以下文章

无效的密钥哈希 - android facebook

使用 Parse 登录 Facebook 不起作用

com.firebase.ui.auth.FirebaseUiException:提供程序错误 - Firebase-UI 身份验证 Facebook 登录不起作用

Google 登录在 iOS 中不起作用 - 无效的 GOOGLE_APP_ID 错误

Facebook 受众出价不起作用:捆绑状态无效

android应用程序中的Facebook登录不起作用