प्राप्त करें UIWebView स्वचालित रूप से Passbook .pkpass फ़ाइलों की प्रसंस्करण का समर्थन नहीं करता है।UIWebView प्रतिनिधि को MIME प्रकार
इस technical note में, ऐप्पल UIWebViewDelegate विधियों के माध्यम से MIME प्रकार को बाहर निकालने और उसके अनुसार प्रक्रिया करने के लिए एक चेक लागू करने की अनुशंसा करता है।
एक UIWebView का उपयोग कर गुजरता जोड़ने के लिए, की पहचान करने के लिए उपयुक्त UIWebViewDelegate तरीकों को लागू जब आवेदन की एक MIME प्रकार/vnd.apple.pkpass
हालांकि साथ दृश्य लोड डेटा, मैं UIWebView Delegate Protocol Reference के भीतर कुछ भी नहीं मिला जो एमआईएमई प्रकार प्रदान करने में सक्षम है।
मैं सफलतापूर्वक डाउनलोड कर सकते हैं और इस प्रक्रिया में कोई समस्या नहीं के साथ एक NSURLConnection
प्रतिनिधि का उपयोग करते हुए फ़ाइलों को सीधे, लेकिन मैं क्या हासिल करने के लिए इच्छा एक उपयोगकर्ता एक जोड़ें पर क्लिक करता है, तो बटन पासबुक करने के लिए, जबकि एक UIWebView भीतर ब्राउज़ कर गुजरता ठीक से संसाधित करने के लिए के लिए है। चूंकि मुझे लिंक नहीं पता है, और कई प्रदाता एक .pkpass एक्सटेंशन के साथ अपने लिंक को प्रत्ययित नहीं करते हैं, एमआईएमई प्रकार की जांच करने की ऐप्पल की सलाह के बाद जाने का सबसे अच्छा तरीका लगता है।
मैं निम्नलिखित
- (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
लॉन्च करने का प्रयास करता हूं तो प्रतिनिधि डाउनलोड विफल हो जाता है क्योंकि .pkpass का केवल 80% या तो डाउनलोड किया जा रहा है (मुझे _data चर और सामग्री-लंबाई शीर्षलेख में बाइट्स का यादृच्छिक मेल नहीं मिला है)।
तो, मेरे सवालों का:
- वहाँ एक
MIME
प्रकार की पकड़ पाने के लिए एक आसान तरीका है,UIWebView
प्रतिनिधि तरीकों से सीधे? - यदि नहीं, तो क्या मैं समांतर NSURLConnection खोलने के साथ इस सही तरीके से जा रहा हूं, या क्या कोई बेहतर तरीका है?
- यदि कोई NSURLConnection जाने का तरीका है, तो पूर्ण फ़ाइल डाउनलोड करने से कम होने के कारण क्या हो सकता है?
का उपयोग आप इस के लिए एक समाधान मिला? यदि हाँ आप इसे साझा कर सकते हैं? –
नहीं - मैंने डब्ल्यूडब्ल्यूडीसी में ऐप्पल इंजीनियरों के साथ इसकी चर्चा की और उन्होंने मुझे बताया कि कोई समाधान नहीं है।मेरे पास प्रलेखन और UIWebView प्रतिनिधियों के खिलाफ कुछ खुली बग रिपोर्ट हैं। – PassKit
क्या आपने यह पता लगाया है? मुझे इसे करने की ज़रूरत है और मुझे सर्वर को मैन्युअल रूप से हिट करने की आवश्यकता नहीं होगी। – MrTristan