【问题标题】:Facebook SDK access token issue with Xcode 9.3Xcode 9.3 的 Facebook SDK 访问令牌问题
【发布时间】:2018-09-08 23:37:40
【问题描述】:

我刚刚更新了手机 iOS11.3 和 Xcode 9.3,Facebook 登录在我的旧 SDK 调用中像这样崩溃:

https://pasteboard.co/HeeRDVo.png

我不明白这到底是什么意思,即使它适用于旧版本。 然后我从那个页面应用了 Swift SDK, https://developers.facebook.com/docs/swift/graph

import FacebookCore

let connection = GraphRequestConnection()
connection.add(GraphRequest(graphPath: "/me")) { httpResponse, result in
  switch result {
  case .success(let response):
    print("Graph Request Succeeded: \(response)")
  case .failed(let error):
    print("Graph Request Failed: \(error)")
  }
}
connection.start()

给出以下错误日志:

FBSDKLog: starting with Graph API v2.4, GET requests for //me should contain an explicit "fields" parameter
Graph Request Failed: Error Domain=com.facebook.sdk.core Code=8 "(null)" UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0, com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=An active access token must be used to query information about the current user., com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=2500, com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey={
    body =     {
        error =         {
            code = 2500;
            "fbtrace_id" = ____id____;
            message = "An active access token must be used to query information about the current user.";
            type = OAuthException;
        };
    };
    code = 400;
}}

它说,必须使用活动访问令牌来查询有关当前用户的信息。

当我制作字典注释行时,即使下面的代码块也会出现同样的错误,因为它们也不起作用。

import FacebookCore

struct MyProfileRequest: GraphRequestProtocol {
  struct Response: GraphResponseProtocol {
    init(rawResponse: Any?) {
      // Decode JSON from rawResponse into other properties here.
    }
  }

  var graphPath = "/me"
  var parameters: [String : Any]? = ["fields": "id, name"]
  var accessToken = AccessToken.current
  var httpMethod: GraphRequestHTTPMethod = .GET
  var apiVersion: GraphAPIVersion = .defaultVersion
}


let connection = GraphRequestConnection()
connection.add(MyProfileRequest()) { response, result in
  switch result {
  case .success(let response):
    print("Custom Graph Request Succeeded: \(response)")
    print("My facebook id is \(response.dictionaryValue?["id"])")
    print("My name is \(response.dictionaryValue?["name"])")
  case .failed(let error):
    print("Custom Graph Request Failed: \(error)")
  }
}
connection.start()

我应该怎么做才能克服这个问题?

【问题讨论】:

  • “facebook 登录崩溃” - 你所展示的代码中究竟在哪里,你想象任何 Facebook 登录都会发生......?我没有看到您在任何地方执行实际的登录对话框调用。
  • @CBroe 这是 EXC_BAD_ACCESS,我添加了一个关于我的崩溃的图片点。它在基于objective-c的facebook sdk中工作。

标签: ios xcode facebook facebook-graph-api facebook-login


【解决方案1】:

最后我使用下面的方法而不是 AppDelegate 中的注释打开 url 方法解决了我的问题。希望它可以帮助其他在 iOS 11.3 中遇到此问题的人。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(app,
                                                                     open: url,
                                                                     sourceApplication: options[.sourceApplication] as! String,
                                                                     annotation: options[.annotation])
    }

【讨论】:

  • 谢谢。由于这个错误,我几乎要恢复到 Xcode 9.2。
  • options[UIApplicationOpenURLOptionsKey.sourceApplication] 也有效吗?
  • @ConsBulaquena 如果您的意思是在返回值内部,是的,您也可以使用 UIApplicationOpenURLOptionsKey 前缀,.sourceApplication 做同样的事情:)
猜你喜欢
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多