Я ввел вход в систему с помощью instagram в моем приложении, вход в систему работает нормально, но при входе в систему возникает проблема, мне нужно дважды нажать на кнопку входа в Instagram, чтобы получить токен доступа.Сначала, когда я нажимаю на нее, откройте страницу входа в instagram в моем веб-представлении и после аутентификации перейдите на домашний экран своей учетной записи, здесь я не получил токен доступа, теперь, когда я нажимаю кнопку «Назад» и снова нажимаю кнопку входа в instagram, онапоказывает разрешение на доступ после разрешения, он дает мне токен доступа, я хочу знать, почему он не дает мне токен в первый раз?Вот мой код для входа в систему,
func signInRequest()
{
self.webView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
let authURL = String(format: "%@?client_id=%@&redirect_uri=%@&response_type=token&scope=%@&DEBUG=True", arguments: [InstagramLogin.authUrl,InstagramLogin.clientId,InstagramLogin.redirectUrl,InstagramLogin.scope])
let urlRequest = URLRequest.init(url: URL.init(string: authURL)!)
self.webView.delegate = self
self.webView.loadRequest(urlRequest)
}
func checkRequestForCallBackUrl(request: URLRequest) -> Bool
{
let requestURLString = (request.url?.absoluteString)! as String
if requestURLString.hasPrefix(InstagramLogin.redirectUrl) {
print (request)
let range: Range<String.Index> = requestURLString.range(of: "#access_token=")!
getAuthToken(authToken: requestURLString.substring(from: range.upperBound))
return false;
}
return true
}
func getAuthToken(authToken : String)
{
self.authToken = authToken
print("Instagram authentication token ==", authToken)
getUserInfo(){(data) in
DispatchQueue.main.async {
UIView.animate(withDuration: 0.5, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
self.alertView.isHidden = false
}, completion: nil)
MBProgressHUD.hide(for: self.view, animated: true)
}
}
}
func getUserInfo(completion: @escaping ((_ data: Bool) -> Void)){
MBProgressHUD.showAdded(to: self.view, animated: true)
let url = String(format:"https://api.instagram.com/v1/users/self/?access_token=%@",self.authToken)
var request = URLRequest(url: URL(string: url)!)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let session = URLSession.shared
let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
guard error == nil else {
completion(false)
//failure
return
}
// make sure we got data
guard let responseData = data else {
completion(false)
//Error: did not receive data
return
}
do {
guard let dataResponse = try JSONSerialization.jsonObject(with: responseData, options: [])
as? [String: AnyObject] else {
completion(false)
//Error: did not receive data
return
}
let json = JSON(responseData)
print(json)
let userData = json["data"].dictionary
let name = userData!["full_name"]?.string
let id = userData!["id"]?.intValue
self.userId = id!
self.name = name!
completion(true)
// success (dataResponse) dataResponse: contains the Instagram data
} catch let err {
completion(false)
//failure
}
})
task.resume()
}
Это видео, как все это работает, я хочу получить токен доступа с первой попытки, введите описание ссылки здесь