2011-12-17 104 views
0

我想克服iOS 5中有關NSURLConnection的更改。iOS 5 - 連接到HTTPS服務器

基本方法改變了,所以如果你需要連接到使用HTTPS,併發送證書來驗證一個網站,你不能這樣做了,因爲許多方法被棄用。

有沒有在那裏我能得到我應該怎麼寫使用iOS5的兼容代碼的代碼工作示例的任何地方嗎?我已經檢查了文檔和頭文件,但是沒有一個單獨的源代碼向我展示瞭如何使用一個示例進行這種連接,該示例顯示了代碼在哪個文件中的位置(假設我只是從Xcode中的標準模板開始,單個視圖模板或標籤欄模板)。

我真的很感激任何建議;由於我的應用程序將在iOS 5上運行,因此我想使用新程序,但缺少文檔和教程使我的任務比我想象的更難。

回答

1

您應該使用NSURLCredentialStorage單。你需要通過調用NSURLCredentialStorage方法之一使用NSURLConnection的前添加憑據存儲,例如:

- (void)setCredential:(NSURLCredential *)credential forProtectionSpace:(NSURLProtectionSpace *)protectionSpace 
+0

謝謝Joris,所以這些是我應該遵循的步驟? 1:授人以NSURLConnectionDelegate添加到我的ViewController 2:添加憑據NSURLCredentialStorage 3:憑據傳遞在你的片段? – user1006198

+0

不,我展示的方法是將它們添加到CredentialStorage。一旦他們在那裏只使用你的NSURLConnection而不用擔心憑證。如果他們在NSCredentialStorage中,他們將被自動使用。 –

+0

謝謝澄清Joris;從來沒有使用NSURLCredential :) – user1006198

1

我用這個:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge: 
     (NSURLAuthenticationChallenge *)challenge { 

if ([challenge previousFailureCount] <= maxRetryCount) { 
    NSURLCredential *newCredential = 
    [NSURLCredential 
    credentialWithUser: userName 
    password:password 
    persistence:NSURLCredentialPersistenceForSession]; 

    [[challenge sender] 
    useCredential:newCredential 
    forAuthenticationChallenge:challenge]; 

    } 
    else 
    { 
    NSLog(@"Failure count %d",[challenge previousFailureCount]); 
    } 
} 

這工作對我很好。但是,它看起來像自簽名證書也被接受。我可能需要發佈一個關於該問題的單獨問題。

+0

感謝您的回覆Jan;確實有效,但它會接受任何自簽名的證書;我將不得不使用Joris提到的解決方案。 – user1006198

+0

嗨user1006198,我找到了一個解決方案,可以使用這種方法。請參閱http://stackoverflow.com/questions/8564812/preventing-self-signed-ssl-certificates-in-ios5;我需要一個挑戰方法(而不是Joris的單例方法,因爲如果會話失效,我不想存儲用戶憑證的時間超過會話持續時間,我需要重新顯示登錄框。 – Jan