【问题标题】:Instagram integration fails in iOS by using webView使用 webView 在 iOS 中集成 Instagram 失败
【发布时间】:2018-01-08 07:29:03
【问题描述】:

在我的应用程序中,我使用 webView 进行 Instagram 身份验证。首先它显示 Instagram 登录屏幕,成功登录后我正在获取 accessToken 然后我使用 accessToken 获取其他详细信息。

这是我在 viewDidLoad 中调用的 loadrequest 方法

func loadrequest(){

        let authURL = String(format: "%@?client_id=%@&redirect_uri=%@&response_type=token&scope=%@", arguments: [INSTAGRAM_API.INSTAGRAM_AUTHURL,INSTAGRAM_API.INSTAGRAM_CLIENT_ID,INSTAGRAM_API.INSTAGRAM_REDIRECT_URI, INSTAGRAM_API.INSTAGRAM_SCOPE ])
        let urlRequest =  URLRequest.init(url: URL.init(string: authURL)!)
        instaWebview.loadRequest(urlRequest)

    }

这是我调用 checkRequestForcallBackURL 方法的 webViewDelegate 方法

  func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
       return checkRequestForcallBackURL(request: request)
    }

在这个方法中我正在检查我是否获得了我的访问令牌

   func checkRequestForcallBackURL(request : URLRequest) ->Bool{

            let requestURLString = (request.url?.absoluteString)! as String

            if requestURLString.hasPrefix(INSTAGRAM_API.INSTAGRAM_REDIRECT_URI) {
                let range: Range<String.Index> = requestURLString.range(of: "#access_token=")!

  handleAuth(authToken: requestURLString.substring(from: range.upperBound))
        return false;
    }

        return true
    }

现在登录询问安全码后,在提供安全码后,它会将我重定向到我不想要的 Instagram 应用程序。我不知道如何进一步处理

【问题讨论】:

  • Instagram 出现暂时性问题,他们一直要求提供安全码,但未提供访问令牌。希望他们能尽快解决。这只发生在某些用户名上,您可以尝试其他一些用户名来检查您的代码。
  • @MayankBarnwal ,嘿,我也厌倦了其他几个帐户,但无法获取代码或访问令牌,它只会将我重定向到 Instagram 应用程序
  • @shaki 您是否尝试过使用其他客户端 ID?我正在尝试使用此链接instagram.com/oauth/authorize/… 并且运行良好。您也可以添加范围。
  • @MayankBarnwal 是的,我厌倦了其他客户 ID,发生了同样的事情,但我无法获取代码或 #accesstoken,但我只重定向到 instagram 应用程序

标签: ios swift instagram instagram-api


【解决方案1】:

我在我的一个应用程序中实现了 Instagram 登录。我要做的是。要获取 instagram 令牌,只需使用 webview 呈现新的 ViewController 并加载 instagram 登录页面。

let authURL = String(format: "%@?client_id=%@&redirect_uri=%@&response_type=token&scope=%@&DEBUG=True", arguments: [INSTAGRAM_IDS.INSTAGRAM_AUTHURL,INSTAGRAM_IDS.INSTAGRAM_CLIENT_ID,INSTAGRAM_IDS.INSTAGRAM_REDIRECT_URI, INSTAGRAM_IDS.INSTAGRAM_SCOPE ])
    let urlRequest =  URLRequest.init(url: URL.init(string: authURL)!)
    web_instaView.loadRequest(urlRequest)

然后在 webview 委托方法中

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    return checkRequestForCallbackURL(request: request)
}


func checkRequestForCallbackURL(request: URLRequest) -> Bool {

    let requestURLString = (request.url?.absoluteString)! as String

    if requestURLString.hasPrefix(INSTAGRAM_IDS.INSTAGRAM_REDIRECT_URI) {
        let range: Range<String.Index> = requestURLString.range(of: "#access_token=")!
        handleAuth(authToken: requestURLString.substring(from: range.upperBound))
        return false;
    }
    return true
}

func handleAuth(authToken: String)  {
    print("Instagram authentication token ==", authToken)
    INSTAGRAM_IDS.INSTAGRAM_USER_TOCKEN = authToken
    UserDefaults.standard.setValue(INSTAGRAM_IDS.INSTAGRAM_USER_TOCKEN, forKey: "INSTAGRAM_USER_TOCKEN")
    NotificationCenter.default.post(name: NSNotification.Name("instaLoginDone"), object: nil)
    self.dismiss(animated: true, completion: nil)
}

在获得 instagram 令牌后,我简单地关闭该 ViewController 并在本地保存令牌。比在后台模式下获取用户信息并显示加载器或任何你想要的。

希望这会对您有所帮助。 :)

【讨论】:

  • 嘿,我做了同样的事情,男人忘了提到 handleAuth 方法
【解决方案2】:

我正在使用WKWebView,在用户输入他们的安全码后,我实现WKWebViewDelegate decidePolicyFor 并查找我不允许的https://www.instagram.com 重定向,而是将它们发送回原来的身份验证 URL,因为他们已经输入了代码,所以现在可以使用了。

public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

    if let url = navigationAction.request.url, url.absoluteString == "https://www.instagram.com/" {
        decisionHandler(.cancel)
        webView.load(scheme.authenticationURlRequest)
        return
    }
}

【讨论】:

【解决方案3】:

好消息,现在我认为 instagram 改变了它的政策,现在我们正在获取代码和访问令牌

【讨论】:

  • 这个问题出现在可疑帐户上,在登录屏幕 instagram 询问安全代码后,它会将用户重定向到仅 instgram 应用程序
猜你喜欢
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多