Проблема при входе в Instagram в iOS - PullRequest
0 голосов
/ 27 июня 2019

Я ввел вход в систему с помощью 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()
}

Это видео, как все это работает, я хочу получить токен доступа с первой попытки, введите описание ссылки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...