2017-02-20 7 views
4

고객에게 지갑을로드하는 보안 WebView가 있습니다. 보안 정보 MPIN (한 번 암호처럼)을 전달합니다. 서버에서 enter image description here enter image description here"dataTaskWithRequest"는 단 하나의 요청이 필요할 때 NSMutableRequest를 두 번 요청합니다.

, 만약 사용자 유형 잘못 세 번, 그가 차단 가져옵니다 MPIN : 서버 로그에

@IBOutlet weak var loading: UIActivityIndicatorView! 

@IBOutlet var lblLoading: UILabel! 


@IBOutlet weak var mob_webview: UIWebView! 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    mob_webview.hidden = true 
    mob_webview.delegate=self 
    cmmn.createDatabase() 
    linkgot = cmmn.geturl() 

    link="http://*****************************************.jsp?" 

    let request = NSMutableURLRequest(URL: NSURL(string: link)!) 
    request.HTTPMethod = "POST" 
    let postString = "recharge_type=\(_catcode)&amount=\(_amountfiled_got)&mobileNo=\(cmmn.getPhoneNumber())&prePostLan=\(prePostLan)&stdCode=\(_stdCode)&accNo=\(accNo)&deduct_frm=B&rcMobileNum=\(_numberfiled_got)&mobOperator=\(_merch_code)&operator=\(_operatr)&rcType=\(_rec_type)&mpin=\(_mpin)" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil { 
      print("error=\(error)") 
      return 
     } 

     print("response = \(response)") 

     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print("responseString = \(responseString)") 
    } 
    task.resume() 
    mob_webview.loadRequest(request) 







    // Do any additional setup after loading the view. 
} 
func webViewDidFinishLoad(webView_Pages: UIWebView) 
{ 

    mob_webview.hidden = false 
    loading.hidden = true 
    lblLoading.hidden=true 
    print("OK") 

} 

응답에 문제가 있습니다. 이 작업은 서버에서 잘못된 MPIN 히트 수를 기반으로 수행됩니다. 어떤 이유로 고객의 잘못된 MPIN을 입력하고 웹보기를로드하면 두 번 요청 (즉, 요청을 두 번로드하는 링크 호출)이 두 번 발생합니다. 링크가 두 번 호출되어 2 번 기회가 느껴집니다 올바른 MPIN을 입력하십시오. 우리 APP의 안드로이드 버전은 비슷한 종류의 요청으로 올바르게 작동합니다. 그 이유는 무엇입니까?

+5

코드 게시 - 요청 및 완료 처리기. 한 줄로는 충분하지 않습니다. – Roee84

+0

당신은 webview를 가지고 있고 'NSURLSession' 요청을하고 있습니까? 두 사람은 어떻게 관련이 있습니까? 아마도 webview가 하나의 요청을 한 다음 'NSURLSession'을 사용하여 다른 요청을하고있을 것입니다. –

+0

코드를 정리할 수 있습니까? 우리가 무슨 일이 일어나고 있는지보기에는 너무 좋지 않습니다. –

답변

4

질문을 읽은 후 사과 참조 문서를 읽었습니다. 그러면 웹 뷰에서 각 프레임을로드 한 후 webViewDidFinishLoad이 호출됩니다. Here is document

webViewDidFinishLoad : 웹보기가 프레임로드를 완료하면 전송됩니다.

하나의 요청에 대해 얼마나 많은 요청이 있었는지 서버에 확인하십시오. 그것은 2 또는 1입니다. 또한 코드에서 인쇄 명령이 얼마나 많은 시간에 print("response = \(response)")을 실행하는지 알고 싶습니다. 나는이 진술을 위해 콘솔을하지 않기 때문에.

NSURLSession dataTaskWithRequest를 호출하고 웹보기에서 요청을로드 할 때 찾을 수 있습니다. 똑같은 것을 두 번 호출하면 문제가 될 수도 있습니다. webview에서 요청을 열려면 NSURLSession 작업 요청을 사용하지 마십시오. task.resume()에 주석을 달아 실행하십시오. 당신이 요청하는

+0

최대한 빨리 점검하겠습니다. btb print 문은 서버에 대한 내 히트와 관계없이 한 번만 실행됩니다 ...이 질문을 게시하기 전에 이미 확인했습니다. –

+0

2 요청의 주된 이유는 datataskrequest를 호출하고 웹보기에서 요청을로드하는 것입니다. 만약 당신이 'task.resume'당신의 문제를 해결할 것입니다 귀하의 문제를 해결할 것입니다 – sschunara

+0

나는 이것을 받아 들일 것입니다 .. u는 내 현상금 .. :) –

1

NSMutableURLRequest 두 번 :

  1. 당신은 URLSessiondataTaskWithRequest 방법에 전달합니다. 이 메소드는 클로저에있는 요청의 URL에서 데이터를 리턴합니다.
  2. UIWebViewloadRequest 방법으로 전달합니다. 이 메소드는 귀하의 UIWebView (귀하의 mob_webview IBOutlet)에 귀하의 요청 URL에 내용을로드합니다.

이 문제를 해결하려면 URLSession 코드 또는 UIWebView 코드를 제거해야합니다. 제거 할 항목은 서버의 응답으로 무엇을 할 것인지에 달려 있습니다. 데이터로 원하거나 웹뷰에서로드하려고합니까? 데이터로 사용하려면 URLSession을 사용하고 UIWebViewloadRequest을 제거해야합니다. 웹뷰에서로드하려면 UIWebView을 사용하고 UISession 코드를 제거해야합니다. 당신이 제거해야 할 URLSession 코드 인 경우

, 다음을 모두 제거해야합니다 : 두 번 요청을 실행

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
    data, response, error in 

    if error != nil { 
     print("error=\(error)") 
     return 
    } 

    print("response = \(response)") 

    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
    print("responseString = \(responseString)") 
} 
task.resume() 
+0

내 답변에 비해 새로운 답변이 있습니까 :) – sschunara

3

task.resume()와 mob_webview.loadRequest (요청).

작업을 제거하는 것이 좋습니다.loadRequest 전에 resume()을 호출하십시오.