Swift: Facebook Graph API не принимает действительный access_token - PullRequest
0 голосов
/ 24 апреля 2019

Я запускаю быстрый скрипт из командной строки на Mac. Я просто пытаюсь опубликовать URL с помощью access_token, который, как я проверял, работает в других браузерах. Facebook не примет сообщение. Я использую URLSession в Swift, а не в SDK Facebook.

guard let url = URL(string: "https://graph.facebook.com/aumuaamata?") else { return }
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: nil)

var request = URLRequest(url: url)
request.httpMethod = "POST"

let postString = "access_token=433263852003213|gLKD8g4ZAlADEDSSKqy8u_KZ_0"
request.httpBody = postString.data(using: .utf8)

request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

let runLoop = CFRunLoopGetCurrent()
let task = session.dataTask(with: request, completionHandler: { data, response, error in
     if error == nil {
         print("it works!")
     } else {
         print("task error: \(error!)")
     }
     CFRunLoopStop(runLoop)
})
task.resume()
CFRunLoopRun()

Facebook отвечает A page access token is required to request this resource и insufficient_scope.

Я попытался добавить access_token к URL-адресу и затем кодировать его следующим образом:

guard let escapedUrlString = urlRawString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return }

Но скрипт не запускается и говорит, что это недействительный URL. Набрано в браузере все работает как надо.

Есть идеи?

1 Ответ

0 голосов
/ 24 апреля 2019

Это исправление.Я попытался сделать это с помощью curl, и у меня возникла та же проблема.

request.httpMethod = "GET"
request.setValue("Bearer 433263852003213|gLKD8g4ZAlADEDSSKqy8u_KZ_0", forHTTPHeaderField: "Authorization")

Кажется странным, что это необходимо, но это работает!

И нет, приведенный мною пример токена недействителен (вероятно).

...