2014-07-22 6 views
6

किसी आईओएस 8 में [self.extensionContext openURL:... completionHandler:...]; का उपयोग करने का प्रयास कर रहे ऐप को खोलने के लिए शेयर एक्सटेंशन कभी भी ऐप नहीं खोलता है, और हमेशा सफलता = NO के साथ पूरा करने वाले हैंडलर को कॉल करता है।openURL साझा एक्सटेंशन में काम नहीं करता

Here एक्शन एक्सटेंशन के साथ एक ही समस्या है, लेकिन मुझे लगता है कि शेयर एक्सटेंशन के लिए एक्शन एक्सटेंशन की तुलना में युक्त ऐप खोलने में सक्षम होना अधिक उचित है। शेयर एक्सटेंशन का बिंदु डेटा का संभावित रूप से बड़ा टुकड़ा अपलोड करना है, और ऐप खोलने के बिना ऐसा करने का एकमात्र तरीका NSURLSession के माध्यम से है, जो केवल HTTP (एस) अपलोड कर सकता है। लेकिन एक ऐप HTTP (एस) अपलोड की तुलना में एक अलग तंत्र के माध्यम से सामग्री साझा करना चाहता है।

ऐप्पल दस्तावेज यह नहीं बताता कि openURL... किसी विशेष प्रकार के एक्सटेंशन के लिए उपयोग नहीं किया जा सकता है। यह जानना मुश्किल है कि यह एक बग या इरादा व्यवहार है या नहीं। इसके बारे में कोई आधिकारिक जानकारी नहीं है।

+0

से URL योजना का उपयोग कर काम करना चाहिए इस स्थिति http://stackoverflow.com/a/24709883/250190 के बारे में थोड़ा कहते हैं। मैं भी ऐसा करने के लिए देख रहा हूं, आईओएस 7 में यूट्यूब शेयरिंग की तरह, मैं एक 'यूआईएलर्ट कंट्रोलर' प्रदान करना चाहता हूं जो उपयोगकर्ता को यह देखने का विकल्प देता है कि उन्होंने अभी क्या साझा किया है। यह एक बहुत ही डिस्कनेक्ट अनुभव है क्योंकि यह खड़ा है। –

उत्तर

1

प्रलेखन इंगित करता है कि "विस्तार बिंदु यह निर्धारित करता है कि इस विधि का समर्थन करना है या नहीं, और अभ्यास में केवल जो लोग आज एक्सटेंशन का उपयोग करते हैं वे OpenUrl का उपयोग करके अपने होस्ट ऐप को लॉन्च करने में सक्षम हैं। शेयर, एक्शन, कीबोर्ड, और दस्तावेज़ प्रदाता किसी के लिए काम नहीं करता (बीटा 5)।

+0

"शेयर, एक्शन, कीबोर्ड, और दस्तावेज़ प्रदाता किसी के लिए काम नहीं करता है (बीटा 5)।" ठीक है, लेकिन यह कहीं भी दस्तावेज नहीं है। यह एक बग हो सकता है। – user102008

+0

हो सकता है, लेकिन अगर मैं एप्पल के इरादे के आधार पर क्या करना चाहता हूं और क्या करना है, तो यह आश्चर्यचकित नहीं होगा। यह धागा भी देखें: http://stackoverflow.com/questions/24297273/openurl-not-work-in-action-extension/25189466#25189466 शायद वे अभी भी निर्णय ले रहे हैं ... – n8tr

7

यहाँ कुछ संभावित समाधानों रहे हैं ... Communicating with/opening Containing app from Share extension

जो कि वास्तव में काम के रूप में अभिव्यक्त किया जा सकता

:

  • एक UIDocumentInteractionController को खोलने के लिए एक विशेष प्रकार के एक्सटेंशन के साथ अपने कंटेनर एप्लिकेशन का उपयोग करना और पंजीकरण के अपने आपके एक्सटेंशन से कंटेनर ऐप
  • application:handleEventsForBackgroundURLSession:completionHandler: आपके कंटेनर ऐप के यूआईएप्लिकेशन डिलेगेट क्लास को कॉल करने के लिए एक डमी NSURLSessionTask का उपयोग करने के लिए। फिर, उस विधि में, आप जो कुछ भी चाहते हैं उसे खोलने के लिए [[UIApplication sharedApplication] openURL:url] पर कॉल कर सकते हैं।

इनमें से कोई भी तरीका सही नहीं है, लेकिन वे काम करते हैं (सुनिश्चित नहीं है कि ऐप्पल उन्हें चाहेगा)। अधिक जानकारी के लिए आप लिंक देख सकते हैं। आशा है कि इस मदद करता है :)

संपादित करें: तुम भी रूप में वर्णित https://stackoverflow.com/a/24614589/3923882

0

एक UIWebView का उपयोग मैं इस विधि है जो किसी भी पृष्ठभूमि कार्य को शामिल नहीं करता उपयोग कर रहा हूँ कर सकते हैं:

  • एक UIViewController का उपयोग करें (के बजाय कस्टम लेआउट जोड़ने के लिए डिफ़ॉल्ट SLComposeServiceViewController) शेयर एक्सटेंशन के लिए उप-वर्ग;
  • UIWebView जोड़ें और अपने ऐप के कस्टम यूआरएल को इंगित करने वाले लिंक के साथ एक HTML स्ट्रिंग लोड करें;
  • लिंक पर क्लिक को रोकने के लिए webView:shouldStartLoadWithRequest:navigationType: विधि को लागू करने के लिए और initWithSuiteName: (ऐप समूह का नाम प्रदान करने) को वापस करने से पहले अपने एक्सटेंशन और युक्त ऐप द्वारा साझा किए गए कंटेनर में डेटा को सहेजने के लिए लागू करें।

वेब लिंक पर क्लिक ऐप लॉन्च करता है, जो डेटा को NSUserDefaults में सीधे ला सकता है।

0

मैं अपने कीबोर्ड एक्सटेंशन से यही उपयोग करता हूं।मुझे आशा है कि यह यहाँ भी मदद करता है:

UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 
NSString *urlString = @"https://itunes.apple.com/us/app/watuu/id304697459"; 
NSString * content = [NSString stringWithFormat : @"<head><meta http-equiv='refresh' content='0; URL=%@'></head>", urlString]; 
[webView loadHTMLString:content baseURL:nil]; 
[self.view addSubview:webView]; 
[webView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2.0]; 

कृपया ध्यान दें कि इस मामले में मैं UIInputViewController से इस कॉल instantiating कर रहा हूँ।

इस विधि भी युक्त एप्लिकेशन

संबंधित मुद्दे