2016-08-15 19 views
27

में ओपनURL इसलिए स्पष्ट रूप से OpenURL को आईओएस 10 में गिरा दिया गया है। क्या किसी के पास कोई दस्तावेज है कि आगे क्या करना है या नहीं समझा सकता है? मैं पहले से ही एप्पल साइट पर देखा और OpenURL से संबंधित कुछ चीजें मिल गया है और यह कि वे क्या अब उपयोग करने के लिए कहते हैं:आईओएस 10

UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?) 

किसी को भी करता है किसी भी सबूत है कि यह स्विफ्ट 3.0 में OpenURL उपयोग करने के लिए नया तरीका है है? इसके अलावा options: और completionHandler: पैरामीटर में क्रमशः किस मान का उपयोग किया जाना चाहिए?

+0

@LeoDabus कि कह रहा है –

+0

@TomRoggero http://stackoverflow.com/questions/39402696/swift-3-open-link/39460744#39460744 –

उत्तर

40

तुम भी सशर्त जांच का उपयोग कर सकते हैं iOS10 संगत कोड के साथ एप्लिकेशन को आप अद्यतन कर रहे हैं, तो:

func open(scheme: String) { 
    if let url = URL(string: scheme) { 
     if #available(iOS 10, *) { 
     UIApplication.shared.open(url, options: [:], 
      completionHandler: { 
       (success) in 
        print("Open \(scheme): \(success)") 
      }) 
    } else { 
     let success = UIApplication.shared.openURL(url) 
     print("Open \(scheme): \(success)") 
    } 
    } 
} 

प्रयोग :

open(scheme: "tweetbot://timeline") 

Source

+0

यह नमूना सिर्फ स्विफ्ट 3.0 के लिए है। यह बहुत अच्छा है! –

+0

धन्यवाद, मैं इस अनुकूल नहीं बनाया है और अब यह उपयोग कर रहा हूँ। –

+0

इसका उपयोग सफलता = UIApplication.shared()। इसके बजाय openURL (url) को सफलता दें = UIApplication.shared.openURL (url) – niravdesai21

5

नई यूआईएप्लिकेशन विधि openURL: विकल्प: समापन हैंडलर: जो असीमित रूप से निष्पादित किया जाता है और मुख्य कतार पर निर्दिष्ट समापन हैंडलर को कॉल करता है (यह विधि openURL को बदलती है :)।

इस के तहत अतिरिक्त फ्रेमवर्क परिवर्तन>पर UIKit है: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html

+0

कि जवाब का सवाल तरह लेकिन पूरी तरह से नहीं "खुला उपलब्ध नहीं है"। 'है openURL: विकल्प: completionHandler:' एक नया कार्य है कि हम का उपयोग करने वाले हैं या कि क्या मैं अपने सवाल में सुझाव दे रहा था? जहां आप अभी भी 'UIApplication.shared() ... ' – KSigWyatt

+0

जो मैंने पढ़ा है, से यह निश्चित रूप से सुझाव देता है कि' openURL: विकल्प: com pletion हैंडलर: 'फ़ंक्शन' openUrl 'के लिए एक प्रतिस्थापन है। सभी दस्तावेज अभी तक अपडेट नहीं किए गए हैं, और [कुछ] (https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/ डॉक्टर/यूआईडी/टीपी 40007072-सीएच 6-एसडब्ल्यू 8) अभी भी बहिष्कृत कोड को इंगित करता है। – Yasir

+0

यह वह लिंक है जिसे आप पोस्ट करना चाहते थे: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html#//apple_ref/doc/uid/TP40017084-DontLinkElementID_34 –

8

एक खाली विकल्पों शब्दकोश openUrl रूप में एक ही व्यवहार का परिणाम देगा।

अन्यथा

:

+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+ 
| UIApplicationOpenURLOptionsSourceApplicationKey | NSString containing the bundle ID of the originating application                    | 
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+ 
| UIApplicationOpenURLOptionsAnnotationKey  | property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController's annotation property | 
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+ 
| UIApplicationOpenURLOptionsOpenInPlaceKey  | bool NSNumber, set to YES if the file needs to be copied before use                   | 
+-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------+ 

UIApplication.h

से
// Options are specified in the section below for openURL options. An empty options dictionary will result in the same 
// behavior as the older openURL call, aside from the fact that this is asynchronous and calls the completion handler rather 
// than returning a result. 
// The completion handler is called on the main queue. 
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS(""); 

UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsSourceApplicationKey NS_SWIFT_NAME(sourceApplication) NS_AVAILABLE_IOS(9_0); // value is an NSString containing the bundle ID of the originating application 
UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsAnnotationKey NS_SWIFT_NAME(annotation) NS_AVAILABLE_IOS(9_0); // value is a property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController's annotation property 
UIKIT_EXTERN UIApplicationOpenURLOptionsKey const UIApplicationOpenURLOptionsOpenInPlaceKey NS_SWIFT_NAME(openInPlace) NS_AVAILABLE_IOS(9_0); // value is a bool NSNumber, set to YES if the file needs to be copied before use 
1

अभी भी आपके एप्लिकेशन iOS 9 या उससे कम का समर्थन करते हैं, तो सिर्फ पुराने openURL ही बरकरार रखें। यदि आपका परिनियोजन लक्ष्य iOS 10 है तो आपको केवल नए स्थान पर जाना चाहिए।

26

एक त्वरित सुधार:

// Objective-C 
UIApplication *application = [UIApplication sharedApplication]; 
[application openURL:URL options:@{} completionHandler:nil]; 

// Swift 
UIApplication.shared.open(url, options: [:], completionHandler: nil) 

एक पूरा जवाब:

http://useyourloaf.com/blog/openurl-deprecated-in-ios10/

क्रेडिट: कीथ हैरिसन (useyourloaf.com)

-2

वास्तविक करते हैं:

[String: AnyObject] = ["xxx key": "xxx value" as AnyObject, "yyy key": "yyy value" as AnyObject] 

UIApplication.shared.open(URL(string: "http:google.com")!, options: actual, completionHandler: {(true) -> Swift.Void in 
print("Refresh") 
}) 

जहां xxx और yyy कोई स्ट्रिंग है जिसे आप मुद्रित करना चाहते हैं या उन्हें खाली छोड़ना चाहते हैं।

1

आपको यूआरएल लोड करने से पहले कुछ जांच करने की आवश्यकता है। कृपया नीचे दिए गए कोड देखें।

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"https://www.gmail.com"]]){ 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.gmail.com"] options:@{} completionHandler:^(BOOL success) { 
           //completion codes here 
          }]; 
} 

मुझे उम्मीद है कि इससे मदद मिलती है।