请求完成后获取数据
Get data after request is done
就我而言,主要问题是用户注册后我无法获取数据。
在我的 windows phone 应用程序中,我曾经通过触发事件 LoadCompleted 来获取数据。
这段代码展示了我之前是如何做到的:
private void AuthBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
string responceData = e.Uri.OriginalString;
if (responceData.Contains("access_token"))
{
if (settings.Contains("IsRegistered"))
{
settings["IsRegistered"] = true;
}
else
{
settings.Add("IsRegistered", true);
}
var parameters = responceData.Split('#')[1].Split('&');
var accessToken = parameters[0].Substring(parameters[0].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
if (settings.Contains("AccessToken"))
{
settings["AccessToken"] = accessToken;
}
else
{
settings.Add("AccessToken", accessToken);
}
var expiresIn = parameters[1].Substring(parameters[1].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
var uID = parameters[2].Substring(parameters[2].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
if (settings.Contains("UserId"))
{
settings["UserId"] = uID;
}
else
{
settings.Add("UserId", uID);
}
if (settings.Contains("IsRegistered"))
{
settings["IsRegistered"] = true;
}
else
{
settings.Add("IsRegistered", true);
}
NavigationService.Navigate(new Uri("/Menu.xaml", UriKind.Relative));
}
}
但现在在我的 IOS 应用程序中,我不知道如何执行此操作。
我用过WKWebView。
这是我的代码示例:
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet var containerView : UIView! = nil
var webView: WKWebView?
var uiWebView: UIWebView?
override func loadView() {
super.loadView()
self.uiWebView = UIWebView()
self.webView = WKWebView()
self.view = self.webView!
}
override func viewDidLoad() {
super.viewDidLoad()
var url = NSURL(string:"https://oauth.vk.com/authorize?client_id=4537563&" +
"redirect_uri=http://api.vk.com/blank.html&display=wap&scope=9999999&response_type=token")
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
谢谢。
UIWebView
的委托协议为您提供了多种跟踪请求状态的方法:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebViewDelegate_Protocol/
尝试使用 WKNavigationDelegate
在 viewDidLoad
中设置委托
class ViewController: UIViewController, WKNavigationDelegate {
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
var url = NSURL(string:"https://oauth.vk.com/authorize?client_id=4537563&" +
"redirect_uri=http://api.vk.com/blank.html&display=wap&scope=9999999&response_type=token")
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
}
加载完成后使用如下方式获取数据
func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) {
// your request has been completed, get the data here
}
就我而言,主要问题是用户注册后我无法获取数据。
在我的 windows phone 应用程序中,我曾经通过触发事件 LoadCompleted 来获取数据。
这段代码展示了我之前是如何做到的:
private void AuthBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
string responceData = e.Uri.OriginalString;
if (responceData.Contains("access_token"))
{
if (settings.Contains("IsRegistered"))
{
settings["IsRegistered"] = true;
}
else
{
settings.Add("IsRegistered", true);
}
var parameters = responceData.Split('#')[1].Split('&');
var accessToken = parameters[0].Substring(parameters[0].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
if (settings.Contains("AccessToken"))
{
settings["AccessToken"] = accessToken;
}
else
{
settings.Add("AccessToken", accessToken);
}
var expiresIn = parameters[1].Substring(parameters[1].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
var uID = parameters[2].Substring(parameters[2].IndexOf("=", StringComparison.Ordinal)).Remove(0, 1);
if (settings.Contains("UserId"))
{
settings["UserId"] = uID;
}
else
{
settings.Add("UserId", uID);
}
if (settings.Contains("IsRegistered"))
{
settings["IsRegistered"] = true;
}
else
{
settings.Add("IsRegistered", true);
}
NavigationService.Navigate(new Uri("/Menu.xaml", UriKind.Relative));
}
}
但现在在我的 IOS 应用程序中,我不知道如何执行此操作。
我用过WKWebView。
这是我的代码示例:
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet var containerView : UIView! = nil
var webView: WKWebView?
var uiWebView: UIWebView?
override func loadView() {
super.loadView()
self.uiWebView = UIWebView()
self.webView = WKWebView()
self.view = self.webView!
}
override func viewDidLoad() {
super.viewDidLoad()
var url = NSURL(string:"https://oauth.vk.com/authorize?client_id=4537563&" +
"redirect_uri=http://api.vk.com/blank.html&display=wap&scope=9999999&response_type=token")
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
谢谢。
UIWebView
的委托协议为您提供了多种跟踪请求状态的方法:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebViewDelegate_Protocol/
尝试使用 WKNavigationDelegate
在 viewDidLoad
class ViewController: UIViewController, WKNavigationDelegate {
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
var url = NSURL(string:"https://oauth.vk.com/authorize?client_id=4537563&" +
"redirect_uri=http://api.vk.com/blank.html&display=wap&scope=9999999&response_type=token")
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
}
加载完成后使用如下方式获取数据
func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) {
// your request has been completed, get the data here
}