UIWebView不會自動支持處理Passbook .pkpass文件。UIWebView委託獲取MIME類型
在此technical note中,Apple建議通過UIWebViewDelegate方法執行檢查以嗅出MIME類型並相應地處理它。
要使用一個UIWebView添加通行證,實施適當的 UIWebViewDelegate方法來識別當與 MIME類型的應用/ vnd.apple.pkpass
然而視圖負載的數據,我在能夠提供MIME類型的UIWebView Delegate Protocol Reference內找不到任何內容。
我可以直接使用NSURLConnection
委託直接成功下載和處理文件,但是我希望實現的是如果用戶在UIWebView中瀏覽時單擊添加到存摺按鈕,就可以正確處理通行證。由於我不知道鏈接,許多提供商不會將其鏈接後綴爲.pkpass擴展名,所以遵循Apple關於檢查MIME類型的建議似乎是最好的選擇。
我曾嘗試加入以下
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)newRequest
navigationType:(UIWebViewNavigationType)navigationType
{
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[newRequest URL]];
// Spoof iOS Safari headers for sites that sniff the User Agent
[req addValue:@"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25" forHTTPHeaderField:@"User-Agent"];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:newRequest delegate:self];
return YES;
}
我NSURLConnection
代表:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSString *mime = [response MIMEType];
if ([mime isEqualToString:@"application/vnd.apple.pkpass"] && ![_data length]) {
_data = nil; // clear any old data
_data = [[NSMutableData alloc] init];
[_webPanel stopLoading];
}
}
-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
[_data appendData:data];
NSLog(@"Size: %d", [_data length]);
}
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
if ([_data length]) {
PKAddPassesViewController *pkvc = [PassKitAPI presentPKPassFileFromData:_data];
pkvc.delegate = self;
[self presentViewController:pkvc
animated:YES
completion:nil];
}
}
的NSURLConnection
代表正常工作時的連接直接調用,無需UIWebView
。但是,當我嘗試從UIWebView
委託中啓動NSURLConnection
時,傳遞下載失敗,因爲只有80%左右的.pkpass正在下載(我在_data變量和Content-Length標頭中出現了隨機的字節不匹配)。
所以,我的問題:
- 是否有更簡單的方式來獲得一個
MIME
型的保持,直接從UIWebView
委託方法? - 如果不是,那麼我是否會以正確的方式開放並行NSURLConnection?或者有更好的方法嗎?
- 如果NSURLConnection是要走的路,那麼可能導致它停止下載完整文件?
你找到了一個解決方案?如果是,你可以分享嗎? – 2013-09-29 14:09:11
不 - 我在WWDC與Apple工程師討論過,他們告訴我沒有解決方案。我有一些針對文檔和UIWebView代表的開放bug報告。 – PassKit 2013-09-29 16:29:30
你有沒有想過這一個?我將不得不進行此操作,並且希望不必再次手動打開服務器。 – MrTristan 2014-09-07 19:23:17